以前、パラメータごとにとってきて、その処理をサーブレット内で書いて、出力もそこでやるより、
(1)画面からの入力は ・すべてのパラメーターをハッシュマップに入れる ・セッションも、そのハッシュマップに入れる (2)処理は、そのハッシュマップを、POJOクラスのメソッド にわたす(そのクラス、メソッドは任意。 なので、そこの呼び出しは書く) (3)画面への出力は ・JSPなら、セッションに値を渡す ・XMLなら、ハッシュマップに入れている値からとってくる |
すれば、自動化できるということを書きました。
今回はその2回目、「(1)画面からの入力は」について
■セッションとパラメータをすべてハッシュマップに入れる
サーブレットのセッションとパラメータをすべて、ハッシュマップに入れてしまう(要するに、サーブレット版、カオル姫方式)。
そうすれば、ハッシュマップをモデルに渡して、モデルのほうでは、サーブレット関係無しに処理できる。
テストのときにも、サーブレットの再起動がないので便利便利。。
っていうことで、前にも書いたかもしれないけど、「セッションとパラメータをすべてハッシュマップに入れる」処理は、こんなかんじ。。
/* * インポート部分は省略 */ public class sample extends HttpServlet { /* * メソッド:service<BR> * だけど、今日の部分はdoPost,doGetでもおなじだよ * */ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // データを入れるところ宣言 HashMap map = new HashMap(); //======================================// // セッション開始 // //======================================// HttpSession session = request.getSession(true); //======================================// //セッションデータを全部ハッシュマップに// //======================================// Enumeration namelist; namelist = session.getAttributeNames(); if ( namelist != null ) { while(namelist.hasMoreElements() == true ) { String key = (String)namelist.nextElement(); map.put(key,session.getAttribute(key)); } } //======================================// // 引数のデータを全部ハッシュマップ // //======================================// Enumeration namelist2; request.setCharacterEncoding("utf-8"); namelist2 = request.getParameterNames(); if ( namelist2 != null ) { while(namelist2.hasMoreElements() == true ) { String key = (String)namelist2.nextElement(); map.put(key,request.getParameter(key)); } } /* * 以降、省略(というか、次回以降に続く) * |
(上記< > = は、本当は半角)
引数はUTF-8の場合です。
ってことで、(1)はおしまい。