设为首页 收藏本站
查看: 606|回复: 0

[经验分享] Java 跨服务器(tomcat和weblogic)的中文编码解决方法

[复制链接]

尚未签到

发表于 2017-2-7 10:58:46 | 显示全部楼层 |阅读模式
本文要解决的问题是使用同一种编码方案而能在不同服务器下都解决中文乱码问题,我只在tomcat和weblogic下试验过,因为这是最常用的两种服务器(就是一套方案要在tomcat和weblogic下无论是get请求还是post请求都要正常编码---ajax请求不再此文讨论中,ajax请求不同一般的请求)
我使用的是
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了?点保存草稿就发出来了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-338750-1-1.html 上篇帖子: Tomcat 服务器server.xml,web.xml的关键参数配置(转载) 下篇帖子: j2ee中jdk与tomcat如何进行配置(日记)O(∩_∩)O
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表