1

最近、Tomcat7.0サーバーを使用していくつかのHTTPサービスの作成に取り組んでいます。以下のコードは、サービスのテストに使用したhtmlファイルです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>              
                <form id="fm" method="post" action="http://localhost:8080
/DataService/ProductData?category=Ser + bø&location=Herlev##Vejle">
                    <input type="submit" value="Submit">
                </form>
</body>
</html>

私の問題は、カテゴリパラメータ「Ser+bø」に関するものです。サーバー側では、スペース「+」スペースの代わりに3つのスペースを持つ「Serbø」として読み取られます。私の知る限り、この問題はエンコーディングに関係している可能性があります。リクエストにはUTF-8を使用しています。また、UTF-8を使用するようにTomcatサーバーの構成を変更しました。私が間違っていることについて何か考えはありますか?

4

2 に答える 2

0

パラメータをバックエンドに渡すようにフォームアクションURLを変更することは、フォームを処理する正しい方法ではありません。これらすべてを回避する最善の方法は、代わりに個別のフォームパラメータを使用することです。

<form id="fm" method="post" action="http://localhost:8080
/DataService/ProductData?category=Ser %2B bø&location=Herlev##Vejle">
   <input type="hidden" name="category" value="Ser %2B bø">
   <input type="hidden" name="location" value="Herlev##Vejle">
   ...
</form>

これは、URLにRFC 3986に基づく独自のエンコード規則があるためです。Plusは、そこにあるスペースを表します。したがって、JSPまたはJavaScriptを使用して、URLをサーバーに渡す前にエンコードする必要があります。エンコード+されます%2B

<form id="fm" method="post" action="http://localhost:8080
/DataService/ProductData?category=Ser %2B bø&location=Herlev##Vejle">

ユーザー入力の場合は、ここで説明するように、JavaScriptを使用してエンコードする必要があります。

于 2013-01-21T10:33:05.360 に答える
0

+、スペースのURLエンコードされた表現です。だからあなたはそれをスペースとして取り戻したのです。基本的に、個々のパラメータの名前と値をURLエンコードする必要があります。

Tomcatを実行しているとすると、JSPも実行している可能性があります。JSPでは、 JSTL <c:url>を使用し<c:param>て、次のように適切にエンコードされたURLを作成できます。

<c:url var="formActionURL" value="http://localhost:8080/DataService/ProductData">
    <c:param name="category" value="Ser + bø" />
    <c:param name="location" value="Herlev##Vejle" />
</c:url>
<form action="#{formActionURL}">
    ...
</form>
于 2013-01-21T10:49:33.787 に答える