更深入的TOMCAT中文乱码解决之道,包括GET/POST

在tomcat5中发现了以前处理tomcat4的方法不能适用于处理直接通过url提交的请求,上网找资料终于发现了最完美的解决办法,不用每个地方都转换了,而且无论get,和post都正常。    
  
  -------------------  
   
  问题描述:  
   
  1   表单提交的数据,用request.getParameter("xxx")返回的字符串为乱码或者??  
  2   直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request.getParameter("name")时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用  
   
  原因:  
  1   tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理  
  2   tomcat对get方式提交的请求对query-string   处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding("GBK"))不起作用。  
   
   
  解决办法:  
   
  首先所有的jsp文件都加上:  
   
   
  1   实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)    
   
  1)只要把%TOMCAT安装目录%/   webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的WEB-INF\classes目录filters下,如果没有filters目录,就创建一个。  
  2)在你的web.xml里加入如下几行:  
   
          <filter>  
                  <filter-name>Set   Character   Encoding</filter-name>  
                  <filter-class>filters.SetCharacterEncodingFilter</filter-class>  
                  <init-param>  
                          <param-name>encoding</param-name>  
                          <param-value>GBK</param-value>  
                  </init-param>  
          </filter>  
   
          <filter-mapping>  
                  <filter-name>Set   Character   Encoding</filter-name>  
                  <url-pattern>/*</url-pattern>  
          </filter-mapping>  
   
  3)完成.  
   
  2   get方式的解决办法  
  1)   打开tomcat的server.xml文件,找到区块,加入如下一行:  
  URIEncoding=”GBK”  
  完整的应如下:  
          <Connector    
  port="80"                               maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75"  
                                enableLookups="false"   redirectPort="8443"   acceptCount="100"  
                                debug="0"   connectionTimeout="20000"    
                                disableUploadTimeout="true"   URIEncoding="GBK"   />  
   
  2)重启tomcat,一切OK。  
   
  执行如下jsp页页测试是否成功  
   
   
  <%@   page   contentType="text/html;charset=gb2312"%>  
  <%@   page   import="java.util.*"%>  
  <%  
          String   q=request.getParameter("q");  
          q   =   q   ==   null?   "没有值"   :   q;  
  %>  
  <HTML>  
  <HEAD><TITLE>新闻列表显示</TITLE>  
  <META   http-equiv=Content-Type   content="text/html;   charset=gb2312">  
  <META   http-equiv=pragma   content=no-cache>  
  </HEAD>  
   
  <body>  
  你提交了:  
  <%=q%>  
  <br>  
  <form   action="tcnchar.jsp"   method="post">  
  输入中文:<input   type="text"   name="q"><input   type="submit"   value="确定">  
  <br> <a   href="tcnchar.jsp?q=中国">通过get方式提交</a>  
  </form>  
  </BODY>  
  </HTML>  
   
  测试结果如果你输入文本框或者点超链都会显示:你提交了”中国”,说明成功!!!!!  

你可能感兴趣的:(html,tomcat,Web,jsp,xml)