Eclipse+Tomcat URL传中文字符报错400

本文介绍了解决JSP中使用含有中文字符的URL参数导致的问题,通过使用JavaScript的encodeURI函数来确保参数正确传递,并讨论了如何在服务器端正确接收这些参数。

今天在jsp中用href传值(中文字符),在Eclipse内置浏览器出错,但在火狐可以正常运行,搞了一天终于解决了,记录一下。

先看下代码:

<a href = "Practice_Choose?name=<%=name%>&idCollege=<%=idCollege%>&idStudent=<%=idStudent%>">在线练习</a><br>

其中name是中文字符,如果不传name可以正常运行。控制台信息:

Error parsing HTTP request header

Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

看到说有无效字符,跟着百度在Servers/server.xml下找Connector(不太清楚是否能自定义一个,我找的是端口=8080的,添加属性maxHttpHeaderSize=81920(80K),修改protocol="org.apache.coyote.http11.Http11Protocol"(有人说协议要写全))


在D:\Apache Tomcat 7.0\webapps\docs\config\http.html文档中看到了connector的属性:


问题依旧存在。改完了之后个人感觉上面那些并没有什么用。


下面用js的encodeURI函数完美解决了:

<a href = "javascript:location.href=encodeURI('Practice_Choose?name=<%=name%>&idCollege=<%=idCollege%>&idStudent=<%=idStudent%>')">在线练习走一走</a>

javascript:调用js函数,location.href=跳转,encodeURI对字符串编码,Practice_Choose是Servlet名,后面是我的三个参数。

界面可以成功跳转,把encodeURI括号里面的字符串编码成了这样:

Practice_Choose?name=%E5%BC%A0%E5%AD%90%E5%81%A5&idCollege=53&idStudent=1

就这么一个非常简单的用法,因为不了解困扰了一天,路漫漫其修远。


P.S.

1.Connector


2.另外百度了一番,看到了我这个的下一步,也就是如何正确接收中文字符(避免乱码):

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");
对于2.我在Server.xml中的Connector(port=8080)添加URIEncoding="UTF-8",就不再需要了,直接用request.getParameter("name")就可以了。


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值