Ajax到Servlet,URI编码的查询字符串

时间:2013-09-25 13:16:31

标签: java ajax servlets utf-8

我有一个在Apache Tomcat上运行Servlet 2.4的java web项目。

在我的servlet中,我设置了request.setCharacterEncoding("utf-8")并使用HTML头标记中的<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

项目中的所有文件(Java,JS等)都将文本文件编码设置为utf-8。我还添加了一个映射到web.xml中所有Servlet的过滤器,它将字符编码设置为utf-8

当我向使用jQuery的web服务器和html表单上的serialize方法发出ajax请求(get和post)时,Servlet无法检索特殊的utf-8个字符。

也许是因为它期望UTF-8并获取URLencoded字符串?有没有人有任何关于此的提示?

2 个答案:

答案 0 :(得分:2)

  

使用HTML标头中的<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

当HTML页面本身由真正的HTTP请求提供服务时,HTML头中的

http-equiv标记被忽略。而是使用HTTP响应头中提供的信息。元http-equiv标记仅在未通过http:// URI作为HTTP资源获取页面时使用,例如本地磁盘文件系统通过file:// URI,这可能发生在enduser将获取的HTML文件保存到磁盘文件系统,并通过文件浏览器从那里重新打开。

您现在应该可以理解为什么要调用该属性:http-equiv,如“HTTP等效”。

因此,您需要在真实的HTTP响应头中设置内容类型和字符编码。这可以通过将以下行放在JSP的顶部来完成:

<%@page pageEncoding="UTF-8"%>

或者,如果您打算在一个地方将所有JSP应用于您的webapp,而不是对所有文件进行同步,那么请将以下内容放在webapp的web.xml中:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

请注意,我假设您正在以正确的方式发送jQuery ajax请求,并且您使用例如正确的URI编码参数。 $.serialize()encodeURIComponent()

另见:

答案 1 :(得分:0)

执行jQuery.ajax时使用此contentType:

contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')

此处有更多详情:http://api.jquery.com/jQuery.ajax/