Java JSP:can';t了解如何为GlassFish 3.1.2响应设置UTF-8
我正在使用GlassFish 3.1.2,每次访问JSP页面时都会看到以下警告: PWC4011:无法从将请求字符编码设置为UTF-8 context/myapp,因为已读取请求参数, 或已调用ServletRequest.getReader() 我的JSP文件以以下内容开头:Java JSP:can';t了解如何为GlassFish 3.1.2响应设置UTF-8,java,jsp,encoding,utf-8,glassfish,Java,Jsp,Encoding,Utf 8,Glassfish,我正在使用GlassFish 3.1.2,每次访问JSP页面时都会看到以下警告: PWC4011:无法从将请求字符编码设置为UTF-8 context/myapp,因为已读取请求参数, 或已调用ServletRequest.getReader() 我的JSP文件以以下内容开头: <%@page pageEncoding="UTF-8"%> 我的WEB-INF/WEB.xml文件是: <?xml version="1.0" encoding="UTF-8"?> <!
<%@page pageEncoding="UTF-8"%>
我的WEB-INF/WEB.xml
文件是:
<?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>
<parameter-encoding default-charset="UTF-8"/>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
</glassfish-web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
但我不知道如何解决这个问题
我的web.xml
使用Servlet2.5,我相信这就是JSP2.1(我知道JSP1.x不支持UTF-8,但我认为JSP2.1支持UTF-8)。我尝试从升级web.xml
文件开始
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
变得公正
personName = request.getAttribute("personName");
警告消失了。这是否意味着request.setCharacterEncoding(“UTF-8”)在发出request.getParameter()
之前,code>应该只出现在Java servlet中,而不出现在JSP页面中
更新2
我仍然在GlassFish server.log文件中看到一个编码警告,尽管这次它不是来自我的web应用程序:
[#| 2014-11-10T10:02:57.234-0800 |警告| glassfish3.1.2 | org.apache.catalina.connector.Request | | u ThreadID=57;| u ThreadName=Thread-2;| PWC4011:
无法从上下文中将请求字符编码设置为UTF-8,
因为已读取请求参数,或者
ServletRequest.getReader()已被调用|#]
不确定这是从哪里来的,也不知道如何修复,但我将通过添加GlassFish管理控制台-Dfile.encoding=UTF8
中的选项来修改GlassFish JVM编码:Configurations>server config>JVM Settings>JVM Options
,然后重新启动服务器
我还添加了如下所示的字符集筛选器:。虽然它是为Tomcat制作的,但我希望它对GlassFish仍然有效。解决方案:
创建/编辑文件glassfish-web.xml(文件夹web-INF):
保留生成的servlet类的java代码的副本。
看看这个:
request.setCharacterEncoding("UTF-8");
personName = request.getAttribute("personName");
personName = request.getAttribute("personName");
<?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 error-url="">
<class-loader delegate="true"/>
<!-- Change the default character encoding from ISO-8859-1 to UTF-8 -->
<parameter-encoding default-charset="UTF-8"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
</glassfish-web-app>