Web中的监听器 过滤器 拦截器

  1.过滤器:顾名思义就是过滤请求内容的,所谓的过滤就是我们可以获得request对象中的值进行一系列的判断或者其他的操作。我们可以使其字符集编码格式改变等。具体的示例代码看下面的例子。
public class MyFilter implements javax.servlet.Filter {
 2     /**
 3      * 初始化
 4      */
 5     @Override
 6     public void init(FilterConfig arg0) throws ServletException {
 7     }
 8     /**
 9      * 销毁
10      */
11     @Override
12     public void destroy() {
13     }
14     /**
15      * 过滤
16      */
17     @Override
18     public void doFilter(ServletRequest arg0, ServletResponse arg1,
19             FilterChain arg2) throws IOException, ServletException {
20         arg0.setCharacterEncoding("utf-8"); //设置request对象的字符集格式
21         arg2.doFilter(arg0, arg1); //继续执行  请求
22     }
23 }

这个是Filter实体的代码,在web.xml文件中我们需要对其需要拦截的请求配置监听范围,或者说过滤哪些url。

 <filter>
2         <filter-name>myfilter</filter-name>
3         <filter-class>com.mine.test.MyFilter</filter-class>
4     </filter>
5     <filter-mapping>
6         <filter-name>myfilter</filter-name>
7         <url-pattern>/*</url-pattern> <!--配置过滤的范围   后缀符合即过滤  此处为全部过滤-->
8     </filter-mapping>

 2. 拦截器  我们使用struts预定义过的拦截器时只需要做相应的配置即可,大多数常用的都会在default中有定义,而在struts.xml中不写就默认使用这个default。当我们自己创建了一个Intercepter对象时我们需要对其进行配置,具体配置的方法这里就不赘述了,戳此处 <a>http://www.blogjava.net/brock/archive/2009/08/20/291919.html</a>  。拦截器中有三个基本的方法对应其生命周期。

a.初始化  b.执行拦截  c.销毁。针对action请求进行处理,脱离了servlet API,不处理一般的url请求。

 3. Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要是在服务器启动时加载
主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

package com.lzw.filter.demo;

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

public class InitDataListener implements ServletContextListener {
    
	private static ServletContext servletContext;
	
	public static ServletContext getServletContext() {
		return servletContext;
	}

	@Override
	public void contextInitialized(ServletContextEvent contextEvent) {
		servletContext = contextEvent.getServletContext();
		//final ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
		System.out.println("服务器启动完毕!");
		System.out.println(servletContext);
	}
	
	@Override
	public void contextDestroyed(ServletContextEvent sce) {}

}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
   <listener>
   		<listener-class>com.lzw.filter.demo.InitDataListener</listener-class>
   </listener>
</web-app>

控制台结果:

信息: Starting service Catalina
2013-10-31 15:13:55 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.42
服务器启动完毕!
org.apache.catalina.core.ApplicationContextFacade@7966340c
2013-10-31 15:13:56 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-8080"]
2013-10-31 15:13:56 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
2013-10-31 15:13:56 org.apache.catalina.startup.Catalina start
信息: Server startup in 402 ms



你可能感兴趣的:(Web中的监听器 过滤器 拦截器)