乱码:
1.get方式
<%String str = new String(request.getParameter("content").getBytes("ISO-8859-1"),"utf-8"); %>这样的字符串重组的方法。
2.post方式
<%request.setCharacterEncoding("UTF-8"); %>
使用过滤器,声明字符集
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- //用init方法取得的charset覆盖被拦截下来的request对象的charset
- request.setCharacterEncoding(this.charset);
- //将请求移交给下一下过滤器,如果还有的情况下。
- chain.doFilter(request, response);
- }
要想这个过滤器生效,还得到web.xml里加入下面的配制信息。
- <filter>
- <filter-name>EncodingFilter</filter-name>
- <filter-class>cn.eric.encodingtest.filter.EncodingFilter</filter-class>
- <init-param>
- <param-name>charset</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>EncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
3.超链接方式
<a href="./jstlresult.jsp?content=世界杯">Go South Africa</a>
跟form提交有些不同的是:当你点击这个超级链接后在浏览器的地址栏里看到的是http://localhost:8080/TomcatJndiTest/jstlresult.jsp?content=世界杯,而不是http://localhost:8080/TomcatJndiTest/jstlresult.jsp?content=%E4%B8%96%E7%95%8C%E6%9D%AF
这里浏览器并没有帮我们把这个转化工作搞定,所以这里要自己动手,丰衣足食了。做法如下:
<a href="./jstlresult.jsp?content=<%=java.net.URLEncoder.encode("世界杯","utf-8") %>">Go South Africa</a>
这样的话在第二个页面就能使用<%String str = new String(request.getParameter("content").getBytes("ISO-8859-1"),"utf-8"); %>的方法来正确的得到这个参数值了。
jsp页面间的参数传递有以下几种方式:
1、表单(form)的提交。
2、直接使用URL后接参数的形式(超级链接)。
3、如果两个jsp页面在两个不同的窗口中,并且这两个窗口是父子的关系,子窗口中的jsp也可以使用javascript和DOM(window.opener.XXX.value)来取得父窗口中的jsp的输入元素的值。下面就前两种方式中出现的乱码问题做一下剖析。
了。
总结一下:
1、post提交的方式:使用过滤器,将到达页面前的request对象中的字符编码设定成跟你页面统一的编码。
2、get提交的方式:<%String str = new String(request.getParameter("content").getBytes("ISO-8859-1"),"utf-8"); %>这样的字符串重组的方法。
3、超级链接方式:先将链接url中的汉字用java.net.URLEncoder.encode("paramValue","charset")方法处理一下,下面的做法参照2。