JAva web開発におけるlistenerとfilter
jsp開発中のリスナーとフィルタ、この2つは、どちらかというと、大きくて煩雑です.今日は現実的な例で、この2つの役割を説明したいと思います.
ケーススタディ
もしあなたが普段北京で生活しているとしたら、ある日あなたはとても辺鄙で貧しい山村に行って生活を体験して、その山村に着いたら、あなたは何がほしいですか.村長は同意して、それから村人を手配してあなたにあげますが、少し例外があります.
村人からできるだけ多くのものを持っていくために、出発前に大きな袋を用意して、村人からもらったものを袋に入れたいと思っています.そしてあなたが町に帰った後、この袋は役に立たないので、この袋を捨てました.
コードシミュレーション
はい、以下の簡単なコードで上記のケースをシミュレートしたいのですが、リスナーの役割を考えてみてください.フィルターはどんな役を演じますか?
1.java web projectを新規作成する.
2.デフォルトのindex.jspページに2つのリンクを追加し、村人にサツマイモとお金を要求するシミュレーションを行いました.以下のようにします.
3.新しい大きな布袋類:BigBag.JAva、以下の通りです.
4.新しいListener:MyListener.JAva、以下の通りです.
5.フィルタをもう1つ追加:MyFilter.JAva、以下の通りです.
6.web.xmlでは、次のようにリスナーとフィルタを構成します.
さあ、大成功、配置運行、観察結果はどうですか.
解析結果
次のような結果が得られます.
サービスが開始されると、コンソールは「山に入ります.布袋を用意してください」と出力します.
「サツマイモへ」のリンクをクリックすると、コンソールから「x番目のサツマイモを得る」と出力されます.
「お金をあげる」リンクをクリックすると、コンソールから「いつお金があったのか、家に帰れ!」と出力されます.
どうですか.ちょっと分かった?
実は、リスナーはサービスが起動する前にサービスが正常に運行することを保証する準備をして、サービスが終了する時にもう一度後回しにします.対応例では、出発する前に袋を用意し、帰ってきたら袋を捨てる.家政婦のような仕事をして、子供の世話をして起きて、子供の世話をして寝ます.
フィルタはサーバの要求に対して、フィルタ制限を加える.対応例としては村長がいて、生殺の大権を握っていて、何事も私の関門を通らなければなりません^^;
ケーススタディ
もしあなたが普段北京で生活しているとしたら、ある日あなたはとても辺鄙で貧しい山村に行って生活を体験して、その山村に着いたら、あなたは何がほしいですか.村長は同意して、それから村人を手配してあなたにあげますが、少し例外があります.
村人からできるだけ多くのものを持っていくために、出発前に大きな袋を用意して、村人からもらったものを袋に入れたいと思っています.そしてあなたが町に帰った後、この袋は役に立たないので、この袋を捨てました.
コードシミュレーション
はい、以下の簡単なコードで上記のケースをシミュレートしたいのですが、リスナーの役割を考えてみてください.フィルターはどんな役を演じますか?
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.新しいListener: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.フィルタをもう1つ追加: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では、次のようにリスナーとフィルタを構成します.
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<filter>
<filter-name>myFilter</filter-name>
<filter-class>chb.demo.web.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>chb.demo.web.MyListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
さあ、大成功、配置運行、観察結果はどうですか.
解析結果
次のような結果が得られます.
サービスが開始されると、コンソールは「山に入ります.布袋を用意してください」と出力します.
「サツマイモへ」のリンクをクリックすると、コンソールから「x番目のサツマイモを得る」と出力されます.
「お金をあげる」リンクをクリックすると、コンソールから「いつお金があったのか、家に帰れ!」と出力されます.
どうですか.ちょっと分かった?
実は、リスナーはサービスが起動する前にサービスが正常に運行することを保証する準備をして、サービスが終了する時にもう一度後回しにします.対応例では、出発する前に袋を用意し、帰ってきたら袋を捨てる.家政婦のような仕事をして、子供の世話をして起きて、子供の世話をして寝ます.
フィルタはサーバの要求に対して、フィルタ制限を加える.対応例としては村長がいて、生殺の大権を握っていて、何事も私の関門を通らなければなりません^^;