在进行struts开发的过程中。总也是出现非常多的乱码问题。但归根究竟,也仅仅是下面三种情况: 



㈠页面显示中文乱码 



㈡传递參数中文乱码 



㈢国际化资源文件乱码
 



以下就这三中情况介绍怎么在详细项目中处理这些乱码问题。

而对于总体的处理思想。是要统一编码为: UTF-8.(以myeclipse6支持的struts1.3为准) 



㈠页面显示中文乱码 



      对于在页面中显示出现乱码,这个问题比較简单,便是检查你的JSP文件中是不是出现了中文要处理。由于JSP默认的编码格式为“ISO-8859-1”。当JSP中出现要处理的中文时。其显示就出现乱码了,这样的情况一般出如今手写JSP,或改动时。由于在myeclipse6.0中,假设出现了编码错误时,程序不会让你保存,而是会提示你注意编码,这点非常好。

详细的改动办法是把

Html代码

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

改成:

Html代码

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

㈡传递參数中文乱码 



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

Java代码

  1. public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
  2. HttpServletResponse response) ...{
  3. DynaActionForm loginForm = (DynaActionForm) form;
  4. String username = (String) loginForm.get("username");
  5. String password = (String) loginForm.get("password");
  6. System.out.println("username:"+username);
  7. System.out.println("password:"+password);
  8. if (username.equals("ivorytower") && password.equals("123456")) ...{
  9. return mapping.findForward("success");
  10. }
  11. return mapping.findForward("fail");
  12. }

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



详细的解决方法: 



①改动Tomcat---->conf----->server.xml文件,在改动port的标签后面加一行代码。例如以下:

Xml代码

  1. port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443"  URIEncoding="UTF-8"/>

②编写过滤器Filter

Java代码

  1. import java.io.IOException;
  2. import javax.servlet.Filter;
  3. import javax.servlet.FilterChain;
  4. import javax.servlet.FilterConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletRequest;
  7. import javax.servlet.ServletResponse;
  8. public class CharacterEncodingFilter implements Filter ...{
  9. @Override
  10. public void destroy() ...{
  11. }
  12. @Override
  13. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException   {
  14. request.setCharacterEncoding("utf-8");
  15. chain.doFilter(request, response);
  16. }
  17. @Override
  18. public void init(FilterConfig arg0) throws ServletException {
  19. }
  20. }

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



③改动web.xml文件 



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

Xml代码

  1. characterEncoding
  2. com.v512.example.CharacterEncodingFilter
  3. characterEncoding
  4. /*

注意其过滤的URL为“/*”,表示当前的request请求。

为了使设置生效,重起tomcat。 



㈢国际化资源文件乱码 



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



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

Html代码

  1. 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中文乱码问题总结的更多相关文章

  1. 解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客 http://hsj69106.blog.51cto.com/1017401/595598/

    解决Eclipse中文乱码 - 技术博客 - 51CTO技术博客  http://hsj69106.blog.51cto.com/1017401/595598/

  2. Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题

    1 设置中文显示环境 1. 打开System Settings 2. 打开Personal-> Language Support. 会弹出如下对话框,提示你“语言支持没安装完整”. 点击“Rem ...

  3. Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题[转载]

    转载自:http://www.cnblogs.com/zhcncn/p/4032321.html 写在前面:解决gedit 在txt文件格式出现乱码的问题,在我自己的操作中是需要把系统设置成中文显示环 ...

  4. 解决TortoiseCVS中文乱码

    解决TortoiseCVS中文乱码必备,解决方法: 第一:卸载和TortoiseCVS安装一起安装的CVSNT. 第二:安装本版本CVSNT. CVSNT下载地址:http://down.51cto. ...

  5. 如何解决PHP中文乱码问题

    如何解决PHP中文乱码问题 一.解决HTML中中文乱码问题方法    1.在head标签里面加入UTF8编码(国际化编码):UTF-8是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的. ...

  6. springMvc解决json中文乱码

    springMvc解决json中文乱码 springMvc解决json中文乱码,springMvc中文乱码,spring中文乱码 >>>>>>>>> ...

  7. 解决URL中文乱码问题--对中文进行加密、解密处理

    解决URL中文乱码问题--对中文进行加密.解密处理 情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标 ...

  8. request.getParameter()及解决数据库中文乱码问题——实习第七天

    今天老师让我们自己做一个小项目,我开始着手于实现这个小项目.途中遇到过几个小问题,在此做个小记录, 相信后期还是会借鉴的. 1,从前台传入数据给后台传入数据,并没有传入成功: 输出的为Null. 当然 ...

  9. Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码

    hessian结合spring的demo         hessian的maven依赖: <!-- hessian --> <dependency>         < ...

随机推荐

  1. 优动漫PAINT绘制紫阳花教程

    紫阳花是插画.漫画很常见的绘画画材.这个教程非常好懂.而且很方便就能绘制出漂亮的效果.因为这种花一个月内能变化三种颜色,故而人们赋予它的花语是善变.背叛. 教程是简单,呃.... 没有优动漫PAINT ...

  2. Vir-manager 创建虚拟机

  3. 紫书 例题8-10 UVa 714 (二分答案)

    这道题让最大值最小, 显然是二分答案 当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案 为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点 就全部枚举一遍, 验证答案 ...

  4. CSDN 轻松周赛赛题:能否被8整除

    轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...

  5. MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)

    原文地址:http://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是 ...

  6. LeetCode 232: Implement Queue using Stacks

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  7. Woody的Python学习笔记4

    Python模块 Import语句 想要使用Python源文件,仅仅须要在还有一个源文件中运行import语句.语法例如以下: import module1 当解释器遇到import语句.假设模块在当 ...

  8. JNI之——&#39;cl&#39; 不是内部或外部命令,也不是可执行的程序或批处理文件

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46604315 问题的出现:     今天卸载了VS2010,重装vs2008后.发 ...

  9. Python库之pyudev (一)

    库pyudev是libudev的python封装,libudev提拱了对本地设备的列举与查询API. 1.安装 pip install pyudev 2. 使用 2.1 开始 导入pyudev,验证库 ...

  10. Python: PS 滤镜--高反差保留 (High pass)

    本文用 Python 实现 PS 滤镜中的 高反差保留 特效,具体的算法原理和图像效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/deta ...