Filter(过滤器/拦截器)

Filter 可以分别在请求处理前和处理后执行相应的操作

生命周期:随着服务器的启动创建,随着服务器的关闭销毁
构造函数 –> init –> doFilter –> … –> destroy
chain.doFilter(request, response);
上边代码:拦截请求
下边代码:拦截响应
需要在 web.xml 进行配置

 <filter>
    <display-name>LoginFilterdisplay-name>
    <filter-name>LoginFilterfilter-name>
    <filter-class>com.filter.LoginFilterfilter-class>
  filter>
  <filter-mapping>
    <filter-name>LoginFilterfilter-name>
    <url-pattern>/second.jspurl-pattern>
  filter-mapping>

多个 filter 组成了过滤器链(filter chain),执行顺序由在 web.xml 中的配置顺序决定
拦截到请求后需要使用 chain.doFilter(request, response); 进行放行交给下一个对象进行处理
登录判断:
1. 登录后把账号存入 session
2. 进行登录判断就是判断 session 有无账号信息
有:登录过
无:没有登录过
如果对每个页面都写代码进行登录判断比较麻烦也不利于后期的维护和扩展,通常我们会使用过滤器简化这个操作
字符编码:
tomcat 8 之前 get 请求的参数都是采用 iso-8859-1 方式,之后都是 utf-8
如果编码和解码方式不一致,就会产生乱码
tomcat7:
编码:iso-8859-1
解码:utf-8
修改 tomcat 插件编码方式:

   <configuration>
                    <uriEncoding>utf-8uriEncoding>
   configuration>
无论是哪个版本的 tomcat post 请求参数在请求体中都是 iso-8859-1,我们需要在取中文参数之前设置请求体的编    `request.setCharacterEncoding("utf-8");`
通常会使用过滤器对所有的请求进行拦截,设置编码方式为 utf-8,就不用每次都写这行代码了。这个过滤器通常不需要我们自己写,tomcat 和 springmvc 都提供的有,我们只需要拿来配置,即可使用。
 <filter>
        <filter-name>setCharacterEncodingFilterfilter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>setCharacterEncodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

设置输入出的内容是 html,采用的编码格式是 utf-8

    response.setContentType("text/html; charset=UTF-8");
    response.getWriter().println("get = " + account);

你可能感兴趣的:(filter,函数,服务器,拦截器,过滤器)