Java 如何在Tomcat中设置请求编码?
我的Java webapp有问题 以下是index.jsp中的代码:Java 如何在Tomcat中设置请求编码?,java,jsp,tomcat,servlets,character-encoding,Java,Jsp,Tomcat,Servlets,Character Encoding,我的Java webapp有问题 以下是index.jsp中的代码: <%@page contentType="text/html" pageEncoding="UTF-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <% request.setCharacterEncoding("UTF-
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<% request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<form action="index.jsp" method="get">
<input type="text" name="q"/>
</form>
Res: <%= request.getParameter("q") %>
</body>
</html>
Tomcat服务器向我返回以下信息:
Content-Type: text/html;charset=UTF-8\r\n
但如果我在表单中发送“é”(%C3%A9,UTF-8),则会显示“Ô)
据我所知,浏览器发送一个用UTF-8编码的“é”(即%C3%A9)
但服务器将其解释为ISO-8859-1。因此,将%C3解码为Ã,将%A9解码为©,然后将UTF-8编码的响应发回
在代码中,应使用UTF-8对请求进行解码:
request.setCharacterEncoding("UTF-8");
但是,如果我发送此url:
http://localhost:8080/kjd/index.jsp?q=%E9
“%E9”用ISO-8859-1解码,并显示一个“E”
为什么这不起作用?为什么使用ISO-8859-1对请求进行解码
我已经在Tomcat6和7、Windows和Ubuntu上试用过了仅设置请求正文的编码(POST请求使用该编码),而不设置请求URI的编码(GET请求使用该编码) 您需要在Tomcat的
/conf/server.xml
的
元素中将URIEncoding
属性设置为UTF-8
,以使Tomcat将请求URI(和查询字符串)解析为UTF-8。这实际上默认为ISO-8859-1。另见
或确保使用与body1相同的编码解析URI:
另见:
- -
1名来自(我的): 为了与Tomcat 4.1.x兼容,提供了此设置,其中 在contentType中指定的编码,或使用 参数也使用Request.setCharacterEncoding方法 从URL。默认值为false
请去掉JSP中的那些脚本。
request.setCharacterEncoding(“UTF-8”)代码>在错误的时刻被调用。只要正确使用Servlet来处理请求,就太晚了。你更愿意用a来做这个。response.setCharacterEncoding(“UTF-8”)代码>部分已经由JSP顶部的pageEncoding=“UTF-8”
隐式完成
我还想用${param.q}
替换老式的
脚本,或者用XML转义${fn:escapeXml(param.q)}
来防止。您只需要取消conf/web.XML(Tomcat serverweb.XML
)中代码下面部分的注释,这些代码过滤所有请求并转换为UTF-8
<!-- A filter that sets character encoding that is used to decode -->
<!-- parameters in a POST request -->
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- The mapping for the Set Character Encoding Filter -->
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
setCharacterEncodingFilter
org.apache.catalina.filters.SetCharacterEncodingFilter
编码
UTF-8
setCharacterEncodingFilter
/*
就这样。在tomcat中工作出色可能会对你有所帮助;浏览一下,看看您是否可以进行任何更改。请注意,并非所有浏览器都乐于发送UTF-8查询参数,查看您的IE:
<!-- A filter that sets character encoding that is used to decode -->
<!-- parameters in a POST request -->
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- The mapping for the Set Character Encoding Filter -->
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>