Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Tomcat中设置请求编码?_Java_Jsp_Tomcat_Servlets_Character Encoding - Fatal编程技术网

Java 如何在Tomcat中设置请求编码?

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-

我的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-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 server
web.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>