Request里设置值,重定向到jsp,jsp里去取request中的值是取不到的,因为重定向是发起新的请求。这时最好用转发。
//response.sendRedirect(request.getContextPath()+"/basedata/item_maint.jsp");
request.getRequestDispatcher("/basedata/item_maint.jsp").forward(request,response);
如果非要用重定向,那么只能以?的形式传入进去。如下面代码:
response.sendRedirect(request.getContextPath()+"/basedata/item_maint.jsp?error_message="+error_message);
这时候,jsp页面就不能用request.getAttribute("error_message")来取了。需要改成request.getParameter("error_message").
再运行,报如下编码错误:
警告: Parameters: Character decoding failed.Parameter skipped.
java.io.CharConversionException:isHexDigit
出现以上错误是因为get提交中文造成编码问题,解决以上问题,需要处理两个地方:
1、 Filter设置字符集对get不起作用,处理get提交乱码通常可以考虑改变服务器的配置,如在tomcat的server.xml里的加上URIEncoding
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> |
2、在重定向时,对中文进行URLEncoder.encode编码。
response.sendRedirect(request.getContextPath()+"/basedata/item_maint.jsp?error_message="+URLEncoder.encode(error_message,"UTF-8"));