• JAVA中的使用Filter过滤器设置字符集


    Filter是什么?

            Filter不是一个Servlet,它可以叫做Servlet链,它可以用来改变一个request,修改一个response。它虽然不能产生一个response,但可以在一个request到大Servlet之前预处理request,也可以在response离开Servlet时处理response。

    具体的调用关系如下图所示。


           也可以说,Filter是对Request和Response请求进行了拦截。



    注意:

          只对post请求有效。


    新建一个TestFilter类,继承Filter类后,我们可以看到主要的几个方法。

    package com.bjpowermode.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;
    
    public class TestFilter implements Filter {
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void init(FilterConfig filterConfig) throws ServletException {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    


    1)init()

    用来设置filter的配置对象,只调用一次。

    2)doFilter()

    是最重要最核心的方法,执行Filter的工作。每一个filter从doFilter()方法中得到当前的request及response

    3)destory()

    返回配置对象。

    Filter的生命周期

          在应用启动的时候就进行装载Filter类。容器创建好Filter对象实例后,调用init()方法。接着保存进集合容器中去了等待着,用户访问资源。当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。

    注意:init方法与destroy方法只会直接一次。


    在实例中,我们用Filter主要是来设置字符集,防止jsp出现中文乱码现象。

    如果不使用Filter,我们需要在每个jsp页面中添加如下语句:

    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>

    那么,使用Filter之后呢?

    package com.bjpowermode.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统一处理字符集
     */
    public class CharSetEncodingFilter implements Filter {
    
    	private String encoding;
    
    	@Override
    	public void doFilter(ServletRequest arg0, ServletResponse arg1,
    			FilterChain chain) throws IOException, ServletException {
    		
    		//System.out.println("CharsetEncoding--->>>begin");
    		//设置字符集
    		arg0.setCharacterEncoding("GB18030");
    		
    		//继续执行
    		//如果还有filter,继续调,如果没有,就调jsp
    		chain.doFilter(arg0,arg1);
    		//System.out.println("CharsetEncoding--->>>end");
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		
    		//System.out.println("CharsetEncoding--->>>init");
    		this.encoding=arg0.getInitParameter("encoding");
    		//System.out.println("CharsetEncoding--->>>init"+encoding);
    	}
    
    }
    

    在配置文件中进行配置。

    注意:

    CharSetEncodingFilter方法名和与配置文件中要一致,

    类的路径com.bjpowermode.drp.util.filter.CharSetEncodingFilter。


     <filter>
      	<filter-name>CharSetEncodingFilter</filter-name>
      	<filter-class>com.bjpowermode.drp.util.filter.CharSetEncodingFilter</filter-class>
      	<init-param>
      		<param-name>encoding</param-name>
      		<param-value>GBK</param-value>
      	</init-param>
      </filter>
      <!--对什么模式起作用  -->
      <filter-mapping>
      	<filter-name>CharSetEncodingFilter</filter-name>
      	<!--可加目录  -->
      	<url-pattern>*.jsp</url-pattern>
      </filter-mapping>

    总结:

            Filter提高了代码的灵活性,将变动移到了配置文件中而不是在页面上。

            Filter除了可以设置字符集,解决乱码问题外,还可以用在验证用户权限,对网站进行压缩等方面。


  • 相关阅读:
    Web Api:基于RESTful标准
    C#:导入Excel通用类(Xls格式)
    C#:导入Excel通用类(Xlsx格式)
    Selenium---Python3---下拉框选择处理
    Selenium---Python3---弹框处理
    Selenium---设置等待时间
    Selenium---Python3--获取网页url/获取网页title
    Selenium---键盘事件---Python3
    Selenium---鼠标事件---Python3
    Selenium---Python3---常见方法
  • 原文地址:https://www.cnblogs.com/saixing/p/6730274.html
Copyright © 2020-2023  润新知