Tomcat报错:The valid characters are defined in RFC 7230。解决办法

参考李兴华老师的JSP课程编写数据表增删改查时。

1. 问题描述

    通过jsp页面批量删除数据时,

Tomcat报错:The valid characters are defined in RFC 7230。解决办法_第1张图片

Tomcat报错:The valid characters are defined in RFC 7230。解决办法_第2张图片

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 set = new HashSet<>();
	for (int x =0 ; x < result.length ; x ++) {
		set.add(Integer.parseInt(result[x]));
	}
%>

这样可以获得全部要删除的部门id信息。实现批量删除

你可能感兴趣的:(学习)