Tomcat报错:The valid characters are defined in RFC 7230。解决办法
程序员文章站
2022-06-05 19:29:23
...
参考李兴华老师的JSP课程编写数据表增删改查时。
1. 问题描述
通过jsp页面批量删除数据时,
Tomcat8.5.31报错,错误信息如下:
信息: 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
原因在于,表单提交后的请求的请求路径,路径成为:xx.jsp?ids=92|93|94|
function deleteHandle(eleId,url) { //进行删除的控制
var idInfo = ""; //这是最要删除的数据
var obj = document.all(eleId) ;
if(obj.length == undefined) { //不是一个数组,是一个单独的数据
if(obj.checked){ //有选项被选中
//idInfo += obj.value + "+" ;
idInfo += obj.value + "|" ;
}
} else {
for (var x = 0; x < obj.length; x++) {
if(obj[x].checked){ //有选项被选中
//idInfo += obj[x].value + "+" ;
idInfo += obj[x].value + "|" ;
}
}
}
//console.log(idInfo);
if (idInfo == "") { //没有选中要删除的数据
alert("您还未选择任何想要删除的数据,请先选择!");
} else {
if(window.confirm("你确定要删除这些数据吗?")) {
window.location = url+"?ids=" + idInfo; //地址重写
}
}
}
2.原因以及解决办法
查询资料得知,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。Url的编码格式采用的是ASCII码,而不是Unicode。然而tomcat的新版本增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析URL。即表单提交时产生的请求url中的"|"字符无法解析。
此时尝试将请求url变更为:xx.jsp?ids=92&93&94&,跳转页面xx.jsp中 String ids = request.getParameter("ids"); 取得的ids字段值只是92,原因在于&将93、94和ids分开了,不认为这两个数是ids的内容。此时后台无法通过分割字符串的方式拿到全部要删除id。
目前解决办法,将请求url变更为:xx.jsp?ids=92+93+94+,跳转页面xx.jsp中 String ids = request.getParameter("ids"); 取得的ids字段为"92 93 94 ",(URL中+表示空格,可以替换成%2B)。后台jsp页面可以通过空格字符串分割获得所有的待删除的id。
相关代码:
<%
String ids = request.getParameter("ids");
out.println(ids);
//http请求中,"+"会转变 " "
String result[] = ids.split(" ");
Set<Integer> set = new HashSet<>();
for (int x =0 ; x < result.length ; x ++) {
set.add(Integer.parseInt(result[x]));
}
%>
这样可以获得全部要删除的部门id信息。实现批量删除
推荐阅读
-
Tomcat中Invalid character found in the request target. The valid characters are defined in RFC 7230解决
-
tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)
-
Tomcat报错:The valid characters are defined in RFC 7230。解决办法
-
解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and ..
-
解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题
-
tomcat异常解决(Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986)