1

我的问题是,在 Java 中,我有机会将用户重定向到其他地方,其他地方是用户可定义的。代码如下所示:

response.sendRedirect(redirectURL). 我的重点是变量redirectURL 中表示的字符串。我的理解是这样的,指定 response.setCharacterEncoding 会影响写入响应编写器的内容,而不影响 sendRedirect 的内容。通过在连接器上添加 URIEncoding=,在基于 tomcat 的容器中,应该处理 URL 的路径是简体中文、日文或非 ascii 字符但它没有的情况,这似乎是合理的。我的部分问题是为什么。

这里有很多回复说明使用 URLEncode。但是在 issue 4571346 如何编码 URL 以避免 java 中的特殊字符

Wyzard 声明不应该使用,而是

  1. 创建一个 URI 对象
  2. 通过 toASCIIString 创建正确的 URL 字符串。

在我的示例用例中,这可以正常工作,尽管此代码需要在 every 之前执行response.sendRedirect(),这很多。

随着越来越多的应用程序在全球范围内使用,我看到这个问题有效地渲染了直接 HTTPResponse 方法 sendRedirect 的不足,因为它本身可能无法正常工作。

我参考了处理应用程序中的国际化域名的 RFC3490,它讨论了 toASCII 作为两个操作之一,另一个是 toUnicode。

那么,为什么连接器上的 URIEncoding= 不处理这个问题,应该这样吗?是否有更首选的方法来处理路径国际化的 URL?我只是相信,通过关注点分离,这个问题是并且应该是容器问题,而不是应用程序问题。我希望这将为讨论这个问题提供一个论坛,而不是 HTML,不是表单,不是 URL 本身以外的任何东西。

4

0 回答 0