【问题标题】:JSP/GlassFish: how to setup UTF-8 encoding correctlyJSP/GlassFish:如何正确设置 UTF-8 编码
【发布时间】:2015-01-02 10:09:06
【问题描述】:

我正在寻求帮助以将堆栈中的所有层都转换为 UTF-8 编码。

我发现了这篇不错的文章:

http://www.javapractices.com/topic/TopicAction.do?Id=206

描述我需要担心编码的 3 个地方。由于我的 (1) Oracle 数据库当前设置为 UTF-8,因此 (2) 浏览器和 (3) 服务器需要担心。

我也找到了这篇详细的文章

http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#JSPServletRequest

我试图在下面遵循,但有一些关于实施的新手问题。

为了解决浏览器问题,我确保在每个 JSP 页面的顶部包含以下内容:

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

(参考见here)。

为了解决服务器问题,在发出 request.getParameter()request.getAttribute() 语句之前,我确保在 Java servlet 和 JSP 页面中包含以下行:

request.setCharacterEncoding("UTF-8");

由于我使用的是 GlassFish 3.1.2,我知道它默认不使用 UTF-8,所以我需要以某种方式手动设置它。

我看到很多网站都在谈论一个名为glassfish-web.xml 的文件。这是正常 glassfish 安装的一部分吗?我不知道在哪里可以找到它。我一直在为我的 Web 应用程序使用 WEB-INF 文件夹中的 web.xml 文件。有人可以帮我弄清楚我是否需​​要修改这个web.xml 文件,还是需要找到或创建一个名为glassfish-web.xml 的新文件来配置glassfish 的编码?

我的web.xml 文件开头为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> 
...

对于 JSP/servlet 请求,我在 web.xml 文件中包含以下行

<parameter-encoding default-charset="UTF-8"/>

可以放入web.xml 文件吗?或者,它是否需要进入一些glassfish-web.xml 文件?

对于 JSP/servlet 响应,我将以下内容放入我的 web.xml 文件中(请参阅接受的答案 here):

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

我假设这些行只是在&lt;web-app&gt;&lt;/web-app&gt; 之间插入。但是,让我知道他们是否应该改为进入其他描述符(例如 &lt;glassfish-web-app&gt;&lt;/glassfish-web-app&gt;)?

我还在 JSP &lt;head&gt; 部分中添加了以下内容:

<meta http-equiv="content-type" content="text/html; charset=utf-8">

有用的参考资料:

How to get rid of WARNING: PWC4011: Unable to set request character encoding to UTF-8

https://stackoverflow.com/tags/servlet-filters/info

https://wikis.oracle.com/display/GlassFish/FaqHttpRequestParameterEncoding

【问题讨论】:

    标签: java servlets utf-8 character-encoding glassfish


    【解决方案1】:

    glassfish-web.xml 是您可以在WEB-INF 文件夹中创建的文件。对于 Glassfish 3.x,它必须看起来类似于:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
    <glassfish-web-app>
        <jsp-config>
        </jsp-config>
        <parameter-encoding default-charset="UTF-8" />
    </glassfish-web-app>
    

    你是对的,参数编码设置必须在这个文件中,而不是在web.xml :)

    另请参阅:

    【讨论】:

    • 谢谢@unwichtich,那么这两个文件都必须存在于WEB-INF文件夹中是否正确(即web.xmlglassfish-web.xml)?另外,我是否需要将 GlassFish 配置为在创建此 glassfish-web.xml 文件后查找它,还是 GlassFish 会自动找到它?
    • 如果您不必将 glassfish-web.xml 用于某些 Glassfish 特定的配置属性(如默认编码),则实际上并不需要它。如果将文件放在 WEB-INF 文件夹中,文件会自动扫描,请确保在重新部署之前清理并构建您的项目:)
    • 哦,对不起,我忘了这也是必需的。我更新了我的答案。
    猜你喜欢
    • 2011-07-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多