• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サーブレットのパラメタ変更)

サーブレットのパラメタ変更について

このQ&Aのポイント
  • サーブレットのパラメタ変更についてご質問です。
  • HTMLフォームの値をサーブレットで取得し、JSPで変更することは可能でしょうか?
  • 初心者向けの質問ですが、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.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; } } --------------------------------------------

mintia007
質問者

お礼

サンプルありがとうございました。なるほどーっていう感じです。 これをFilterから行えば楽勝ですね。 今日、さっそくやってみます。ありがとうございました。

その他の回答 (4)

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.4

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)
回答No.3

サーブレットフィルタ等でよく使われる手法だったと思いますが、 ServletRequestWrapperクラスを継承した独自リクエストクラスを 作成し、getParameter()をオーバーライドすればよかったと思います。 getRequestDispatcher()の第一パラメータに、その新しいリクエスト クラスのインスタンスを指定します。 あまり細かく説明していませんので、意味がよくわからなければ、 上記のキーワードを元に調べてみてください。

mintia007
質問者

お礼

おーーーっと。方法があるのでしょうか? ググって調査してトライしてみます。 大変貴重な情報、ありがとうございました。

  • hatimiti
  • ベストアンサー率68% (26/38)
回答No.2

if ("cat".equals(request.getParamater("animal")) { request.setAttribute("animal", "dog"); } のように、属性に設定する方法ではだめですか? getParameter ではなく、getAttribute で取得することになりますが、、、

mintia007
質問者

補足

ご回答ありがとうございます。 実は、その方向で今はプロジェクト的にすすんでるのですが、 「もしかしたら!」と思い質問させていただきました。 確かに、別List or Mapで形成したほうが無難なのかもです。 とても参考になりました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

getRequestDispatcher("Jsp1.jsp?animal=dog") で。

mintia007
質問者

補足

あやや。。。 やはりHttpServletRequestインスタンスのパラメータanimalは直接変えられないのですね・・・ POSTオペレーションでJsp1.jspへ渡したかったのですけど、GETオペレーションにするしかないんですか。。。 ちなみにanimalは例えでして、実はかなりの量のパラメータ値がありまして・・・。しかもGETオペレーションは社内ルールで特別な理由がない限りNGみたいです><。(更に漢字などの2バイト文字はUTF-8にしなければNGみたいです)。 なんにしましても、ご回答、大変ありがとうございました。参考になりました。

関連するQ&A