您的位置:首页 > Web前端 > JavaScript

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 代码如下:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: