`
shuai1234
  • 浏览: 985515 次
  • 性别: 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);
    }
}

 

分享到:
评论

相关推荐

    weblogic和tomcat 下载附件乱码问题

    在企业级应用服务器的环境中,WebLogic与Tomcat都是非常常见的中间件平台。用户在使用这些平台进行文件下载时可能会遇到附件名称出现乱码的情况,这不仅影响用户体验,也会影响到系统的正常运行。本文将详细探讨...

    Tomcat和weblogic中文乱码问题解决方案

    在 WebLogic 服务器中,解决中文乱码问题的方法与 Tomcat 服务器类似。只需要将上述过滤器注册到 WebLogic 服务器中即可。 中文乱码问题可以通过简单的解决方案来解决。只要将 request 和 response 的编码方式设置...

    项目框架从tomcat到weblogic

    7. 中文乱码问题:可以使用 UTF-8 编码格式来解决中文乱码问题。如果使用 GBK 编码格式,需要设置 weblogic.xml 中的编码格式。 8. weblogic.xml 文件:weblogic.xml 文件位于项目工程的 WEB-INF 目录下,与 web....

    Weblogic 8.1 + MyEclipse的配置及其Java Web应用的部署和测试.doc

    Weblogic 8.1 是一款由甲骨文公司(Oracle)开发的企业级Java应用程序服务器,主要用于构建、部署和管理复杂的Java ...对于新的项目,通常建议使用更新的Weblogic版本或其他现代的应用服务器,如Tomcat、Jetty或JBoss。

    weblogic&java精华

    在 Tomcat 中,有一个BUG,即在 UTF-8 编码的 JSP 文件中,可能会出现乱码问题。这个问题可以通过在 JSP 文件中添加 pageEncoding="UTF-8" 来解决。 3. 使用 FileUpload 组件上传文件 使用 FileUpload 组件可以轻松...

    tomcat-redis实现session共享

    在现代Web应用中,...这种方式不仅解决了跨服务器的Session同步问题,还提供了Session持久化的能力,即使Tomcat重启,用户的状态也能得以保留。同时,Redis的高性能和丰富的数据结构特性使得Session管理更加高效。

    一个智能框架的应用,eclipse+tomcat+oracle,应用struts+spring

    标题中的“一个智能框架的应用”指的是使用特定的技术栈来构建具有智能化功能的软件系统。这里提到了四个关键组件:Eclipse、Tomcat、Oracle...这样的架构设计旨在提供高效、稳定且易于维护的企业级智能应用解决方案。

    中间件tomcat5.5

    2. **不适合大型企业级应用**:对于需要高级管理特性和高可用性的大型企业应用,可能需要更全面的Java EE应用服务器,如JBoss或WebLogic。 综上所述,Tomcat5.5作为一款经典的Java Web服务器,它在教育和小型项目中...

    Tomcat和Weblogic部署纯html文件过程解析

    Weblogic是Oracle公司的一个应用服务器,用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库。 1. **HTML文件部署入门** 部署HTML文件的第一步是创建一个入口文件,通常是index.html,它是访问网站时...

    Tomcat热加载Jrebel

    Jrebel支持多种应用服务器,包括Tomcat、Jetty、WebLogic等,以及Spring、Hibernate、Struts等主流框架。 2. **Tomcat热加载原理**:传统的Java应用服务器在运行时,类加载到内存后,除非服务器重启,否则无法更改...

    WebLogic Web Development

    - **Tomcat关于UTF-8 JSP文件的BUG**:可能讨论了Tomcat对UTF-8编码JSP文件的处理问题及其解决方案。 - **使用FileUpload组件上传文件**:讲解了如何使用Commons FileUpload或其他库处理HTTP请求中的大文件上传。 ...

    springboot乱码问题解决方案

    在SpringBoot项目中,默认情况下,Tomcat服务器使用ISO-8859-1字符编码,而开发者通常使用UTF-8字符编码,导致乱码问题的出现。 二、解决方案 1. 配置文件中添加编码设置 在application.properties或application....

    java获取tomcat端口.doc

    如果服务器使用动态IP地址,可以使用动态域名服务(如No-IP、DynDNS等)来解决这个问题。 #### 三、JDK和Tomcat的安装配置 ##### 1. JDK的安装配置 - **安装**:下载JDK安装包,并将其安装到无中文的路径中。 - **...

    Tomcat最佳实践T.omcat最佳实践

    1. **WEB SERVER介绍**:讲解了Web服务器的不同类型,如Jetty、Tomcat、Jweb、JBoss AS、GlassFish、Weblogic和WebSphere。其中,Tomcat因其良好的集群和监控支持,以及对最新Servlet和JSP规范的支持而备受推崇。 2...

    jsp中文问题解决方案(完整版)

    【描述】:在Java应用程序开发中,处理中文乱码问题是一项常见的挑战,特别是在使用非Unicode编码如GB2312(包括GBK简体和Big5繁体)的环境中。正确展示中文和在数据库中存储中文是基础需求。本文将提供一个完整的...

    各中间件部署项目实施文档.docx

    中间件是一种软件,它提供了在操作系统和应用程序之间进行通信的功能,例如Web服务器、应用服务器(如Tomcat和Weblogic)、消息队列等。这里主要涉及到的是Tomcat和Weblogic的部署与配置。 描述中没有提供具体信息...

    day08-HTTP&Tomcat&Servlet.zip

    虽然功能相比其他商业应用服务器(如IBM WebSphere或Oracle WebLogic)可能较为有限,但对初学者和小型项目来说,Tomcat已经足够满足需求。 Servlet是Java编程语言中用来扩展服务器功能的接口。它允许程序员创建能...

    MyEclipse教程

    - 在符合JSR-045规范的应用服务器(如Tomcat 5.x)上进行JSP源代码级调试 - 停止应用服务器 #### 三、要求 - 使用MyEclipse支持的应用服务器需满足以下条件: - 应用服务器必须安装在MyEclipse运行机器的文件...

    《JAVA中间件技术及其应用开发》课件

    - 代表性的应用服务器:Tomcat、Jetty、WebLogic、WebSphere等。 3. **JSP编程范例** (第4章) - JSP(JavaServer Pages)简介:动态网页技术,将HTML与Java代码结合,实现服务器端的动态内容生成。 - JSP指令...

    【java编程课件】 JavaWEB编程.ppt

    Resin在解决Java编码问题和XML技术集成方面表现出色,其配置和使用相对Tomcat更简便,且可与多种IDE(如JBuilder、Eclipse)集成。 Servlet是Java Web服务器端编程的基础,它是一种Java类,用于扩展服务器的功能,...

Global site tag (gtag.js) - Google Analytics