关于get提交编码问题

来源:互联网 发布:深圳pmp培训机构 知乎 编辑:程序博客网 时间:2024/06/06 00:23

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"));

0 0