gpt4 book ai didi

java - 将 Tomcat 5.5 配置为 UTF-8 对所有 sendRedirect() 重定向进行编码?

转载 作者:行者123 更新时间:2023-12-02 11:20:13 24 4
gpt4 key购买 nike

我们正在构建的产品的一个要求是,其 URL 端点对于用户的母语具有语义意义。这意味着我们需要 UTF-8 编码的 URL 来支持所有字母表。

我们也不希望为我们支持的每个应用程序服务器和版本提供安装配置文档,因此如果我们能够在代码中完成此任务,那就太好了。这可能是不可能的,因为当 Servlet 收到请求时,它已被应用服务器编码等。

通过使用以下命令重新构建请求的路径信息,我已经实现了此功能(对于我使用 ISO-Latin 非美国 ASCII 字符的第一个用例):

String pathInfoEncoded = new String(httpServletRequest.getPathInfo().getBytes(), "UTF-8");

然后解析它。

但是,在使用 sendRedirect() 从 POST 重定向到 GET 后,这不起作用。请求的路径已经转义(因此 ö 被编码为 %F6),并且我上面的方法不起作用。

所以我想我的问题是我的做法是错误的吗?如果是这样,我的无知的解药是什么? :)

更新:找到解决方案。问题是 Servlet API 在发送重定向之前对 URL 编码有一些奇怪的行为。在调用 sendRedirect() 之前,您必须进行 URL 编码(转义 UTF-8 字符)。 encodeRedirectURL() 方法不会为您执行此操作。

本页讨论它:http://www.whirlycott.com/phil/2005/05/11/building-j2ee-web-applications-with-utf-8-support/

最佳答案

需要研究和实验的一些事情:

  • 查看 ./conf/server.xml 文件并确保连接器的 URIEncoding 属性设置为“UTF-8”。

例如:

<Connector port="8080" 
protocol="HTTP/1.1"
URIEncoding="UTF-8"/>
  • 使用某种基于浏览器的工具(例如:TamperData for FireFox)来查看浏览器向服务器发送的内容 - 它很可能会为您转义。如果是这种情况,您可以使用URL.decode()它在服务器上。
  • 不要使用 Response.redirect(),而是手动设置 header 和响应代码。

例如:

response.setHeader("Location", myUtf8unencodedUrl);
response.setStatus(response.SC_MOVED_TEMPORARILY);

没有 promise ,但如果是我的话,这就是我会尝试的。 :)

关于java - 将 Tomcat 5.5 配置为 UTF-8 对所有 sendRedirect() 重定向进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/846409/

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