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拆分,再用跟页面编码一样的编码来重组。

  1. <%String str = new String(request.getParameter("content").getBytes("ISO-8859-1"),"utf-8"); %> 

这样的字符串重组的方法。

3.超级链接方式:先将链接url中的汉字用java.net.URLEncoder.encode("paramValue","charset")方法处理一下,下面的做法参照2。

Encodingfilter代码:

  1. public class EncodingFilter implements Filter {     
  2.          
  3.     private String charset;     
  4.     @Override     
  5.     public void destroy() {     
  6.         // TODO Auto-generated method stub     
  7.     }     
  8.     
  9.     @Override     
  10.     public void doFilter(ServletRequest request, ServletResponse response,     
  11.             FilterChain chain) throws IOException, ServletException {     
  12.         //用init方法取得的charset覆盖被拦截下来的request对象的charset     
  13.         request.setCharacterEncoding(this.charset);     
  14.         //将请求移交给下一下过滤器,如果还有的情况下。     
  15.         chain.doFilter(request, response);     
  16.     }     
  17.     
  18.     @Override     
  19.     public void init(FilterConfig config) throws ServletException {     
  20.         //从web.xml中的filter的配制信息中取得字符集     
  21.         this.charset = config.getInitParameter("charset");     
  22.     }     
  23. }    

要想这个过滤器生效,还得到web.xml里加入下面的配制信息。

 

  1.  <filter>     
  2.    <filter-name>EncodingFilter</filter-name>     
  3.    <filter-class>cn.eric.encodingtest.filter.EncodingFilter</filter-class>     
  4.    <init-param>     
  5.        <param-name>charset</param-name>     
  6.        <param-value>UTF-8</param-value>     
  7.    </init-param>     
  8. </filter>     
  9. <filter-mapping>     
  10.    <filter-name>EncodingFilter</filter-name>     
  11.    <url-pattern>/*</url-pattern>     
  12. </filter-mapping>    
  13. <filter>  
  14.     <filter-name>EncodingFilter</filter-name>  
  15.     <filter-class>cn.eric.encodingtest.filter.EncodingFilter</filter-class>  
  16.     <init-param> <param-name>charset</param-name>  
  17.     <param-value>UTF-8</param-value>  
  18.     </init-param>  
  19. </filter>  
  20. <filter-mapping>  
  21.     <filter-name>EncodingFilter</filter-name>  
  22.     <url-pattern>/*</url-pattern>  
  23. </filter-mapping>   

 

直接使用URL后接参数的形式(超级链接)和form的get方式的区别:

直接使用URL后接参数的形式(超级链接):

  1. <a href="./jstlresult.jsp?content=世界杯">Go South Africa 

form的get方式:

  1. 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