プロが教える店舗&オフィスのセキュリティ対策術

・jspページにあるボタンを押すとServletに値を渡す。
・Servletで処理をする。
・処理の結果を元のjspページに表示する。

というプログラムを作りたいと考えています。
jspページ→Servletで処理をする、という所までは出来たのですが
その後元のページに戻すというところで困っています。

jspページは複数(十数ページ)あり、Servletは1つです。
a.jsp→Servlet→a.jsp
b.jsp→Servlet→b.jsp
このように、どのjspページから呼ばれても、元のjspページに
戻したいのですが、どのようにすれば実現できるでしょうか?

A 回答 (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メソッドの使用も考えられます。その場合はパスの記述が/アプリ名/ファイル名ではなく/ファイル名 になりますが(余談))

この回答への補足

詳しい回答ありがとうございます。
環境は、JDK 6、MySql 5.0、eclipseを使用しています。

import文が足りなかったようで、URIのエラーはなくなりました。
みなさんに教えていただいたものを参考に、
無事、元のjspページに戻ることも出来たのですが・・・

「a.jsp」→「Servlet」→「a.jsp」というページ遷移は上手くいくのですが、
「a.jsp?引数」→「Servlet」→「a.jsp?引数」という引数を持つjspページ間での遷移が出来ません。

元のページに戻るときに、?の後の引数の部分が取れていないようなのですが、
引数つきのページに戻ることは出来ないのでしょうか?
sendRedirectではなく、forwordを使うと出来るのでしょうか?

質問ばかりで申し訳ありませんが、よろしくお願いいたします。

補足日時:2009/01/18 18:22
    • good
    • 0

すみません、先ほど「そのパラメーターをServletにも渡さないとだめでしょう。

」と書きましたが、今回はサーブレットの処理はすんでいるということですので、必要ないですね。失礼。
    • good
    • 0

kingyo0c0さんのやりたいことを把握できているかわかりませんが、


「a.jsp?引数」→「Servlet」→「a.jsp?引数」
ということは a.jspを呼んだときにクエリ情報(?引数というのはたとえば?id=1見たいな感じですよね?)をセットしているのですよね?これはスコープがリクエストですから、そのパラメーターをServletにも渡さないとだめでしょう。例)<a href=サーブレットのURL?引数>あいうえお</a>
そうするとサーブレット側では、先ほどのgetPath()をtoString()にするとa.jsp?引数にリダイレクトしてくれます。PS:困ったときはまずjavadocを見るといいですよ^^!
    • good
    • 0
この回答へのお礼

お礼が遅れてしまってすみません。
丁寧なご回答ありがとうございます。

Liveinjapaさんに教えていただいた内容で
無事、解決することができました。

何度も質問を重ねてしまってすみませんでした。
本当にありがとうございました。

お礼日時:2009/01/25 01:10

sendRedirectをつかうなら


res.sendRedirect(new URI(req.getHeader("referer")).getPath());
見たいになると思います(試してませんのでわかりませんが)。

この回答への補足

回答ありがとうございます。

教えていただいたコードで試してみたのですが、
res.sendRedirect(new URI(req.getHeader("referer")).getPath());の
URIの部分でエラーが出てしまいます。

コードをそのまま書いたのでは出来ないのでしょうか?

大変初歩的な質問で申し訳ありませんが、
よろしくお願いいたします。

補足日時:2009/01/18 03:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A