一、过滤器

  1、过滤器的实现

    1)实现java.servlet.Fileter接口

      过滤器和监听器

    2)重写方法

       init():初始化,服务启动时加载,只加载一次

      doFilter():过滤处理方法

      destroy():销毁,服务关闭时销毁

  2、过滤器链执行顺序

    先配置先执行(请求时的执行顺序);响应时:以相反的顺序执行。

      过滤器和监听器

 

  3、filter过滤器

    1)在请求到达资源之前,拦截request请求

    2)在响应到达客户端之前,拦截response响应

    3)当访问资源时,如果设置了过滤器的路径,过滤器需要放行,否则请求无法到达资源

    4)过滤器链:

      顺序:请求的顺序是配置文件中的先后顺序,响应的顺序相反

      过滤器链中,第一个过滤器如果没有放行,则无法到达下一个过滤器,资源也无法访问

      原理:会拦截到请求的过滤器:第一个过滤器如果放行,会进入下一个过滤器,如果没有下一个过滤器,则进入指定资源

    5)chain.doFilter(request,response);方法之前处理请求相关信息,方法之后处理响应相关信息

  

  4、过滤器过滤Tomcat7和Tomcat8针对GET和POST请求乱码

    

package com.shsxt.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        //http
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response=(HttpServletResponse)resp;
        //请求post
        request.setCharacterEncoding("UTF-8");
        //响应
        response.setContentType("text/html;charset=utf-8");
        //得到请求方式get/post
        String method=request.getMethod();
        //判断是post还是get请求
        if ("GET".equals(method.toUpperCase())) {
            //获取服务器版本
            String serverInfo=request.getServletContext().getServerInfo();
            //判断服务器版本是Tomcat7还是Tomcat8
            String versionStr=serverInfo.substring(serverInfo.indexOf("/")+1, serverInfo.indexOf("/")+2);
            if (Integer.parseInt(versionStr)<8) {
                MyEncoding myEncoding=new MyEncoding(request);
                HttpServletRequest request2=(HttpServletRequest)myEncoding;
                chain.doFilter(request2, response);
                return;
            }
        }
        
        chain.doFilter(request, response);
        //判断
        
        
        
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }
    class MyEncoding extends HttpServletRequestWrapper{
        HttpServletRequest request;
        public MyEncoding(HttpServletRequest request) {
            super(request);
            // TODO Auto-generated constructor stub
            this.request=request;
        }
        String value="";
        @Override
        public String getParameter(String name) {
            try {
                value=new String(request.getParameter(name).getBytes("ISO-8859-1"),"utf-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return value;
        }
        
    }

}
EncodingFilter

相关文章:

  • 2017-12-05
  • 2021-08-12
  • 2018-07-29
  • 2021-12-23
  • 2021-12-07
  • 2021-11-01
  • 2019-07-31
  • 2021-12-23
猜你喜欢
  • 2021-07-23
  • 2020-11-13
  • 2021-04-06
  • 2021-05-17
  • 2021-12-23
  • 2021-04-18
  • 2021-08-23
相关资源
相似解决方案