【问题标题】:Ajax to Servlet, URI encoded query stringAjax 到 Servlet,URI 编码的查询字符串
【发布时间】:2013-09-25 13:16:30
【问题描述】:

我有一个在 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 表单上的序列化方法发出 ajax 请求(get 和 post)时,Servlet 无法检索特殊的 utf-8 字符。

也许是因为它需要UTF-8 并获得 URL 编码字符串?有没有人对此有任何提示?

【问题讨论】:

    标签: java ajax servlets utf-8


    【解决方案1】:

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

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

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

    您现在应该知道为什么该属性被完全如此调用:http-equiv,就像在“HTTP 等价物”中一样。

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

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

    或者,如果您打算将它应用到 webapp 的所有 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 请求,并且您使用例如正确的 URI 编码参数。 $.serialize()encodeURIComponent()

    另见:

    【讨论】:

    • 不要使用 JSP 生成 HTML 输出。在 Servlet 中使用(或滥用)PrintWriter 来打印 html 代码。奇怪的是,当我使用 $.ajax 中的数据对象在参数中指定特殊的 UTF-8 字符时,它可以工作,但不能使用 $.serialize () 函数。
    • 更准确地说:不要使用 JSP 来生成 ajax 响应。是的,同意这部分。另见例如stackoverflow.com/questions/4112686/…。至于具体问题,显然物理JSP文件本身没有使用UTF-8保存。
    【解决方案2】:

    执行jQuery.ajax时使用此contentType:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多