【AOP系列】(五)—Filter

来源:互联网 发布:tl wr886n主人网络 编辑:程序博客网 时间:2024/06/07 09:23

思想

  面向切面编程

定义

  一种横切性的Web技术。是对Request和Response请求进行拦截。只对Post请求起作用。

J2EE中的应用

【1】生命周期

  Tomcat一启动,就实例化Filter。Tomcat负责new出Filter,在New的时候调用Init方法,Init方法的参数public void init(FilterConfig arg0),会读取配置文件中的内容。

【2】实现Filter需要2步:

  1. 实现Javax.servlet.filter接口
  2. 在web.xml文件中进行配置

【3】代码

CharsetEncodingFilter.java:主要完成拦截用户请求设置编码字符集。

package com.tgb.drp.util.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;/** * 采用Filter统一处理字符集 * @author xuchenyang * */public class CharsetEncodingFilter implements Filter {    private String encoding;//定义编码方式    /**     * 用于Filter销毁前,完成某些资源的回收     */    @Override    public void destroy() {     }    /**     *实现过滤功能,该方法就是对每个请求和响应增加的额外处理      */    @Override    public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        System.out.println("begin");        //对用户请求进行预处理:设置字符集        request.setCharacterEncoding(encoding);        //下面这行代码:决定是否将请求交给Servlet继续执行        chain.doFilter(request,response);        //服务器响应之后的处理        System.out.println("end");    }    /**     * 用于完成Filter的初始化     */    @Override    public void init(FilterConfig filterConfig) throws ServletException {        System.out.println("init");        //从配置文件中读取编码方式        this.encoding=filterConfig.getInitParameter("encoding");        System.out.println(encoding);    }}

Web.xml

<web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>   <!--设置Filter的名字和对应的类  -->  <filter>    <filter-name>CharsetEncodingFilter</filter-name>    <filter-class>com.tgb.drp.util.filter.CharsetEncodingFilter</filter-class>    <!--给Filter设置参数  -->    <init-param>        <param-name>encoding</param-name>        <param-value>GB18030</param-value>    </init-param>  </filter>  <!--设置匹配方式:即Filter的作用范围  -->  <filter-mapping>        <filter-name>CharsetEncodingFilter</filter-name>        <url-pattern>*.jsp</url-pattern>  </filter-mapping> </web-app>

Filter和Servlet

  二者的生命周期以及doFilter和Servlet的Service方法都很相像,不同的是Filter中通过chain.doFilter来决定是否放行用户请求。

作用和应用

  • 用户授权
  • 记录日志
  • 请求编码解码
      这里写图片描述
0 0
原创粉丝点击