jsp頁面間的參數傳遞有以下幾種方式:
1、表單(form)的提交。
2、直接使用URL後接參數的形式(超級鏈接)。
3、如果兩個jsp頁面在兩個不同的窗口中,並且這兩個窗口是父子的關係,子窗口中的jsp也可以使用javascript和DOM(window.opener.XXX.value)來取得父窗口中的jsp的輸入元素的值。
解決辦法:
1.post提交的方式:使用過濾器,將到達頁面前的request對象中的字符編碼設定成跟你頁面統一的編碼。
在過濾器中使用request.setCharacterEncoding(this.charset); 設置。
*注:request.setCharacterEncoding(this.charset);只適用post方式,只處理Request的body部分。
2.get提交的方式:先以字符編碼ISO-8859-1拆分,再用跟頁面編碼一樣的編碼來重組。
- <%String str = new String(request.getParameter("content").getBytes("ISO-8859-1"),"utf-8"); %>
這樣的字符串重組的方法。
3.超級鏈接方式:先將鏈接url中的漢字用java.net.URLEncoder.encode("paramValue","charset")方法處理一下,下面的做法參照2。
Encodingfilter代碼:
- public class EncodingFilter implements Filter {
-
- private String charset;
- @Override
- public void destroy() {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
-
- request.setCharacterEncoding(this.charset);
-
- chain.doFilter(request, response);
- }
-
- @Override
- public void init(FilterConfig config) throws ServletException {
-
- this.charset = config.getInitParameter("charset");
- }
- }
要想這個過濾器生效,還得到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>
- <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>
直接使用URL後接參數的形式(超級鏈接)和form的get方式的區別:
直接使用URL後接參數的形式(超級鏈接):
- <a href="./jstlresult.jsp?content=世界盃">Go South Africa
form的get方式:
- http://localhost:8080/TomcatJndiTest/jstlresult.jsp?content=%E4%B8%96%E7%95%8C%E6%9D%AF
超級鏈接時瀏覽器不會將參數重新編碼,form的時候纔會。
詳情請參考原文:http://www.blogjava.net/tbwshc/archive/2012/06/18/381005.html