在用mapguide做webgis应用的时候,再次遇到中文化问题。
场景是这样的:
由于某种需求的原因,有个请求必须用get的方式传送,而且url参数中含有中文。
首先,我在发送请求之前,用encodeURI将中文参数编码了。
代码示意如下:
var params = ....
params = encodeURI(params);
url = url + '&' + params;
...
然后,在tomcat端接收到参数的时候,通过URIDecoder.decode来将参数解码。
代码如下:
public static Map<String, String> decodeRequestToMap(HttpServletRequest request) {
Map<String, String> m = new HashMap<String, String>();
Enumeration<String> e = request.getParameterNames();
try {
while(e.hasMoreElements()) {
String k = e.nextElement();
String value = URLDecoder.decode(request.getParameter(k), "UTF-8");
m.put(k, value);
}
} catch (UnsupportedEncodingException e1) {
if (log.isErrorEnabled()) {
log.error("不可能不支持UTF-8的啊!", e1);
}
}
return m;
}
另外有个Filter将request和response的charactorEncoding设置为UTF-8。
代码如下:
request.setCharacterEncoding(this.charactorEncoding);
response.setCharacterEncoding(this.charactorEncoding);
chain.doFilter(request, response);
但是我在调试的时候发现在filter起作用之前,中文参数已经是乱码了,而其他通过post方式传送的中文参数不受影响。这样,我在tomcat端作的所有工作都是白费。
问题在那里呢?我在网上google了一把,有人说在apache的httpd.conf里面,要把AddDefaultCharset 设置成这个样子:AddDefaultCharset off。
原文大概如此:
引用
服务器端:
======
修改httpd.conf (在Redhat中放置的位置为/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off
这种方式关掉了服务器的默认语言的发送,这样仅凭html文件头中设置的语言来决定网页语言。
很多文章都说通过修改为 AddDefaultCharset GB2312 把缺省语言改成GB2312来解决中文乱码,确实GB2312内码的网页可以正常显示了,但这并非万全之策。因为当你的网页内码不是GB2312,就算你在网页用下面的meta指定了正确的语言,如ISO8859-1,也不会解码为ISO8859-1,因为Apache已经先你一步将GB2312指定为网页的语言了
可是我在mapguide的apache里面,发现它根本就没有使用这个配置。
我尝试给apache加上AddDefaultCharset ISO-8859-1,没有。改成AddDefaultCharset UTF-8,也没用。改成AddDefaultCharset off,还是没有用。
这么看来,问题不在apache的配置这里了。
那么问题在那里呢??!我晕掉了。
后来我想起了一个问题,请求是apche转发给tomcat的,那么会不会是apache转到tomcat的时候,出现的乱码呢?
于是,我把tomcat配置转接接口的配置改了一下
代码如下:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
后面这个URIEncoding="UTF-8"就是我加上去的东西,原来是没有这个的。
然后测试。果然,乱码没有了。
分享到:
相关推荐
本资料包“Tomcat跨域请求资源解决方案.zip”显然是针对这个问题提供了一个具体的解决方案,主要聚焦于如何在Apache Tomcat服务器上配置以允许跨域请求。 Tomcat是Java Servlet容器,广泛用于部署Java Web应用程序...
解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助
Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...
在学习这些解决方案时,可以参考“Tomcat集群资料”中的文档,它们通常包含配置示例、最佳实践和常见问题解答,帮助你更好地理解和实施session共享策略。同时,理解负载均衡原理、分布式系统设计以及安全性问题也是...
总结,解决Tomcat5中的中文问题,关键在于统一请求处理的字符编码,并确保服务器端和客户端的编码一致。通过上述两种方法,可以有效地解决POST和GET请求的中文乱码问题,实现中文数据的正常显示。
Tomcat 防止跨站请求伪造(CSRF)机制浅析 在 Web 应用开发中,跨站请求伪造(CSRF)是一种常见的安全威胁。跨站请求伪造攻击是指攻击者诱骗受信任用户访问恶意网站,从而使得恶意网站能以用户身份对受信任网站执行...
通过以上步骤,可以有效地解决Tomcat服务器在处理跨域请求时遇到的问题。需要注意的是,尽管跨域支持可以提高应用的灵活性,但也可能带来潜在的安全风险。因此,在实施跨域策略时,建议仔细考虑每一步的安全性,以...
本文总结了Tomcat 4.0 和 4.1 版本下常见的中文问题及其解决方案,包括JSP页面中文显示问题、POST和GET方式提交表单中文乱码问题以及Cookie中中文字符处理问题。通过以上方法,可以有效解决Tomcat中文环境中出现的...
3. **设置ProxyPass**:在Apache配置文件中,使用`ProxyPass`和`ProxyPassReverse`指令定义如何将特定URL请求转发到Tomcat。例如: ``` ProxyPass /app http://localhost:8080/app ProxyPassReverse /app ...
tomcat get提交中文乱码解决方案,修改tomcat server.xml 中以下为
### Tomcat中文问题之完美解决 #### 背景与问题描述 在使用Tomcat部署Web应用程序时,中文字符的编码处理常常会遇到乱码的问题。这种现象在使用GET或POST方式传递包含中文字符的数据时尤为明显。文章指出,在...
Nginx+Tomcat搭建负载均衡是实现网站请求的分发的常见解决方案。以下是该解决方案的详细知识点说明: 一、负载均衡的概念 负载均衡是指将网络请求分配到多个服务器上的技术,以提高服务器的响应速度和可用性。负载...
### 解决Tomcat中文乱码问题 在使用Tomcat服务器部署Web应用时,经常会遇到中文乱码的问题。本文将详细探讨这一现象的原因,并提供一种有效的解决方案。 #### 问题背景 在Tomcat环境下运行Web应用程序时,如果...
【标题】:“Tomcat配置解决跨域问题” 在Web开发中,跨域(Cross-Origin)是一种常见的安全限制,它阻止浏览器从一个源加载资源到另一个不同的源。这主要是为了防止恶意脚本通过注入来窃取数据。然而,在进行前后...
本文将深入探讨这一问题,并提供一系列可能的解决方案,帮助开发者们有效应对Eclipse中Tomcat启动失败的情况。 ### 一、问题分析 #### 1.1 Tomcat版本不兼容 Tomcat与Eclipse之间的兼容性问题是最常见的原因之一。...
基本结构 首先要明白两个基本知识点: ...那么问题就来了,如果多个系统都要单独使用一个二级域名的话,直接修改tomcat的配置会导致...https请求发送到nginx,nginx将请求代理到tomcat nginx解决了单ip多域名的问题,多站
综上所述,通过合理设置JSP页面编码、配置请求过滤器以及进行必要的编码转换,可以有效解决Tomcat环境下中文乱码的问题。在实际应用中,还需要根据具体情况选择合适的解决方案,并注意保持前后端编码的一致性。
总结,解决Tomcat的跨域问题主要依赖于CORS机制,通过在服务器端设置合适的响应头来允许特定的跨域请求。对于不同的应用场景,可以选择合适的方法,如使用Tomcat的CORS Filter或Spring Boot的CORS配置,同时要注意...
Tomcat 常见问题及解决方法 Tomcat 是一个流行的开源 Web 服务器和 Servlet 容器,广泛应用于 Web 开发和部署中。然而,在使用 Tomcat 的过程中,开发者经常会遇到一些常见的问题,本文将列举一些常见的问题和解决...
无论是独立的html,还是其他程序生成的,如Servlet等,注意在最终的html的< head >和< /head >之间必须加入meta标签,用来指定html中输入字符的编码。