0

このようなHTMLフォームを使用していますが、

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Submit">
</form>

この HTML フォームのパスは、たとえばhttp://www.mywebapp.com/sample.htmlのようになります。

私のサーブレットで を使用しString url = req.getRequestURL().toString();て文字列を出力すると、HTML URL ではなく、フォーム アクション URL http://www.mywebapp.com/myservlet?userid=12345が出力されます。

予想される HTML URL : http://www.mywebapp.com/sample.html (ここからのみ要求し、この URL が必要です)

サーブレットで HTML url パスを取得する方法を教えてください。

4

3 に答える 3

3

これはある種の問題です。なぜなら、ユーザーが書き込んだときにページをロードhttp://www.mywebapp.com/sample.htmlし、この最初のリクエストでrequest.getRequestURL().toString正確にこの値から取得するからです。

(クライアント側からの)フォームを使用した次のリクエストでは、URLはこれではなく、 atributtehttp://www.mywebapp.com/sample.htmlで指定されたものになります。form action

隠し値をフォームなどで渡すことについては多くの提案がありますが、単純なHTTPを簡単に利用できます。GETリクエストを実行するたびに、ブラウザ(または他のクライアント)ウィンドウで新しいURLを取得しますが、ブラウザでPOSTリクエストURLを実行しても変更されません。したがって、これがPOSTリクエストであることがわかっていて、このリクエストが送信されている場所からページを取得したい場合は、コード内でHttpヘッダー「リファラー」から次のように簡単に読み取ることができます。

String URLfromWherePostWasMade = request.getHeader("Referer"); 

これは、すべての「隠しフィールド」の例と同じように機能するはずです

于 2013-01-22T10:01:29.267 に答える
3

あなたが正しく理解している場合は、後続のリクエスト (form投稿) を行うときに、1 つのリクエスト (html をロードしたリクエスト) の URL を取得する必要があります。

HTTP はステートレスであるため、これを確実に行う方法はありません。

これを行う必要があると、少しコードの匂いがしますが、本当に URL が必要な場合は、URL を隠しファイルとして渡す必要がありinputますform。JSP/JSTL を使用するか、JavaScript を使用してクライアント側で何かを行うかにかかわらず、これを行うにはさまざまな方法がありますが、基本的には次のformようなものを取得しようとします。

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
   <input type="file" name="file">
   <input type="hidden" name="url" value="http://www.mywebapp.com/sample.html"/>
   <input type="submit" value="Submit">
</form>
于 2013-01-22T09:49:04.647 に答える
1

あなたの「HTMLページ」は「リファラー」と呼ばれ、この方法で取得できます

HttpServletRequest.getHeader("Referer");

あなたの場合、フォームが送信されたページを返します

http://www.mywebapp.com/sample.html
于 2013-01-22T10:15:22.447 に答える