MyEclipse 下利用Struts2进行Web开发的乱码问题的综合解决方案

          今天做实验室的网站,整合kindeditor到struts2框架内,提交新闻标题和内容时,又遇到了常见的乱码问题,去网上百度了很多相关的解决方案,基本上都无法给出综合的答案,片面的居多,有可能不是自己想要的解决方案.因此,我结合搜索到的解决方案再加上早上调试的成果,整理了这篇文章,供后来遇到这个问题的同学分享下,下次遇到就不必向我这样弄了一个早上,少走点弯路,.

         我遇到的问题是利用JSP往后台的action传递表单数据时出现了乱码的问题.我刚开始以为是MyEclipse编辑器的问题,于是点击MyEclipsede的Project->Properties->Resources,在弹出的对话框中统一了页面的编辑格式为UTF8.以支持UTF8编码的呈现.再修改JSP页面的编码,并且修改了Struts默认的编码格式;如下

1.在struts.xml中添加<constant name="struts.i18n.encoding" value="UTF-8"/>
2.在jsp页面中添加<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

其中<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>是约束JSP页面中嵌套的Java代码的编码的编码方式

而 <meta http-equiv="content-type" content="text/html; charset=utf-8" />使约束JSP中的html静态页面的编码方式的

修改表单提交的方法为get方法.但是依旧出现乱码问题,在后台打印得到的字符串得到的是????????????这样的乱码.于是尝试在Struts2中调用的set方法对获取到的String变量(假设为content)调用

new String(content.getBytes(),"utf8")打印出来的是另一种乱码.

于是索性自己写了个main方法,将浏览器里uri里带的content内容给截取下来,如下所示:

public static void main(String args[])
{
try {

String str=java.net.URLDecoder.decode("%E4%BD%A0%E5%A5%BD%E5%95%8A","utf8");
System.out.println("str:"+str);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

%E4%BD%A0%E5%A5%BD%E5%95%8A实际是我提交的"你好啊"转成utf8格式后的表示形式.因此可以断定,JSP页面提交给后台的编码格式是正确的,问题出在了Tomcat服务器这边

我又调用了

String param = ServletActionContext.getRequest().getParameter("参数名");方法获取下content的内容,依旧是?????????这样的乱码.因此可以断定,Tomcat在帮助我解析URI参数时并没有指定用UTF8格式的方式进行转码.因此百度了下.找到下面的解决方法:
在服务器apache-tomcat-5.5.23\conf\这个目录下有个server.xml文件,打开它,大约在80行左右
<Connector/>中加URIEncoding="utf-8"  这么一句话就OK啦! 如下: 
 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"/>
指定了Connector的URIEncoding为UTF8.Connector是Tomcat服务器中非常重要的一个组件,它负责解析用户发送过来的request对象并将解析好的结果交由后面的Container进行处理,在Connector中会对Uri中的附带参数利用底层的String方法获取下来,获取的同时会指定编码的格式.由于此处并没有显式指定编码格式,往哪种编码格式转就不清楚了,因此会出现诸如????的乱码问题,修改后Run一下,中文提交的乱码终于被解决了.
发此篇文章并不是提供绝对准确地解决方案,而重在于问题的解决方法和思路,在这里跟大家分享下.上百度找文章发现针对同一个问题出现了很多页面,点进去结果都是转载自同一篇文章的.希望大家多动点脑筋思考下,亲身实践下别人的方法行得通了再转载.在google搜索的时候,发现针对同一个问题有很多种不同的解决方法.这就是不同的学习风气啊,少年们,我们是祖国计算机界未来的接班人,要多动脑筋思考解决问题啊.写得很拙见笑了.



  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值