解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF

我的前端代码为:

<script type="text/javascript">
function getLabReserveById(lab_id,user_id,labName){
	window.location.href="${basePath}/getLabReserveById?lab_id="+lab_id+"&&user_id="+user_id;
}
</script>

后台代码一开始为:

public ModelAndView getLabReserveById(HttpSession session,HttpServletRequest request){
		//客户端是以UTF-8编码提交表单数据的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		int lab_id=Integer.parseInt(request.getParameter("lab_id"));
		int user_id=Integer.parseInt(request.getParameter("user_id"));
		ModelAndView view=new ModelAndView("reservation");
		
		List<Lab_reservation> lab_reservation_list=reserveLaboratoryService.getLab_reservations(lab_id);
		view.addObject("lab_reservation_list",lab_reservation_list);
		view.addObject("lab_id", lab_id);
		
		List<Term> termList=userService.getTermList();
		view.addObject("termList",termList);
		
		List<Course> courseList=userService.getCourseList(user_id);
		view.addObject("courseList",courseList);
		
		return view;
	}

我是以地址后面追加数据的方式传递数据,这种方式在其他浏览器都能够正常运行,IE却报错,查阅了相关资料得知:
这个问题是高版本tomcat中的新特性:Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http请求的规则验证,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。通过地址传参时,传入的参数中有不在RFC3986中的保留字段中的字符就会报这个错。
意思就是tomcat版本过高,所以我部署了一个tomcat6版本,然而也没用,然后我把后台接受数据参数的方式改成了注解形式,@Param这样,完美解决网上说的其他什么配置tomcat的catalina.properties,配置tomcat的server.xml啥的我都试了,没有用
以下为更改后的代码:

@RequestMapping("getLabReserveById")
	public ModelAndView getLabReserveById(@Param("lab_id") int lab_id,@Param("user_id") Integer user_id,HttpSession session){
		ModelAndView view=new ModelAndView("reservation");
		
		List<Lab_reservation> lab_reservation_list=reserveLaboratoryService.getLab_reservations(lab_id);
		view.addObject("lab_reservation_list",lab_reservation_list);
		view.addObject("lab_id", lab_id);
		
		List<Term> termList=userService.getTermList();
		view.addObject("termList",termList);
		
		List<Course> courseList=userService.getCourseList(user_id);
		view.addObject("courseList",courseList);
		
		return view;
	}

你可能感兴趣的:(毕设,前后端交互,spring,后端,前端)