apache 集成tomcat乱码问题解决

apache 集成tomcat乱码问题解决

项目中前台JS使用了window.open(含有中文的URL),后台获取的中文参数出现乱码,前台alert提示的信息是中文,可以肯定是在网络传输的过程出现的乱码,网上找了些资料收集一下。


1、首先查看页面的编码格式:

  首先查看JSP文件中的编码格式:

  开头都已经加了:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

  head 中也加了 charset=UTF-8">

 排除掉

2、通过程序解决:(测试未成功~)

JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数是正确的,但是传到了服务器端是是乱码。这种情况下需要在客户端对该参数进行编码,然后在服务器端解码即可。

1、JS客户端编码

var selStr=document.getElementsByName('selStr')[0].value;
    selStr=encodeURI(encodeURI(selStr));
    window.open('printWindow.do?bm=j&selStr='+selStr+'');

注意:编码的时候需要使用两次encodeUri,写一个就是????号,写两个则输出: %4d%5a这种

2、服务器端解码:

String tempSelStrs=request.getParameter("selStr").toString();

String selStr=java.net.URLDecoder.decode(tempSelStrs,"UTF-8");

最后放弃~~


3、配置TOMCAT编码格式:

后来一想是否跟TOMCAT的编码格式设置有关,如果TOMCAT设置了编码格式就不用代码特殊处理了,然后

在tomcat的 server.xml 找到

URIEncoding="UTF-8"/>设置8080端口的地方添加 URIEncoding="UTF-8" 重启tomcat问题依旧。


4、配置Apache编码格式

后来一下不对我是通过Apache来访问的tomcat 会不会跟Apache的编码格式设置也有关系呢,(可以单独访问TOMCAT、再通过访问Apache来确认哪里的问题

于是找到在Apache的配置文件httpd.conf中 添加 AddDefaultCharset utf-8 重启Apache还是不起作用~,(这种方法不推荐,因为服务器上很可能有其他编码的网站存在,所以可以使用AddDefaultCharset off来关闭默认文件编码,服务器依靠html文件投中设置的语言来决定编码。);

另外在设置Apache编码格式的时候不同的版本添加方式不一样,网上说找到AddDefaultCharset这一行来修改但是 我的2.4的Apache里面并没有找到,只能自己直接在末尾给加上 ,另外有的通过AddLanguage、AddCharset来添加,因为不起作用也没确认是否都好用。

后来想到之前项目也出现过类似的问题因为Apache跟tomcat集成的原因导致都设置了编码格式都不好用的情况,因为做了负载均衡,这里通过tomcat的8009端口来做的负载,所以通过Apache访问tomcat其实应该走的8009端口,所以在设置8009端口的标签的地方设置编码格式,即在

URIEncoding="UTF-8" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 处添加编码设置,重启tomcat,OK问题解决!!


你可能感兴趣的:(服务器)