Web開発におけるListenerとFilter
http://www.javadby.com/Web_Service/20080127/5103.
jsp開発中のモニターとフィルターは、この二つのものを言うと、とても大きくて、とても複雑です.今日は一つの現実的な例を使って、この二つのものの役割を説明したいです.
実例の説明
もしあなたが普段北京で生活していたら、辺鄙で貧しい山村に行って生活を体験して、その山村に行ったら、何がほしいか村長が同意してくれます.村長があなたにプレゼントするように手配します.
村民からできるだけ多くのものを持ち帰るために、出発前に大きな袋を用意しました.村民からもらったものを全部袋に入れたいです.そしてあなたが町に帰ったら、この袋は使えなくなります.この袋を捨ててください.
コードシミュレーション
上記のケースを簡単なコードでシミュレーションしたいですが、モニターの役割は何ですか?フィルターはどんな役を演じますか?
1.java web projectを新設する.
2.デフォルトのindex.jspページに2つのリンクを追加し、村民にサツマイモとお金を要求するようにシミュレーションしました.
<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番目のサツマイモをもらう」と出力されます.
「お金をあげる」というリンクをクリックすると、コンソールから「いつお金がありますか?家に帰ります.」
どうですか?ちょっと分かりました
実は、モニターはサービスが起動する前にサービスの正常運行を保証する準備をしています.サービスが終わる時にもう一度善後してください.対応例の場合、出発前に袋を用意して帰りました.袋を捨てます.お手伝いさんのような仕事をして、子供を起こして、子供の世話をして寝ます.
フィルタはサーバの要求に対してフィルタリング制限を行います.対応例の場合は、村長です.生殺の大権を握っています.何事も私のこの関知を越えなければなりません.
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">>
はい、大成功、配置運行、結果はどうなりますか?
分析結果
次のような結果を観測します.
サービスが開始される時、コンソールから「山に入ります.布の袋を用意してください」と出力されます.
「サツマイモにあげる」というリンクをクリックすると、コンソールから「x番目のサツマイモをもらう」と出力されます.
「お金をあげる」というリンクをクリックすると、コンソールから「いつお金がありますか?家に帰ります.」
どうですか?ちょっと分かりました
実は、モニターはサービスが起動する前にサービスの正常運行を保証する準備をしています.サービスが終わる時にもう一度善後してください.対応例の場合、出発前に袋を用意して帰りました.袋を捨てます.お手伝いさんのような仕事をして、子供を起こして、子供の世話をして寝ます.
フィルタはサーバの要求に対してフィルタリング制限を行います.対応例の場合は、村長です.生殺の大権を握っています.何事も私のこの関知を越えなければなりません.