2010-12-10 16 views
3

ユーザーが(特定の地域のレストランを検索するための)「レストラン」リンクをクリックするシナリオがあります。私は場所が設定されているかどうかを確認する必要があります。それが設定されていない場合、私は彼が場所を設定することができるページに彼をリダイレクトし、設定された場所でフィルタリングされた検索結果に戻ります。私はresponse.sendRedirect(url)を使用して、ユーザーを設定場所ページにリダイレクトしています。ただし、リダイレクトのバックURL(場所を設定した後にユーザーに送信するURL)を送信するにはどうすればよいですか。HTTP応答を使用してユーザーをリダイレクトする方法

私はこの試み:

response.sendRedirect("/location/set.html?action=asklocation&redirectUrl="+ 
      request.getRequestUri()+request.getQueryString()); 

が、これは動作していないとエラー404が示されています。また、ブラウザで形成されたURLは見栄えが悪いです。あなたは、少なくともAが欠落しているよう

+0

エラー404 FileNotFound、http:// /location /set.htmlが存在することを確認する必要があります。あなたが言及したURLを発射するとどうなりますか? – Koekiebox

+0

最初に試してみる/ – mauretto

答えて

7

が見える

してください、誰もがこの問題を解決することができれば...「?」 request.getRequestUri()request.getQueryString()の間です。パラメータをurl-encodeする必要があります。これはjava.net.URLEncoderを使用できます。

また、リダイレクトを行うときは、コンテキストパスの前に、request.getContextPath()を追加する必要があります。

個人的に
String secondRedirectUrl = request.getRequestUri()+"?"+request.getQueryString(); 
String encodedSecondRedirectUrl = URLEncoder.encode(secondRedirectUrl, serverUrlEncodingPreferablyUTF8); 
String firstRedirectUrl = request.getContextPath()+"/location/set.html?action=asklocation&redirectUrl="+encodedSecondRedirectUrl; 
response.sendRedirect(firstRedirectUrl); 

よう

何か、私はむしろセッションでRequestDispatcherを格納した場所が設定された後、それを転送することによって、問題を解決すると思います。それでも解決しない場合は、

response.sendRedirect("location/set.html?action=asklocation&redirectUrl="+ 
      request.getRequestUri()+request.getQueryString()); 

をあなたのURL文字列の先頭にrequest.getContextPath()を追加します。

+0

なぜ彼は追加の '?'が必要なのですか?OPはそれを相対URLに含めました –

+0

'redirectUrl'パラメータの値は、OPが設定した後にリダイレクトするクエリ文字列を持つパスです'/ location/set.html'上の場所です。彼はクエリ文字列からパスを分離する必要があります。それ以外の場合は、現在のページが '/ foo/bar?problem = lol'であれば'/foo/barproblem = lol'になり、404になります。 –

+0

URL 'location/set.html?action = asklocation&redirectUrl ='すでに '?'を含んでいますが、あなたは '&'と言っていますか? –

1

私の最初の反応は、(あなたのコードに)、あなたのURLにこの効果の何かを/を削除することになりますもし

response.sendRedirect(request.getContextPath() + "/location/set.html?action=asklocation&redirectUrl="+request.getRequestUri()+request.getQueryString()); 

Javadoc状態:、そうのような場所は相対的なものではなく、 コンテナ '/'はコンテナ を現在の要求に相対的に解釈します URI。場所が で相対的な場合、コンテナはサーブレット コンテナルートに対して と解釈します。

+0

opは、パスが現在の要求URIとの相対的なものであるとは決して言いませんか? –

+0

@ChristofferHammarström、しかし、彼は404を取得しているので、サーブレットコンテナは完全なURLにマップできません。 –

+0

私は、404がパラメータで提供されたパスにリダイレクトしようとしていたことを意味すると理解しました。また、コンテキストパスが存在しないため404が原因である可能性があります。 –

関連する問題