JSP/GlassFish:如何正确设置UTF-8编码

use*_*688 7 java servlets glassfish utf-8 character-encoding

我正在寻求帮助,将堆叠中的所有图层都转换为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"%> 
Run Code Online (Sandbox Code Playgroud)

(供参考,见这里).

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

request.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)

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

我见过很多网站都在谈论一个名为的文件glassfish-web.xml.这是普通glassfish的一部分吗?我不知道在哪里找到它.我一直在使用web.xml我的WEB-INF文件夹中的文件作为我的Web应用程序.有人可以帮我弄清楚我是否需​​要修改这个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> 
...
Run Code Online (Sandbox Code Playgroud)

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

<parameter-encoding default-charset="UTF-8"/>
Run Code Online (Sandbox Code Playgroud)

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

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

<jsp-config>
   <jsp-property-group>
       <url-pattern>*.jsp</url-pattern>
       <page-encoding>UTF-8</page-encoding>
   </jsp-property-group> 
</jsp-config>
Run Code Online (Sandbox Code Playgroud)

我假设这些线只插入<web-app>和之间</web-app>.但是,让我知道他们是否应该进入其他描述符(例如<glassfish-web-app></glassfish-web-app>)?

我还在JSP <head>部分中添加了以下内容:

<meta http-equiv="content-type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

有用的参考:

如何摆脱警告:PWC4011:无法将请求字符编码设置为UTF-8

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

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

unw*_*ich 10

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>
Run Code Online (Sandbox Code Playgroud)

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

也可以看看: