- ベストアンサー
サーブレットのパラメタ変更について
- サーブレットのパラメタ変更についてご質問です。
- HTMLフォームの値をサーブレットで取得し、JSPで変更することは可能でしょうか?
- 初心者向けの質問ですが、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
すいません。先ほどNo.2と名乗りましたが、No.3の誤りでした(汗) あと、ついでにgetParameterの実装がカッコ悪かったので、 修正したものを再掲します。 Servlet1.java -------------------------------------------- import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Servlet1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MyServletRequest myrequest = new MyServletRequest(request); getServletContext().getRequestDispatcher("/Jsp1.jsp").forward( myrequest, response ); } } class MyServletRequest extends HttpServletRequestWrapper { public MyServletRequest(HttpServletRequest request) { super(request); } public String getParameter(String name) { String value = super.getParameter(name); if (name.equals("animal") && value.equals("dog")) { value = "cat"; } return value; } } --------------------------------------------
その他の回答 (4)
- Lchan0211
- ベストアンサー率64% (239/371)
No.2です。 サンプルを作ってみたので参考にしてください。 Servlet1.java -------------------------------------------- import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Servlet1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MyServletRequest myrequest = new MyServletRequest(request); getServletContext().getRequestDispatcher("/Jsp1.jsp").forward( myrequest, response ); } } class MyServletRequest extends HttpServletRequestWrapper { public MyServletRequest(HttpServletRequest request) { super(request); } public String getParameter(String name) { if (name.equals("animal")) { if (super.getParameter(name).equals("dog")) { return "cat"; } } return super.getParameter(name); } } --------------------------------------------
- Lchan0211
- ベストアンサー率64% (239/371)
サーブレットフィルタ等でよく使われる手法だったと思いますが、 ServletRequestWrapperクラスを継承した独自リクエストクラスを 作成し、getParameter()をオーバーライドすればよかったと思います。 getRequestDispatcher()の第一パラメータに、その新しいリクエスト クラスのインスタンスを指定します。 あまり細かく説明していませんので、意味がよくわからなければ、 上記のキーワードを元に調べてみてください。
お礼
おーーーっと。方法があるのでしょうか? ググって調査してトライしてみます。 大変貴重な情報、ありがとうございました。
- hatimiti
- ベストアンサー率68% (26/38)
if ("cat".equals(request.getParamater("animal")) { request.setAttribute("animal", "dog"); } のように、属性に設定する方法ではだめですか? getParameter ではなく、getAttribute で取得することになりますが、、、
補足
ご回答ありがとうございます。 実は、その方向で今はプロジェクト的にすすんでるのですが、 「もしかしたら!」と思い質問させていただきました。 確かに、別List or Mapで形成したほうが無難なのかもです。 とても参考になりました。
- askaaska
- ベストアンサー率35% (1455/4149)
getRequestDispatcher("Jsp1.jsp?animal=dog") で。
補足
あやや。。。 やはりHttpServletRequestインスタンスのパラメータanimalは直接変えられないのですね・・・ POSTオペレーションでJsp1.jspへ渡したかったのですけど、GETオペレーションにするしかないんですか。。。 ちなみにanimalは例えでして、実はかなりの量のパラメータ値がありまして・・・。しかもGETオペレーションは社内ルールで特別な理由がない限りNGみたいです><。(更に漢字などの2バイト文字はUTF-8にしなければNGみたいです)。 なんにしましても、ご回答、大変ありがとうございました。参考になりました。
お礼
サンプルありがとうございました。なるほどーっていう感じです。 これをFilterから行えば楽勝ですね。 今日、さっそくやってみます。ありがとうございました。