采用Filter统一控制字符集

        Filter 技术是servlet 2.3 新增加的功能。在Java Web的开发中中,在客户端与tomcat交互中,tomcat服务器端request.getParameter()取得的参数默认的是iso8859-1的编码格式。

       在界面的编码设置中,在tomcat中获得的也是乱码。所以Tomcat在每次获取参数时都应该进行编码转换。具体的两个方法为request.setCharacterEncoding和response.setCharacterEncoding()。这两个方法会使得获得的参数和返回的结果的编码一致。这样就可以控制编码问题了。

       但是这样做的一个缺点就是重复量太大,如果有大量的JSP和Servlet,就会产生大量的重复代码。而且不好控制,产生不一致等问题。

       Filter的出现解决了这个问题,它使用户可以改变一个request和修改一个response。Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response。Filter只对post请求起作用。

 

       下面看一下Filter使用的具体方法:

       首先:Filter是在Tomcat启动的时候New的,而且只New一次,不会重复。当请求相关的JSP时,就会自动调用Filter。

       实现Filter,首先新建一个类,然后实现Filter接口。它有三个方法,init(),doFilter(),destory()。

    public void init(FilterConfig filterConfig) throws ServletException {
       this.endcoding = filterConfig.getInitParameter("encoding");
    }

使用Filter为了达到灵活效果,还是使用XML配置文件,而不是写死在代码里。所以要配置XML文件。

       在XML中的配置信息为:

    <filter>
       <filter-name>CharsetEncodingFilter</filter-name>
       <filter-class>com.bjpowernode.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-mapping>
       <filter-name>CharsetEncodingFilter</filter-name>
       <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

       通过init()方法中的filterConfig对象可以取得xml中的配置信息。其中的路径类型按照上面的格式,如果已经写成<url-pattern>*.jsp</url-pattern>格式,在配置下面的时候就不能写成<url-pattern>/servlet/*.jsp</url-pattern>,会和上面的配置产生冲突。


    在doFilter()方法中:

     

     public void doFilter(ServletRequest request, ServletResponseresponse,
           FilterChain chain) throws IOException, ServletException{
      
       //System.out.println("CharsetEncodingFilter--->>>begin");
       //设置字符集
       request.setCharacterEncoding(endcoding);
      
       //继续执行
       chain.doFilter(request, response);
      
       //System.out.println("CharsetEncodingFilter--->>>end");
    }

    可以设置具体的编码,chain.doFilter(request,response);的作用就是继续调用下面的JSP。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值