JSP 通过 URL 传变量时,出现乱码的几点研究和解决方法
2013-07-08 21:51
309 查看
我之前一直用 MyEclipse 2013,一直很好用,用的是MyEclipse自带的 Tomcat 7,
而且把 ...\Workspaces\MyEclipse Professional\.metadata\.me_tcat7\conf
中的 service.xml 改成了下面的代码:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="utf-8"/>
改成这个之后,MyEclipse 就能处理 URL 中文变量值了。
不配的话,默认支持中文变量,例如 modify.html?名字=imknown。
加了红字部分之后,就可以写modify.html?名字=王仁川 了。
红字只是核心解决方案,还要配合conf目录下的其他的xml一起使用才行,请自行百度 “Tomcat 中文支持”。
最近Eclipse 4.3 发布了,于是我想体验一下,
就下载了一个Eclipse 4.3 (代号 开普勒) for
JavaEE,同时下载了Tomcat 7.0.42 x64 安装版。
脑残,就是配置不了服务器,害得我好一顿找原因,坑爹啊,就是不让创建服务器。
最后发现是Eclipse 不支持安装版,必须解压缩版,MyEclipse
2013 就两者都行,无语,花钱的就是好。
全部完成后,一切都正常,因为之前的某一个S2SH 项目 用 MyEclipse 2013 开发差不多了,
就直接把 MyEclipse WebRoot 里面的文件覆盖到了 Eclipse WebContext,
scr 也是直接复制过去的。就这样,把 jar 包什么的都能完之后,
测试了一下,能启动服务,而且部署、发布成功,异常高兴。
之后,本文的重点出现了!
在测试某个添加页面的时候,发现通过 JavaScript 添加的动态内容居然有乱码了?!
这个问题在 MyEclipse 2013 没有,我的MySQL 5.6 数据库 编码是 utf8,
Web 项目的所有 bean 和 jsp 编码也都是 UTF-8,之前说过了,Tomcat 7 的容器编码也是 uft-8,
而且我代码一点也没改动,怎么就会出现乱码哪?
经过筛查,发现:
通过 URL 向 VoucherAction 传递中文参数时会出现乱码,
在action 中接收并打印,直接就是乱码。
说明就是 URL 编码不对,但是已经配置了所有的 UFT8,怎么会出错那?
add.jsp 代码如下:
voucherAction.java 代码如下:
把 httpRequest 和 httpResponse 的 setCharacterEncoding("UFT-8") 了,亦不好用。
经过无限次的尝试,最后抱着试一试的态度,在方法体里面加了一句:
这就好用了?!估计是 Tomcat 一直在用 ISO-8859-1,
现在强制出现了 utf-8 ,所以被纠正回来了,
成功之后,把这句话去掉,重启服务,重新部署,
居然也是好用的了,看来是被彻底纠正过来了!
哎,为了防止不经意间又出现此问题,还是留着他吧,
反正也没啥大碍,我彻底服服帖帖了。
友情提示:
最后最好把MyEclipse部署的项目文件都反部署,然后终止服务器。
重新开启服务器,重新添加部署即可。
有经济能力的话,还是购买正版 MyEclipse 吧 T .T,
开玩笑,我同学用 MyEclipse 10.6 也有出现类似问题,
不过是 通过 hibernate 往数据库里面存中文时出现 "???" 乱码的问题,
仍未解决,有机会再帮他弄一弄。对了,
我用的 JDK 6 x86_64 + MyEclipse 2013,
而 Eclipse 中则是 JDK 8 x86_64。应该不是这个的问题吧。(笑)
End of this File
而且把 ...\Workspaces\MyEclipse Professional\.metadata\.me_tcat7\conf
中的 service.xml 改成了下面的代码:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="utf-8"/>
改成这个之后,MyEclipse 就能处理 URL 中文变量值了。
不配的话,默认支持中文变量,例如 modify.html?名字=imknown。
加了红字部分之后,就可以写modify.html?名字=王仁川 了。
红字只是核心解决方案,还要配合conf目录下的其他的xml一起使用才行,请自行百度 “Tomcat 中文支持”。
最近Eclipse 4.3 发布了,于是我想体验一下,
就下载了一个Eclipse 4.3 (代号 开普勒) for
JavaEE,同时下载了Tomcat 7.0.42 x64 安装版。
脑残,就是配置不了服务器,害得我好一顿找原因,坑爹啊,就是不让创建服务器。
最后发现是Eclipse 不支持安装版,必须解压缩版,MyEclipse
2013 就两者都行,无语,花钱的就是好。
全部完成后,一切都正常,因为之前的某一个S2SH 项目 用 MyEclipse 2013 开发差不多了,
就直接把 MyEclipse WebRoot 里面的文件覆盖到了 Eclipse WebContext,
scr 也是直接复制过去的。就这样,把 jar 包什么的都能完之后,
测试了一下,能启动服务,而且部署、发布成功,异常高兴。
之后,本文的重点出现了!
在测试某个添加页面的时候,发现通过 JavaScript 添加的动态内容居然有乱码了?!
这个问题在 MyEclipse 2013 没有,我的MySQL 5.6 数据库 编码是 utf8,
Web 项目的所有 bean 和 jsp 编码也都是 UTF-8,之前说过了,Tomcat 7 的容器编码也是 uft-8,
而且我代码一点也没改动,怎么就会出现乱码哪?
经过筛查,发现:
通过 URL 向 VoucherAction 传递中文参数时会出现乱码,
在action 中接收并打印,直接就是乱码。
说明就是 URL 编码不对,但是已经配置了所有的 UFT8,怎么会出错那?
add.jsp 代码如下:
function addDetail() { var formElement = document.forms[0]; formElement.action = "voucher!addDetail.action"; formElement.submit(); }
<s:form method="get"> <br /> <table border="1"> <s:if test="voucherdetails.size>0"> <s:iterator value="voucher.details"> <tr> <td><s:property value="item" /></td> <td><s:property value="account" /></td> <td><s:property value="des" /></td> <td>...</td> </tr> </s:iterator> </s:if> <tr> <td> <select name="detail.item"> <option value="打车费">打车费</option> <option value="饭费">饭费</option> <option value="住宿费">住宿费</option> </select> </td> <td><input name="detail.account" value="1" /></td> <td><input name="detail.des" value="不清楚" /></td> <td><input type="button" value="add detail" onclick="addDetail()" /></td> </tr> </table> <br /> </s:form>
voucherAction.java 代码如下:
private Voucher boucher; private Detail detail = new Detail(); private VoucherService voucherService; //访问器等省略 /** * 添加一条 Detail * * @return 添加页面 * @throws Exception */public String addDetail() throws Exception { if (voucher.getId() == null) { voucherService.add(voucher); } detail.setVoucher(voucher); voucherService.addDetail(detail); voucher = voucherService.get(voucher.getId()); session.put("voucher", voucher); return "add"; }于是,我试了自己写了一个 filter,
把 httpRequest 和 httpResponse 的 setCharacterEncoding("UFT-8") 了,亦不好用。
经过无限次的尝试,最后抱着试一试的态度,在方法体里面加了一句:
// 防编码抽风 new String(detail.getDes().getBytes("ISO-8859-1"), "utf-8");
这就好用了?!估计是 Tomcat 一直在用 ISO-8859-1,
现在强制出现了 utf-8 ,所以被纠正回来了,
成功之后,把这句话去掉,重启服务,重新部署,
居然也是好用的了,看来是被彻底纠正过来了!
哎,为了防止不经意间又出现此问题,还是留着他吧,
反正也没啥大碍,我彻底服服帖帖了。
友情提示:
最后最好把MyEclipse部署的项目文件都反部署,然后终止服务器。
重新开启服务器,重新添加部署即可。
有经济能力的话,还是购买正版 MyEclipse 吧 T .T,
开玩笑,我同学用 MyEclipse 10.6 也有出现类似问题,
不过是 通过 hibernate 往数据库里面存中文时出现 "???" 乱码的问题,
仍未解决,有机会再帮他弄一弄。对了,
我用的 JDK 6 x86_64 + MyEclipse 2013,
而 Eclipse 中则是 JDK 8 x86_64。应该不是这个的问题吧。(笑)
End of this File
相关文章推荐
- JSP页面通过URL传递中文参数出现中文乱码的解决方法
- servlet通过URL传参到jsp页面出现乱码问题的解决
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- Jsp中通过get方法传递参数为中文时出现乱码如何解决?
- Java 通过URL传递中文出现乱码的解决方法
- 备忘录:javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- 备忘录:javascript通过url向jsp页面传递中文参数乱码解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法(两次编码,一次解码)
- 转载---HttpUrlConnection发送post请求汉字出现乱码的一个解决方法及其原因
- jsp通过include指令引入html乱码的解决方法
- JSP 表单输入,UTF编码,get方式提交数据出现中文乱码解决方法
- jsp通过include指令引入html乱码的解决方法
- springmvc通过json向前台传递信息的时候出现乱码问题解决方法