gpt4 book ai didi

tomcat - Tomcat 8 中的 Servlet 无法正确解码 ISO-8859-1 编码的 URL

转载 作者:行者123 更新时间:2023-11-28 23:26:18 25 4
gpt4 key购买 nike

我有一个像这样简单的 Servlet:

public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("processedName", request.getParameter("name"));
request.setAttribute("processedQueryString", request.getQueryString());
request.getRequestDispatcher("index.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

我的index.jsp是这样的:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Title</title>
</head>
<body>
<form action="MyServlet" method="get">
Name: <input type="text" name="name">
<input type="submit" value="Submit">
</form>
<br>
After: <%=request.getAttribute("processedName") %>
<br>
Query String: <%=request.getAttribute("processedQueryString") %>
</body>
</html>

如果我在表单中输入 Thomás 并提交,则会打印 Thom?s

浏览器中的 URL 和 JSP 中的查询字符串均显示 name=Thom%E1s

浏览器正确地将 ISO-8859-1 á 字符编码为 %E1,但由于某些原因 .getParameter 不是正确解码。

当人们尝试提交非 ISO-8859-1 字符(与 á 不同)时,我在这里看到了很多这样的帖子。 Tomcat 8 不应该使用 ISO-8859-1 作为解码的默认值吗?

奇怪的是,如果我将 accept-charset="UTF-8" 放入我的表单中,它会起作用。如果我将方法更改为 method="post" 它会起作用。如果我混合使用 accept-charset="UTF-8"method="post" 它不起作用(但现在 Thomás 已打印!)。

就好像 Tomcat 在 get 方法中等待 UTF-8,在 post 方法中等待 ISO-8859-1。

最佳答案

tomcat 8 中的默认 URIEncoding 是 UTF-8,除非属性 org.apache.catalina.STRICT_SERVLET_COMPLIANCE 设置为 true,则它是 ISO-8859-1 .

在您的情况下,您可以尝试添加以下内容:

 URIEncoding="ISO-8859-1"

在您的 server.xml 文件中连接器元素。

参见 tomcat documentation了解所有详情。

关于tomcat - Tomcat 8 中的 Servlet 无法正确解码 ISO-8859-1 编码的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36579973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com