跨应用服务器WEBLOGIC、TOMCAT编码问题(转)

  1. 一、  描述
  2. 项目编码一向做为系统设计级别难题,servlet2.4还未实现跨应用服务器编码支持,个应用服务器之间编码存在很大差异,因此导致部署不同应用服务器上会出现不同乱码问题。为了实现开发环境(tomcat)和生产环境(weblogic9.2)编码统一,特此实现WEB.XML配置FILTER过滤编码,经过多次测试,基本实现跨应用服务器编码统一。
  3. 二、  配置(工程编码:UTF-8
  4. 1.  个人编码规范
  5. 由于一些模块存在GET请求,在处理request.getParameter后出现乱码问题,一般个人实现方式为dwmc = new String(dwmc.getBytes("iso-8859-1"), "gb2312"); 此转码形式只适合一种应用服务器tomcat,为保证生产环境下weblogic能正常编码,需要:完全清理因个人书写而改变编码设置代码。并使用系统编码设置。
  6. 2.  系统配置TOMCAT
  7. POST:系统web.xml中使用filter进行过滤POST请求,并其自动对其编码转换为utf-8。实现代码为 
  8. request.setCharacterEncoding(encod);
  9. GET:filter过滤无法为TOMCAT进行GET编码转换,因此需要修改TOMCAT/CONF/ server.xml文件,在项目Connector标签下增加URIEncoding="GB2312"属性。
  10. 3.  系统配置WEBLOGIC9.2
  11. POST与GET统一处理方式,使用FILTER进行处理。判断request.getContentType()空的时候则为GET 请求,处理如下:
  12. request.setCharacterEncoding(encod_wlc);
  13. response.setContentType("application/x-www-form-urlencoded;charset="+ encod_wlc);
  14. response.setCharacterEncoding(encod_wlc);
  15. encod_wlc:为配置参数,此处:GB2312
  16. POST请求则正常转换成utf-8即可,
  17. request.setCharacterEncoding(encod);
  18. 三、  web.xml配置
  19.     <filter>
  20.         <filter-name>encodingFilter</filter-name>
  21.         <filter-class>com.vstsoft.csi.util.SetCharacterEncodingFilter</filter-class>
  22.         <init-param>
  23.             <param-name>encoding</param-name>
  24.             <param-value>UTF-8</param-value>//默认POST编码规则
  25.         </init-param>
  26.         <init-param>
  27.             <param-name>encoding_wlc</param-name>
  28.             <param-value>GB2312</param-value>//默认WEBLOGIC下GET编码规则
  29.         </init-param>
  30.     </filter>
  31.     <filter-mapping>
  32.         <filter-name>encodingFilter</filter-name>
  33.         <url-pattern>*.do</url-pattern>
  34.     </filter-mapping>
  35.     <filter-mapping>
  36.         <filter-name>encodingFilter</filter-name>
  37.         <url-pattern>*.jsp</url-pattern>
  38. </filter-mapping> 
  39. 四、  JAVA文件
  40. package com.vstsoft.csi.util;
  41. import java.io.IOException;
  42. import javax.servlet.Filter;
  43. import javax.servlet.FilterChain;
  44. import javax.servlet.FilterConfig;
  45. import javax.servlet.ServletException;
  46. import javax.servlet.ServletRequest;
  47. import javax.servlet.ServletResponse;
  48. public class SetCharacterEncodingFilter implements Filter {
  49.     protected String encoding = null;
  50.     protected String encoding_wlc = null;
  51.     protected FilterConfig filterConfig = null;
  52.     protected boolean ignore = true;
  53.     public void destroy() {
  54.         this.encoding = null;
  55.         this.encoding_wlc=null;
  56.         this.filterConfig = null;
  57.     }
  58.     public void doFilter(ServletRequest request, ServletResponse response,
  59.             FilterChain chain) throws IOException, ServletException {
  60.         if (ignore || (request.getCharacterEncoding() == null)) {
  61.             String encod = selectEncoding(request);
  62.             String encod_wlc = selectEncoding_wlc(request);
  63.             if (request.getContentType() == null) {
  64.                 request.setCharacterEncoding(encod_wlc);
  65.                 response.setContentType("application/x-www-form-urlencoded; charset="+ encod_wlc);
  66.                 response.setCharacterEncoding(encod_wlc);
  67.             } else {
  68.                 request.setCharacterEncoding(encod);
  69.             }
  70.             encod=null;
  71.             encod_wlc=null;
  72.         }
  73.         chain.doFilter(request, response);
  74.     }
  75.     public void init(FilterConfig filterConfig) throws ServletException {
  76.         this.filterConfig = filterConfig;
  77.         this.encoding = filterConfig.getInitParameter("encoding");
  78.         this.encoding_wlc = filterConfig.getInitParameter("encoding_wlc");
  79.         String value = filterConfig.getInitParameter("ignore");
  80.         System.out.println("======>编码过滤初始化, 默认POST请求编码: "+this.encoding+", WBL下GET请求编码: "+this.encoding_wlc+"<=====");
  81.         if (value == null)
  82.             this.ignore = true;
  83.         else if (value.equalsIgnoreCase("true"))
  84.             this.ignore = true;
  85.         else if (value.equalsIgnoreCase("yes"))
  86.             this.ignore = true;
  87.         else
  88.             this.ignore = false;
  89.     }
  90.     protected String selectEncoding(ServletRequest request) {
  91.         return (this.encoding);
  92.     }
  93.     
  94.     protected String selectEncoding_wlc(ServletRequest request) {
  95.         return (this.encoding_wlc);
  96.     }
  97. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值