zoukankan      html  css  js  c++  java
  • 利用过滤器进行中文转码(转)

    转自:http://caleb-520.iteye.com/blog/396037

    利用过滤器进行中文转码

    博客分类:
    Servlet过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件中进行配置:首先是过滤器的Web应用定义包含在<filter>…</filer>元素中,其次是Web应用的过滤器映射配置文件<filter-mapping>…</filter-mapping> 

    过滤器的应用很广泛,在这里介绍利用过滤器进行中文转码。一般在JavaWeb应用中,当利用request.getParameter(String str)方法获取从表单或是页面传过来的中文参数都会是一个乱码。通常会采用如下的转码方式在Servlet或是JSP中进行转码设置: 
    (1)request.setCharacterEncoding("gb2312"); 
    (2)String username = request.getParameter("username"); 
    username = new String(username.getBytes("ISO-8859-1"), "GB2312"); 

    假设:一个表单有多数据传到Servlet或是JSP,那么就可能在这些Servlet或是JSP中写下多个request.setCharacterEncoding("gb2312")或是多个类似于String username = request.getParameter("username"); 
    username = new String(username.getBytes("ISO-8859-1"), "GB2312");这样子肯定加大代码工作量。 

    针对上面的一些常见的问题,下面利用过滤器进行中文转码就可以迎刃而解。配置Filter的步骤如下: 

    (1)现在web.xml文件中配置如下信息 
    Xml代码  收藏代码
    1. <filter>  
    2.     <filter-name>CharactsetConversion</filter-name>  
    3.     <filter-class>com.gxa.edu.servlet.CharactsetConversion</filter-class>  
    4.           
    5.     <init-param>  
    6.         <param-name>flag</param-name>  
    7.         <param-value>true</param-value>  
    8.     </init-param>  
    9.           
    10.     <init-param>  
    11.         <param-name>charcode</param-name>  
    12.         <param-value>gb2312</param-value>  
    13.     </init-param>  
    14.           
    15. </filter>  
    16.       
    17. <filter-mapping>  
    18.       <!-- 配置需要过滤的URL,这里主要是对所有的文件进行过滤 -->  
    19.     <filter-name>CharactsetConversion</filter-name>  
    20.     <url-pattern>/*</url-pattern>  
    21. </filter-mapping>  


    当配置好web.xml文件后,就创建一个过滤器类,名称CharactsetConversion,该类必须实现Filter接口,同时Filter接口提供了3个方法 
    (1)void doFilter(ServletRequest req,ServletResponse res,FilterChain filterChain) 
    (2)void init(FilterConfig filterConfig) 
    (3)void destroy() 

    (2)创建一个CharactsetConversion.java文件,该文件了实现Filter接口 
    Java代码  收藏代码
    1. package com.gxa.edu.servlet;  
    2.   
    3. import javax.servlet.Filter;  
    4. import javax.servlet.FilterChain;  
    5. import javax.servlet.FilterConfig;  
    6. import javax.servlet.ServletRequest;  
    7. import javax.servlet.ServletResponse;  
    8.   
    9. public class CharactsetConversion implements Filter{  
    10.     private FilterConfig filterConfig = null;  
    11.     private boolean flag = true;  
    12.     private String charcode = "gb2312";  
    13.   
    14.     public void init(FilterConfig filterConfig) {  
    15.         this.filterConfig = filterConfig;  
    16.         String temp = this.filterConfig.getInitParameter("flag");  
    17.         String str = this.filterConfig.getInitParameter("charcode");  
    18.         if(temp != null){  
    19.             if(temp.equals("true")){  
    20.                 this.flag = true;  
    21.             }else if(temp.equals("false")){  
    22.                 this.flag = false;  
    23.             }else{  
    24.                 this.flag = true;  
    25.             }  
    26.         }  
    27.         if(str != null){  
    28.             this.charcode = str;  
    29.         }  
    30.     }  
    31.     public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) {  
    32.         try {  
    33.             if (flag) {  
    34.                 String c = request.getCharacterEncoding();  
    35.                 if (c == null) {  
    36.                     request.setCharacterEncoding(charcode);  
    37.                 } else if (!c.equals(this.charcode)) {  
    38.                     request.setCharacterEncoding(charcode);  
    39.                 }  
    40.             }  
    41.             filterChain.doFilter(request, response);  
    42.         } catch (Exception e) {  
    43.             e.printStackTrace();  
    44.         }  
    45.     }  
    46.     public void destroy() {  
    47.         this.filterConfig = null;  
    48.     }  
    49. }  

  • 相关阅读:
    搭建GitLab+Jenkins持续集成环境图文教程
    Linux学习教程,Linux入门教程(超详细)
    Python基础教程,Python入门教程(非常详细)
    我的Dojo中有一个Mojo(如何编写Maven插件)
    Nginx与安全有关的几个配置
    Tomcat安全设置
    MFC 重绘CButton 支持透明背景的png
    Qt中 QTreeView、QTableView单元项进行重命名
    C++将int与size_t进行比较的陷阱
    C++ using的用法
  • 原文地址:https://www.cnblogs.com/name-hanlin/p/5017690.html
Copyright © 2011-2022 走看看