`
dennisbing
  • 浏览: 160822 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts1 处理中文乱码问题总结<Filter>

阅读更多
㈠页面显示中文乱码

      对于在页面中显示出现乱码,这个问题比较简单,便是检查你的JSP文件里是不是出现了中文要处理,因为JSP默认的编码格式为“ISO-8859-1”,当JSP中出现要处理的中文时,其显示就出现乱码了,这种情况一般出现在手写JSP,或修改时。因为在myeclipse6.0中,如果出现了编码错误时,程序不会让你保存,而是会提示你注意编码,这点很好。具体的修改办法是把


Html代码
<%.@ page language="java" import="java.util." pageEncoding="ISO-8859-1">  
<%.@ page language="java" import="java.util." pageEncoding="ISO-8859-1">

改成:

Html代码
<%.@ page language="java" import="java.util." pageEncoding="UTF-8">   
<%.@ page language="java" import="java.util." pageEncoding="UTF-8">




㈡传递参数中文乱码

         传递参数出现的乱码,参数的内容为中文。比如在struts应用中,简单的一个登录界面中,需要传递的登录名为中文时,你没经处理之前,是会出现乱码传递的,为了让我们能看到显示的乱码,我们在对应的Action类的子类里,修改一下,用System.out把接受到的参数输出,代码如下:


public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,    
        HttpServletResponse response) ...{    
    DynaActionForm loginForm = (DynaActionForm) form;    
   
    String username = (String) loginForm.get("username");    
    String password = (String) loginForm.get("password");    
    System.out.println("username:"+username);    
    System.out.println("password:"+password);    
    if (username.equals("ivorytower") && password.equals("123456")) ...{    
        return mapping.findForward("success");    
    }    
    return mapping.findForward("fail");    
    }   
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) ...{         DynaActionForm loginForm = (DynaActionForm) form; 
   String username = (String) loginForm.get("username"); 
 String password = (String) loginForm.get("password");                System.out.println("username:"+username); 
   System.out.println("password:"+password); 
if (username.equals("ivorytower") && password.equals("123456")) ...{ 
   return mapping.findForward("success"); 
} 
  return mapping.findForward("fail"); 
}

那么当你提交了中文输入后就会出现乱码了。

具体的解决方法:

①修改Tomcat---->conf----->server.xml文件,在修改端口的标签后面加一行代码,如下:

Xml代码
<Connector port="8080" protocol="HTTP/1.1"     
              connectionTimeout="20000"     
              redirectPort="8443"  URIEncoding="UTF-8"/>   
 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

②编写过滤器Filter
     
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 CharacterEncodingFilter implements Filter{    
   
    
    public void destroy(){    
    }    
   
    
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException   {    
    request.setCharacterEncoding("utf-8");    
    chain.doFilter(request, response);    
    }    
   
     
    public void init(FilterConfig arg0) throws ServletException {    
    }    
   
}   
 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 CharacterEncodingFilter implements Filter ...{ 
@Override 
public void destroy() ...{ } 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException { 
   request.setCharacterEncoding("utf-8"); chain.doFilter(request, response); 
} 
@Override 
public void init(FilterConfig arg0) throws ServletException ...{ } }


  利用过滤器,把requst传递的中文参数都设成“UTF-8”编码。

③修改web.xml文件

    打开项目里的web.xml文件,在前面加上如下代码:

<filter>   
<filter-name>characterEncoding</filter-name>   
<filter-class>com.v512.example.CharacterEncodingFilter</filter-class>   
</filter>   
<filter-mapping>   
<filter-name>characterEncoding</filter-name>   
<url-pattern>/*</url-pattern>   
</filter-mapping>   
 <filter> <filter-name>characterEncoding</filter-name> <filter-class>com.v512.example.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

注意其过滤的URL为“/*”,表示当前的request请求。为了使设置生效,重起tomcat。

㈢国际化资源文件乱码

     ①利用JDK的native2ascii工具进行编码转换

国际化问题,主要是为了处理文件在浏览器上的显示问题,还是以登录界面来说,比如在中文浏览器上,我们要看到中文显示,对应在英文浏览器上要显示英文。那么我们在登录那个界面处理上,就不能直接写上我们的“用户名”“密码”等标识了。就要用标记转换输出了,修改为:

Html代码
      

<bean:message key="example.login.username"/> 

<bean:message key="example.login.username"/>

  再者,打开项目下的资源配置文件ApplicationResources.properties,依据上面所写key值,设定成我们要的默认值(显示英文),比如

引用
    
#Resource for Parameter 'com.v512.example.struts.ApplicationResources
#Project webexample2
example.login.username=username
example.login.password=password

现在我们动手新建一个资源文件,让其能显示中文,直接Ctrl+C,Ctrl+V。改名为ApplicationResources_zh.properties,代码如下:

#Resource for Parameter 'com.v512.example.struts.ApplicationResources
#Project webexample2
example.login.username=用户名
example.login.password=密码

但保存,myeclipse会报错,这时我们需要修改资源文件的编码格式。Windons---->Preferences---->Content Type------>Text----->JavaPropertiesFile,把其Default encoding改为“utf-8”,按“update”更新。这样就能进行保存了。但是当我们进行验证会不是成功时,仍然给我们的是乱码。

不急,我们还得做一项任务,打开DOS窗口,CMD到资源文件所在目录,运用JDK的native2ascii工具把我们新建的资源文件改成另一个名字的资源文件,例如bank.properties。命令如下:

>native2ascii -encoding gbk ApplicationResources_zh.properties bank.properties


打开bank.properties资源文件,自动生成的代码如下: 
#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

example.login.username = \u7528\u6237\u540D
example.login.password = \u5BC6\u7801

然后在myeclipse窗口中,把原来新建ApplicationResources_zh.properties 删除,并把bank.properties改为ApplicationResources_zh.properties (为了方便记忆,管理)。然后重起tomcat或进行reload文件,我们发现乱码问题没有了。

②利用Eclipse ResourceBundle Editor插件工具

      以上我们是利用了JDK的native2ascii工具来处理国际化问题,但在EC中,还有一种更方便的工具专门用来处理编辑java的资源文件国际化乱码问题,即Eclipse ResourceBundle Editor插件工具。安装了这个插件后,我们能进行方便的可视化资源文件编辑。推荐。。
分享到:
评论

相关推荐

    struts中文乱码问题解决详细步骤

    然而,在处理中文字符时,可能会遇到乱码问题,这主要体现在请求参数、响应内容或者静态资源显示上。解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置...

    struts2中文乱码问题

    ### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的问题。这不仅影响用户体验,还可能导致数据处理错误。本文将详细介绍几种解决Struts2中文乱码问题的方法。 ####...

    struts2的中文乱码问题解决

    ### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的挑战。这不仅影响用户体验,还可能导致数据不一致等问题。为了解决这一问题,我们需要理解其背后的原理,并采取...

    Struts2Action处理中文乱码

    Struts2 Action 处理中文乱码问题是一个常见的挑战,尤其是在进行Web开发时,由于编码格式不统一,可能导致输入或显示的中文字符出现乱码。以下是对两种解决方法的详细解释: 方法一:通过配置Struts2的i18n编码 ...

    中文乱码处理问题总结

    ### 中文乱码处理问题总结 #### 一、引言 在进行中文字符处理时,经常会出现乱码问题。这主要是因为不同的系统、程序或组件可能采用不同的编码方式,而这些编码方式之间的转换不当就会导致乱码现象。本文将重点...

    struts2.1.6解决乱码 补充

    &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; ...

    struts下的汉字乱码问题

    总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...

    eclipse struts 中文乱码问题图解

    总结来说,解决Eclipse Struts中文乱码问题主要涉及页面编码设置、请求参数处理以及资源文件的正确编码。通过调整相应的配置和使用合适的工具,可以有效避免和解决这些问题,确保中文字符的正常显示和处理。

    struts之中文乱码问题

    在处理中文字符时,Struts可能会遇到乱码问题,这主要是由于字符编码不一致或未正确配置导致的。下面我们将深入探讨这个问题,并提供解决策略。 **乱码产生的原因** 1. **请求编码不一致**:当用户通过表单提交...

    struts 中文乱码问题解决

    在IT领域,特别是Web开发中,Struts框架作为Java Web应用的一个重要组成部分,其在处理中文字符时常常遇到乱码问题。这个问题不仅影响了用户体验,也增加了开发者的调试难度。本文将深入探讨Struts框架中中文乱码的...

    Struts2zhogn乱码处理

    ### Struts2中乱码处理方法详解 #### 一、问题背景 在Web开发中,尤其是使用Java EE框架如Struts2进行项目开发时,字符编码问题常常困扰开发者。如果项目中的不同环节(如前端页面、后端处理、数据库存储等)采用...

    解决struts2.1.6+spring+hibernate 中文乱码

    ### 解决Struts2.1.6 + Spring + Hibernate 中文乱码问题 在Web开发过程中,特别是使用Java EE框架时,字符编码问题一直是开发者关注的重点之一。对于使用Struts2.1.6、Spring以及Hibernate这三个框架组合的项目而...

    struts validator框架以及filter 乱码

    Struts Validator框架是...同时,通过使用Filter处理请求编码,可以有效地解决乱码问题,确保Web应用的国际化体验。在`Strutsvalidator`压缩包文件中,你应该能够找到相关的示例代码,帮助你更好地理解和应用这些概念。

    struts1.2 解决中文乱码

    ### Struts 1.2 中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在 Web 应用开发过程中,特别是在使用 Java 的 Struts 1.2 框架时,中文乱码问题是开发者经常遇到的一个难题。这不仅影响用户体验,还会...

    struts 2. 5.2解决中文乱码

    在处理中文字符时,可能会遇到乱码问题,这通常与字符编码设置不当有关。解决这个问题需要深入理解HTTP协议、Java I/O流以及Struts 2框架的配置。 首先,我们需要了解乱码产生的原因。在Web应用中,数据在网络传输...

    struts2中文乱码解决Demo

    本DEMO是为了解决Struts2在处理中文输入时可能出现的乱码问题,确保系统能够正确地接收和显示中文字符。 首先,我们要理解乱码产生的原因。在Web应用中,数据的传输通常涉及多种编码方式,如HTTP请求的默认编码通常...

    struts上传(已解决中文问题)

    1. **Struts配置**:在Struts的配置文件(通常是struts.xml)中,可以配置`&lt;filter&gt;`和`&lt;filter-mapping&gt;`元素,确保使用UTF-8编码。例如: ```xml &lt;filter&gt; &lt;filter-name&gt;charsetFilter&lt;/filter-name&gt; &lt;filter-...

    struts解决乱码问题

    &lt;filter-class&gt;org.apache.struts2.dispatcher.filter.CharacterEncodingFilter&lt;/filter-class&gt; &lt;init-param&gt; &lt;param-name&gt;encoding&lt;/param-name&gt; &lt;param-value&gt;UTF-8&lt;/param-value&gt; &lt;/init-param&gt; &lt;/filter&gt; ...

    struts2中文乱码

    ### Struts2中文乱码问题解析与解决方案 #### 一、问题背景 在使用Struts2框架进行Web应用开发时,经常会遇到中文乱码的问题。这不仅会影响用户体验,还可能导致数据处理错误。本文将深入分析Struts2中文乱码的原因...

Global site tag (gtag.js) - Google Analytics