Java 为什么在使用RequestDispatcher时UTF-8不能在html页面中工作?如何修复它?
我有一个页面,UTF-8工作:Java 为什么在使用RequestDispatcher时UTF-8不能在html页面中工作?如何修复它?,java,html,servlets,encoding,utf-8,Java,Html,Servlets,Encoding,Utf 8,我有一个页面,UTF-8工作: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>:(</title> <link rel="stylesheet" href="font-awesome/css/font-awesome.min.css" type="text/css">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>:(</title>
<link rel="stylesheet" href="font-awesome/css/font-awesome.min.css" type="text/css">
<link href='http://fonts.googleapis.com/css?family=Varela+Round' rel='stylesheet' type='text/css'>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">
<link rel="stylesheet" href="css/login.css" type="text/css">
<link rel="stylesheet" href="css/creative.css" type="text/css">
</head>
<body>
<div class="text-center" style="padding:50px 0">
<div class="logo">Usuário ou email indisponíveis :(.</div>
</div>
</body>
</html>
在此之前,我做了:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
...
}
还有,这个问题没有答案
编辑:我已经改为响应。setCharacterEncoding(“UTF-8”)而不是请求,问题仍然存在。更正,您的问题是重定向问题,您可以检查一些解决方案,特别是提到使用的解决方案 通过在
webapp
部分中修改您的web.xml
<filter>
<filter-name>CharSet<filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
字符集
filters.SetCharacterEncodingFilter
编码
UTF-8
您还应该添加一个过滤器映射,以指定应用它的位置
<filter-mapping>
<filter-name>CharSet</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
字符集
*.html
经过几天的痛苦,我终于解决了这个问题
首先,我不熟悉Tomcat和Java中的Web开发,所以我不知道用dvhh的答案修改什么“Web.xml”文件(我已经检查过了,Tomcat默认在host manager文件夹中的Web-INF文件夹中有确切的过滤器)。然后,他说我必须在自己的web应用程序中进行更改,但是没有web.xml(所以我意识到我必须创建一个)。我发现可以在Netbeans中创建它,并且可以很容易地使用GUI添加过滤器,所以我做到了(同时,我从servlet源代码中删除了response.setCharacterEncoding(“UTF-8”)
)
但是,问题仍然存在。然后我才意识到显而易见的一点:“它在JAVA上运行”,所以我按下CTR+5在Netbeans中打开服务,转到服务器,右键单击Apache Tomcat,选择属性,转到平台并添加到VM选项:-Dfile.encoding=UTF-8
此外,web应用程序不能仅以filters.SetCharacterEncodingFilter
作为一级部署,我必须将其更改为org.apache.catalina.filters.SetCharacterEncodingFilter
结论:
- 必须将筛选器和筛选器映射正确添加到web.xml 您的web应用程序李>
- 必须使用
运行JVM-Dfile.encoding=UTF-8
curl-I从命令行检查服务器头中的编码吗http://server/path
,或通过web开发工具/web检查器。顺便说一下,您的代码设置的是请求编码,而不是响应编码。您只设置了请求正文的字符编码,而不是响应正文的字符编码。我已更改,问题仍然存在。RequestDispatcher忽略编码。这似乎是一个bug(在任何地方都没有解决方案)。抱歉修改了answe,为了适应您的问题,代码对重定向的目的地编码没有影响,更像是服务器/web应用程序配置问题。在“apache-tomcat-8.0.24”中的“webapps”文件夹中,有三个文件夹包含带有“web.xml”的文件夹“web-INF”其中包括:“根”、“主机管理器”和“管理器”。我已经将你的代码片段包含在所有的应用程序中,但问题依然存在(在“管理器”应用程序中,Tomcat不再构建该应用程序)。它应该是你自己的web应用程序的web.xml。我终于解决了这个问题,并添加了一个额外的答案来解释缺失的内容。非常感谢你的帮助!
<filter-mapping>
<filter-name>CharSet</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>