`
shuai1234
  • 浏览: 933296 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

解决跨应用服务器WEBLOGIC、TOMCAT编码问题

    博客分类:
  • java
 
阅读更多
一、  描述
项目编码一向做为系统设计级别难题,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);
    }
}

 

分享到:
评论

相关推荐

    Java乱码问题解决

    对于不同的问题,不同的JDK版本,不同的应用服务器(如Tomcat,Jboss,Weblogic),处理方法都会有一些微小的差异。在这里,主要针对Tomcat中JSP开发容易出现的中文乱码问题进行讨论,一般有以下几种情况:

    Module Framework Design 2008(模块化开发框架)

    集成了日志、联接池、性能优化、权限控制、数据展现,常规模块功能(增加、删除、修改、查询、导出、排序)实现,采用JAVA语言编写,可以应用于JBoss,WebLogic,Tomcat ,Resin,WebSphere等多种服务器。 并且在这些...

    超级有影响力霸气的Java面试题大全文档

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java....

    Linux 常用命令

    2. 查看linux系统汉字编码 3. 查CPU 4. 修改服务器字符集,支持中文 5. 查内存大小 6. 压缩命令 7. 查看操作系统 8. 查看端口是否被占用 9. 为服务器添加浮动ip 10. 启动ssh 11. 启动、关闭WebLogic 12. 启动、关闭...

    MCMS内容管理系统 v4.5.2.zip

    WEB服务器:Weblogic、Tomcat、WebSphere、JBoss 等 数据库服务器:Mysql等 操作系统:Windows、Linux、Unix 等 MCMS内容管理系统重要文件说明 数据库连接文件: config.properties 数据库文件:doc/db-mcms-...

    非常苛刻的java工作要求

    9. 熟悉Tomcat等应用服务器的使用,熟悉LINUX操作系统,熟悉TCP/IP、HTTP等网络协议,掌握多线程编程,编写过Socket程序。 10. 熟悉MyEclipse等开发平台和工具。 11. 5年以上JavaEE项目开发经验,熟悉J2EE体系、深入...

    java面试题

    77.1. 解决端口冲突导致tomcat无法启动的问题 87 77.2. 修改java虚拟机内存 88 77.3. 修改tomcat连接数 88 77.4. 禁止列出目录下的文件 88 77.5. 设置session失效的时间 89 77.6. 设置MIME响应类型 89 77.7. 设置...

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    java8源码-kcools-platform:kcools-平台

    WEB服务器:Weblogic、Tomcat、WebSphere、JBoss、Jetty 等 数据库服务器:Mysql5.8 操作系统:Windows、Linux、Unix 等 快速体验 将项目源码通过maven形式导入eclipse; 导入.sql数据文件,注意:数据库使用utf-8...

    java8源码-shopping-mall:毕设项目,拼购商场的设计与实现

    WEB服务器:Weblogic、Tomcat、WebSphere、JBoss、Jetty 等 数据库服务器:Mysql5.8 快速体验 将shopping-mall项目源码通过maven形式导入IDEA; 导入shop.sql数据文件,注意:数据库使用utf-8编码;

    Java面试宝典2010版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,...

    最新Java面试宝典pdf版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试笔试资料大全

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java基础题 很全面

    2. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 30 3. 请问输出什么,为什么? 30 4. 编程题: 写一个Singleton出来。 31 5. 设计4个线程,其中两个线程每次对j...

    JAVA面试宝典2010

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试宝典-经典

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java面试题大全(2012版)

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试宝典2012版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java面试宝典2012

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 98 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

Global site tag (gtag.js) - Google Analytics