java过滤器应用

来源:互联网 发布:mysql中的触发器 编辑:程序博客网 时间:2024/06/03 17:40

原文地址:http://wenku.baidu.com/view/b6f45f65f5335a8102d220db.html

1Servletf过虑器基础:

Servlet过滤器是Servlet的一种特殊用法,主要用来完成一些通用的操作。比如编码的过滤,

判断用户的登陆状态等等。Servlet过虑的适用场合:

A.     认证过滤

B.      登录和审核过滤

C.      图像转换过滤

D.     数据压缩过滤

E.      加密过滤

F.      令牌过滤

G.     资源访问触发事件过滤

Servlet过滤器接口的构成:

所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:

方法说明

init(FilterConfig cfg)这是Servlet过滤器的初始化方法,性质等同与servletinit方法。

doFilter(ServletRequest,ServletResponse,FilterChain)完成实际的过滤操作,当请求访问过滤器

关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器

Destroy()Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器

占用的资源。性质等同与servletdestory()方法。

Servlet过滤器创建步骤:

A.     实现javax.servlet.Filter接口的servlet

B.      实现init方法,读取过滤器的初始化函数。

C.      实现doFilter方法。完成对请求或过滤的响应

D.     调用FilterChain接口对像的doFilter方法,向后续的过滤器传递请求或响应

E.      web.xml中配置Filter

2.使用过滤器处理中文问题

3.使用过滤器认证用户:

每个过滤器也可以配置初始化参数,可以将不需要过滤的地址配置到这个Filter的配置参数中,过滤时,如果请求地址在配置参数中,则放行,这样避免了在程序中硬编码。每个Filter中初始化时,都可以得到配置对象,在Filter中配置二个不需要过滤的地址,一个是登陆页面,一个是执行登陆认证的Servlet

示例:

Public class EncodingFilter implements Filter{

  Private static String encoding;

  Public void destroy(){

    System.out.println(“过滤器被销毁!!!!!”);//WEB应用被卸载时,过滤器即被销毁。

}

Public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{

  System.out.println(“step1^^^^^^^^^^^^^);

  request.setCharacterEncoding(encoding);

  chain.doFilter(request,response);

  System.out.println(“step2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^”);

}

Public void init(FilterConfig config)throws ServletException{

  System.out.println(“过滤器被加载!!!!!”);//WEB应用被加载时,过滤器即被加载

  encoding= config.getInitParameter(“encoding”);

}

}

2.过滤器的配置:在web.xml

 <filter>

       <filter-name>encodingFilter</filter-name>

       <filter-class>com.test.EncodingFilter</filter-class>

       <init-param>

             <param-name>encoding</param-name>

             <param-name>gbk</param-name>

</init-param>

</filter>

<filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

 

原创粉丝点击