HttpServletを使用して迅速に迎撃し、Configure
フィルタ
フィルタは、デザインパターン、いくつかの共通のコードをカプセル化するためにメイン・サーブレットです。フィルタに対応したweb.xml URLでどの構成。
フィルタの利点:
- フィルターは取り外し可能です。
- フィルタは、別のリソースに依存しません。
- 少ないメンテナンスは、保守が容易です。
サーブレットフィルタ方式
フィルタは次のいずれかの実装されているjavax.servlet.Filter
Javaクラスのインタフェース。javax.servlet.Filter
インターフェイスは、3つのメソッドを定義します-
番号 | 方法 | 説明 |
---|---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) |
それはリンク要求/応答ペアを介して送信されるたびに、クライアントは、鎖末端を要求しているため、コンテナはこのメソッドを呼び出します。 |
2 | public void init(FilterConfig filterConfig) |
この方法は、それが使用に入れられているフィルタに示すために、Webコンテナによって呼び出されます。 |
3 | public void destroy() |
この方法は、それがサービスを無効にされたフィルターに示すために、Webコンテナによって呼び出されます。 |
モニター
リスナーは、共通のJavaインタフェースを達成するための具体的なプログラムである、方法を監視するように設計されたこのプログラムは、別のJavaオブジェクトまたは属性が変更呼び出し、上記イベントリスナーオブジェクトで発生した場合、メソッドリスナーが直ちに実行されます。
リスナーコンポーネント
:リスナーの3つのコンポーネントが含まイベントソース、イベントオブジェクト、イベントリスナーを
事件は、アクションの一つのソースで発生したときに渡されたイベントオブジェクトのイベントリスナーメソッドを呼び出すとき、それはイベントリスナメソッドを呼び出し、そして。
私たちは、イベントソースの動作するように、イベントリスナーを介してイベントソースオブジェクトを取得するために取得することができます!
サーブレットリスナー
イベントが発生すると、この方法ではリスナーが呼び出されます。Tomcatなどのコンテナが起動すると、破壊され、セッションの作成、破壊されたとき。
サーブレットリスナーの役割:
- リスナーの役割を作成し、属性にその発生にWebアプリケーションだけでなく、変化を監視するために破壊することです。
- すなわち、WebアプリケーションServletContextオブジェクト(アプリケーションのJSP暗黙オブジェクト)
- Webアプリケーションを聞いて、だけでなく、セッションとリクエストのライフサイクルを聞いて、彼らは変更が発生する属性に加えて。
- 新しいJavaイベントリスナ属性、削除したServletContext、HttpSessionに、ServletRequestオブジェクトのために、それぞれ、3分割に変更します。
固有の設定
以下は、すべての設定ファイルのスクリーンショットです
フィルタとリスナーは、アスペクト指向プログラミングを考えています
そのため、あなたはすぐにプロジェクトに直接フィルタとリスナーを追加することができます。
EncodingFilter.java
package com.gxwz.filter;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(this.toString()+" 已初始化.....");
}
@Override
public void doFilter(ServletRequest arg1, ServletResponse arg2, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg1;
HttpServletResponse response = (HttpServletResponse) arg2;
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println(this.toString()+" 已销毁.....");
}
}
FirstFilter
package com.gxwz.filter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter (filterName="FirstFilter",value={"/*"})
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println(this.toString()+" 已初始化.....");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String ip = request.getRemoteAddr();
String url = request.getRequestURL().toString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String date = sdf.format(d);
System.out.printf("%s %s 访问了 %s%n", date, ip, url);
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println(this.toString()+" 已销毁.....");
}
}
ContextAttributeListener
package com.gxwz.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("context 增加属性 ");
System.out.println("context 属性是" + scae.getName());
System.out.println("context 的值是" + scae.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("context 移除属性 ");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("context 替换属性");
}
}
ContextListener.java
package com.gxwz.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ContextListener implements ServletContextListener {
//public class ContextListener extends ContextLoaderListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("web 应用销毁 ");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("web 应用初始化 ");
}
}
RequestAttributeListener.java
package com.gxwz.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class RequestAttributeListener implements ServletRequestAttributeListener{
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request 增加属性 ");
System.out.println("属性是" + srae.getName());
//System.out.println("值是" + srae.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request 移除属性 ");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request 替换属性 ");
}
}
RequestListener.java
package com.gxwz.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("销毁了一个Request ");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("创建了一个Request ");
}
}
SessionAttributeListener.java
package com.gxwz.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener
public class SessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
System.out.println("session 增加属性 ");
System.out.println("属性是" + event.getName());
System.out.println("值是" + event.getValue());
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
System.out.println("session 移除属性 ");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("session 替换属性 ");
}
}
SessionListener.java
package com.gxwz.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("监听到 session 创建, sessionid 是: " + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("监听到 session 销毁, sessionid 是: " + se.getSession().getId());
}
}
/**
* 如果是第一次访问,都会触发session创建,后续访问不会触发session的创建
* 关闭浏览器,再访问,也会触发session的创建。 但是有的浏览器,即便是关闭了,
* 下一次打开,也会发送以前sessionid到服务器,这样服务器就不会创建新的session。
* session的销毁不易观察到,一般说来服务器会设置session存活时间为30分钟。
* 所以需要等待才能观察到销毁
* 注: 在重启tomcat测试之前, 要删除D:\tomcat\work\Catalina\localhost\_\SESSIONS.ser 这个文件。
* 这个文件是tomcat存放以前的session的,为了观察到创建session的活动,
* 需要tomcat重启之前把以前的session都清除掉,才能观察到新创建session的活动
* @author com
*
*/