- ベストアンサー
jspからServletを呼び、元のjspページに戻る方法
- jspページにあるボタンを押すとServletに値を渡し、処理の結果を元のjspページに表示する方法について教えてください。
- 複数のjspページから呼び出されるServletで処理をした後に、元のjspページに戻る方法を知りたいです。
- jspからServletを経由して値を処理し、元のjspページに戻る方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
doGetメソッドなら import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class サーブレット名 extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { try { res.sendRedirect(new URI(req.getHeader("referer")).getPath()); } catch (URISyntaxException e) { e.printStackTrace(); } } } (JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳しく書いたほうがいいですよ^^!ロジック自体はもっといいものがあるかどうか検討してみてください。sendRedirectメソッドはリクエスト属性を保持しないので、必要な場合はRequestDispatcher#forwardメソッドの使用も考えられます。その場合はパスの記述が/アプリ名/ファイル名ではなく/ファイル名 になりますが(余談))
その他の回答 (3)
すみません、先ほど「そのパラメーターをServletにも渡さないとだめでしょう。」と書きましたが、今回はサーブレットの処理はすんでいるということですので、必要ないですね。失礼。
kingyo0c0さんのやりたいことを把握できているかわかりませんが、 「a.jsp?引数」→「Servlet」→「a.jsp?引数」 ということは a.jspを呼んだときにクエリ情報(?引数というのはたとえば?id=1見たいな感じですよね?)をセットしているのですよね?これはスコープがリクエストですから、そのパラメーターをServletにも渡さないとだめでしょう。例)<a href=サーブレットのURL?引数>あいうえお</a> そうするとサーブレット側では、先ほどのgetPath()をtoString()にするとa.jsp?引数にリダイレクトしてくれます。PS:困ったときはまずjavadocを見るといいですよ^^!
お礼
お礼が遅れてしまってすみません。 丁寧なご回答ありがとうございます。 Liveinjapaさんに教えていただいた内容で 無事、解決することができました。 何度も質問を重ねてしまってすみませんでした。 本当にありがとうございました。
sendRedirectをつかうなら res.sendRedirect(new URI(req.getHeader("referer")).getPath()); 見たいになると思います(試してませんのでわかりませんが)。
補足
回答ありがとうございます。 教えていただいたコードで試してみたのですが、 res.sendRedirect(new URI(req.getHeader("referer")).getPath());の URIの部分でエラーが出てしまいます。 コードをそのまま書いたのでは出来ないのでしょうか? 大変初歩的な質問で申し訳ありませんが、 よろしくお願いいたします。
補足
詳しい回答ありがとうございます。 環境は、JDK 6、MySql 5.0、eclipseを使用しています。 import文が足りなかったようで、URIのエラーはなくなりました。 みなさんに教えていただいたものを参考に、 無事、元のjspページに戻ることも出来たのですが・・・ 「a.jsp」→「Servlet」→「a.jsp」というページ遷移は上手くいくのですが、 「a.jsp?引数」→「Servlet」→「a.jsp?引数」という引数を持つjspページ間での遷移が出来ません。 元のページに戻るときに、?の後の引数の部分が取れていないようなのですが、 引数つきのページに戻ることは出来ないのでしょうか? sendRedirectではなく、forwordを使うと出来るのでしょうか? 質問ばかりで申し訳ありませんが、よろしくお願いいたします。