web17_filter

web filter

概述

  • 过滤器是运行在服务器端的程序,在与之相关的Servlet或JSP之前运行,实现对请求资源的过滤功能。
  • 生命周期
    服务器启动的时候,就会创建过滤器的对象。服务器关闭,就会销毁过滤器对象。

实现

  • 实现接口(javax.servlet.Filter)
    • init:服务器启动的时候执行
    • doFilter:访问资源被拦截时执行
    • destroy:服务器关闭时执行
  • 配置web.xml
    <filter>
    	<filter-name>GenericEncodingFilter</filter-name>
    	<filter-class>cn.ade.filter.GenericEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
    	<filter-name>GenericEncodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    

应用

  • post方式:请求编码处理
  • get方式:利用装饰者模式,对request对象进行包装
/**
 * 通用编码过滤器
 */
public class GenericEncodingFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		// 装饰者模式
		MyHttpServletRequestWrapper myReq = new MyHttpServletRequestWrapper(req);
		response.setContentType("text/html;charset=utf-8");
		chain.doFilter(myReq, response);
	}

	@Override
	public void destroy() {} 		

}

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
	
	private HttpServletRequest request;

	public MyHttpServletRequestWrapper(HttpServletRequest request) {
		super(request);
		this.request = request;
	}

	@Override
	public String getParameter(String name) {
		String method = request.getMethod();
		if ("get".equalsIgnoreCase(method)) {
			try {
				return new String(request.getParameter(name).getBytes("iso-8859-1"),"utf-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		} else if ("post".equalsIgnoreCase(method)) {
			try {
				request.setCharacterEncoding("utf-8");
				return request.getParameter(name);
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return request.getParameter(name);
	}
	
}
发布了48 篇原创文章 · 获赞 1 · 访问量 1062

猜你喜欢

转载自blog.csdn.net/laonxs/article/details/104468582