我的前端代码为:
<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;
}