Web開発におけるListenerとFilter


http://www.javadby.com/Web_Service/20080127/5103.
jsp開発中のモニターとフィルターは、この二つのものを言うと、とても大きくて、とても複雑です.今日は一つの現実的な例を使って、この二つのものの役割を説明したいです.
実例の説明
        もしあなたが普段北京で生活していたら、辺鄙で貧しい山村に行って生活を体験して、その山村に行ったら、何がほしいか村長が同意してくれます.村長があなたにプレゼントするように手配します.
        村民からできるだけ多くのものを持ち帰るために、出発前に大きな袋を用意しました.村民からもらったものを全部袋に入れたいです.そしてあなたが町に帰ったら、この袋は使えなくなります.この袋を捨ててください.
コードシミュレーション
         上記のケースを簡単なコードでシミュレーションしたいですが、モニターの役割は何ですか?フィルターはどんな役を演じますか?
1.java web projectを新設する.
2.デフォルトのindex.jspページに2つのリンクを追加し、村民にサツマイモとお金を要求するようにシミュレーションしました.
<html>
  <body>
    <h1>       ,  </h1><br>
    <a href="hongshu.jsp">   </a><br/>
    <a href="money.jsp">  </a><br/>
  </body>
</html>
3.大きな布袋類を新たに作成します.BigBag.java、以下の通りです.
package chb.demo.web;

import java.util.HashMap;

public class BigBag ...{
    public static HashMap<String, Integer> bag;//             
}
4.新しいモニターを作成します.MyListener.javaは以下の通りです.
package chb.demo.web;

import java.util.HashMap;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener...{

    public void contextDestroyed(ServletContextEvent arg0) ...{
        BigBag.bag = null;
        System.out.println("   ,      ");
    }

    public void contextInitialized(ServletContextEvent arg0) ...{
        BigBag.bag = new HashMap<String, Integer>();
        System.out.println("    ,      ");
    }

}
5.フィルタをもう一つ作成します.MyFilter.javaは以下の通りです.
package chb.demo.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFilter implements Filter ...{

    public void destroy() ...{

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException ...{
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse rsp = (HttpServletResponse)response;
        if(req.getRequestURI().toString().endsWith("money.jsp"))...{
            //        ?     
            rsp.sendRedirect("gohome.jsp");
            System.out.println("        ,    !");
            return;
        }else if(req.getRequestURI().toString().endsWith("hongshu.jsp"))...{
            if(BigBag.bag.containsKey("hongshu"))...{
                int num = BigBag.bag.get("hongshu")+1;
                BigBag.bag.put("hongshu", num);
                System.out.println("   "+num+"   ");
            }else...{
                BigBag.bag.put("hongshu", 1);
                System.out.println("   1   ");
            }
            //     ,           。。
            chain.doFilter(request, response);
        }else...{
            //       ,  
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException ...{

    }

}
6.web.xmlにモニタとフィルタを配置し、以下のようにします.
<web-ap version=“2.4”xmlns=“http://java.sun.com/xml/ns/j2ee「
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance「
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">>
            myFilter
        chb.demo.web.MyFilter
   
   
        myFilter
        /*
   

   
        chb.demo.web.MyListener
   

   
        index.jsp
   


はい、大成功、配置運行、結果はどうなりますか?
分析結果
次のような結果を観測します.
サービスが開始される時、コンソールから「山に入ります.布の袋を用意してください」と出力されます.
「サツマイモにあげる」というリンクをクリックすると、コンソールから「x番目のサツマイモをもらう」と出力されます.
「お金をあげる」というリンクをクリックすると、コンソールから「いつお金がありますか?家に帰ります.」
どうですか?ちょっと分かりました
実は、モニターはサービスが起動する前にサービスの正常運行を保証する準備をしています.サービスが終わる時にもう一度善後してください.対応例の場合、出発前に袋を用意して帰りました.袋を捨てます.お手伝いさんのような仕事をして、子供を起こして、子供の世話をして寝ます.
フィルタはサーバの要求に対してフィルタリング制限を行います.対応例の場合は、村長です.生殺の大権を握っています.何事も私のこの関知を越えなければなりません.