有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

可能是因为它需要UTF-8并得到URLencoded字符串?有人对此有什么建议吗


共 (1) 个答案

  1. # 1 楼答案

    using the <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> in HTML head tag.

    当HTML页面本身由真正的HTTP请求提供服务时,HTML头中的Meta http-equiv标记被忽略。而是使用HTTP响应头中提供的信息。meta http-equiv标记仅在页面未通过http://URI作为HTTP资源获取时使用,例如通过file://URI获取本地磁盘文件系统,当最终用户将获取的HTML文件保存到磁盘文件系统并通过文件资源管理器从那里重新打开时,可能会发生这种情况

    现在,您可能应该知道为什么该属性的调用方式与此完全相同:http-equiv,就像在“HTTP等效”中一样

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

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

    或者,如果您打算在一个地方将其应用于webapp的所有JSP,而不是在所有文件上复制粘贴相同的JSP,那么请将以下内容放入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请求,并且使用$.serialize()encodeURIComponent()对参数进行了正确的URI编码

    另请参见: