一、过滤器
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; } } }