浏览 5460 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-12
我使用的是 tomcat5.5.20 weblogic server 9 首先大家找个项目把下面3个文件都随便丢到一个目录中取,要相同目录 为了方便,我采用的Jsp,因为修改了不用重新加载,方便测试,至于Servlet只要把下面这样东西对照一下就没问题了 <%@ contentType="text/html; charset=GBK" %> 对应response.setContentType("text/html; charset=GBK") 建议这样来设置,分开类型和编码 response.setContentType("text/html") response.setCharactorEncoding("GBK") 在weblogic和tomcat里都运行看看效果 testEncoding.jsp <%@ page language="java" import="java.util.Date" contentType="text/html; charset=GBK"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'test1.jsp' starting page</title> </head> <body> <h5>提交到getEncoding1.jsp</h5><br> <a href="getEncoding1.jsp?aaa=羽飞&bbb=苍月无影">get请求</a> <form action="getEncoding1.jsp" method="post"> <input type="text" name="aaa" value="羽飞"/> <input type="text" name="bbb" value="苍月无影"/> <input type="submit" value="提交"/> </form> <h5>提交到getEncoding2.jsp</h5><br> <a href="getEncoding2.jsp?aaa=羽飞&bbb=苍月无影">get请求</a> <form action="getEncoding2.jsp" method="post"> <input type="text" name="aaa" value="羽飞"/> <input type="text" name="bbb" value="苍月无影"/> <input type="submit" value="提交"/> </form> </body> </html> getEncoding1.jsp <%@ page language="java" import="java.util.Date" contentType="text/html; charset=gbk"%> <% request.setCharacterEncoding("GBK"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>getEncoding1.jsp</title> </head> <body> <% String s1 = request.getParameter("aaa"); String s2 = request.getParameter("bbb"); %> request.setCharacterEncoding("GBK");<br> String s1 = request.getParameter("aaa");<br> <%=s1 %><br> String s2 = request.getParameter("bbb");<br> <%=s2%> </body> </html> getEncoding2.jsp <%@ page language="java" import="java.util.Date" contentType="text/html; charset=gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>getEncoding2.jsp</title> </head> <body> <% String s1 = new String(request.getParameter("aaa").getBytes("ISO8859-1")); String s2 = new String(request.getParameter("bbb").getBytes("ISO8859-1")); %> String s1 = new String(request.getParameter("aaa").getBytes("ISO8859-1"));<br> <%=s1 %><br> String s2 = new String(request.getParameter("bbb").getBytes("ISO8859-1"));<br> <%=s2%> </body> </html> 从getEncoding1.jsp和getEncoding2.jsp的编码方案来看,差别就在于一个设置了request的编码格式,一个没有设置,没有设置request编码格式的在取得参数的时候重新进行了一次编码 从运行状况来看,第一种方式的get请求在tomcat下会出现乱码,第二种方式在weblogic和tomcat都能正常工作 但是显然第二种方式太烦琐,而且当我们使用struts等框架时会变得棘手 第一种方式显然更好用,也更优雅,我们可以在web.xml里设置编码格式,然后使用filter从initparameter里读出编码格式,然后设置request的编码格式,管理也方便,不过目前在tomcat下的get请求会出现乱码,要解决这个问题就需要在server.xml里配置一项参数,server.xml在tomcat根目录/config文件夹下,tomcat5 post和get使用了不同的编码格式,而tomcat4使用的是相同格式,如果你使用tomcat4,就不会出现乱码 <Connector port="8888" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="tru e" URIEncoding="gbk"/> <!-- 配置URIEncoding="gbk" 这里的编码格式一定要和你的页面编码格式一致 --> 现在重新启动tomcat,看看第一种编码格式是不是在tomcat下是不是能正常显示啦^_^ - - PS:javaeye出bug了?点保存草稿就发出来了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |