设为首页 收藏本站
查看: 536|回复: 0

[经验分享] 跨应用服务器WEBLOGIC、TOMCAT编码问题(转)

[复制链接]

尚未签到

发表于 2017-2-4 13:19:14 | 显示全部楼层 |阅读模式

  • 一、  描述
  • 项目编码一向做为系统设计级别难题,servlet2.4还未实现跨应用服务器编码支持,个应用服务器之间编码存在很大差异,因此导致部署不同应用服务器上会出现不同乱码问题。为了实现开发环境(tomcat)和生产环境(weblogic9.2)编码统一,特此实现WEB.XML配置FILTER过滤编码,经过多次测试,基本实现跨应用服务器编码统一。
  • 二、  配置(工程编码:UTF-8
  • 1.  个人编码规范
  • 由于一些模块存在GET请求,在处理request.getParameter后出现乱码问题,一般个人实现方式为dwmc = new String(dwmc.getBytes("iso-8859-1"), "gb2312"); 此转码形式只适合一种应用服务器tomcat,为保证生产环境下weblogic能正常编码,需要:完全清理因个人书写而改变编码设置代码。并使用系统编码设置。
  • 2.  系统配置TOMCAT
  • POST:系统web.xml中使用filter进行过滤POST请求,并其自动对其编码转换为utf-8。实现代码为 
  • request.setCharacterEncoding(encod);
  • GET:filter过滤无法为TOMCAT进行GET编码转换,因此需要修改TOMCAT/CONF/ server.xml文件,在项目Connector标签下增加URIEncoding="GB2312"属性。
  • 3.  系统配置WEBLOGIC9.2
  • POST与GET统一处理方式,使用FILTER进行处理。判断request.getContentType()空的时候则为GET 请求,处理如下:
  • request.setCharacterEncoding(encod_wlc);
  • response.setContentType("application/x-www-form-urlencoded;charset="+ encod_wlc);
  • response.setCharacterEncoding(encod_wlc);
  • encod_wlc:为配置参数,此处:GB2312
  • POST请求则正常转换成utf-8即可,
  • request.setCharacterEncoding(encod);
  • 三、  web.xml配置
  •     <filter>
  •         <filter-name>encodingFilter</filter-name>
  •         <filter-class>com.vstsoft.csi.util.SetCharacterEncodingFilter</filter-class>
  •         <init-param>
  •             <param-name>encoding</param-name>
  •             <param-value>UTF-8</param-value>//默认POST编码规则
  •         </init-param>
  •         <init-param>
  •             <param-name>encoding_wlc</param-name>
  •             <param-value>GB2312</param-value>//默认WEBLOGIC下GET编码规则
  •         </init-param>
  •     </filter>
  •     <filter-mapping>
  •         <filter-name>encodingFilter</filter-name>
  •         <url-pattern>*.do</url-pattern>
  •     </filter-mapping>
  •     <filter-mapping>
  •         <filter-name>encodingFilter</filter-name>
  •         <url-pattern>*.jsp</url-pattern>
  • </filter-mapping> 
  • 四、  JAVA文件
  • package com.vstsoft.csi.util;
  • 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 SetCharacterEncodingFilter implements Filter {
  •     protected String encoding = null;
  •     protected String encoding_wlc = null;
  •     protected FilterConfig filterConfig = null;
  •     protected boolean ignore = true;
  •     public void destroy() {
  •         this.encoding = null;
  •         this.encoding_wlc=null;
  •         this.filterConfig = null;
  •     }
  •     public void doFilter(ServletRequest request, ServletResponse response,
  •             FilterChain chain) throws IOException, ServletException {
  •         if (ignore || (request.getCharacterEncoding() == null)) {
  •             String encod = selectEncoding(request);
  •             String encod_wlc = selectEncoding_wlc(request);
  •             if (request.getContentType() == null) {
  •                 request.setCharacterEncoding(encod_wlc);
  •                 response.setContentType("application/x-www-form-urlencoded; charset="+ encod_wlc);
  •                 response.setCharacterEncoding(encod_wlc);
  •             } else {
  •                 request.setCharacterEncoding(encod);
  •             }
  •             encod=null;
  •             encod_wlc=null;
  •         }
  •         chain.doFilter(request, response);
  •     }
  •     public void init(FilterConfig filterConfig) throws ServletException {
  •         this.filterConfig = filterConfig;
  •         this.encoding = filterConfig.getInitParameter("encoding");
  •         this.encoding_wlc = filterConfig.getInitParameter("encoding_wlc");
  •         String value = filterConfig.getInitParameter("ignore");
  •         System.out.println("======>编码过滤初始化, 默认POST请求编码: "+this.encoding+", WBL下GET请求编码: "+this.encoding_wlc+"<=====");
  •         if (value == null)
  •             this.ignore = true;
  •         else if (value.equalsIgnoreCase("true"))
  •             this.ignore = true;
  •         else if (value.equalsIgnoreCase("yes"))
  •             this.ignore = true;
  •         else
  •             this.ignore = false;
  •     }
  •     protected String selectEncoding(ServletRequest request) {
  •         return (this.encoding);
  •     }
  •     
  •     protected String selectEncoding_wlc(ServletRequest request) {
  •         return (this.encoding_wlc);
  •     }
  • }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-337474-1-1.html 上篇帖子: tomcat同时使用http和https访问的配置方法 下篇帖子: Tomcat配置windows服务启动全攻略
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表