【问题标题】:Override tomcat connector URIEncoding覆盖 tomcat 连接器 URIEncoding
【发布时间】:2014-08-26 15:51:54
【问题描述】:

我开发了一个应用程序,该应用程序部署到一个也托管其他应用程序的 tomcat 实例。为此,端口 80 上的连接器将其 URIEncoding 设置为“UTF-8”。我想找到一种方法来为我的 servlet 覆盖此设置,而无需在另一个端口上指定另一个连接器。我试过使用tomcat过滤器来设置过滤器如下:

@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
        final FilterChain filterChain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    filterChain.doFilter(request, response);
}

但它不会改变任何东西。我的 ISO-8859-1 编码字符串在进入 servlet 时包含意外字符。

【问题讨论】:

    标签: java servlets utf-8 tomcat6 iso-8859-1


    【解决方案1】:

    ServletRequest#setCharacterEncoding(String) 方法仅设置用于请求正文的编码。您无法从 Servlet API 中使用任何方法来声明请求 URI 的编码。这是特定于 servlet 容器的。使用 Tomcat,您需要在 <Connector> 级别执行此操作。

    总是有 useBodyEncodingForURI 配置元素,你可以在 <Connector> 中使用 setCharacterEncoding 来做你想做的事。见here

    【讨论】:

    • 感谢您的洞察力。但是,我想解码是由tomcat在某处执行的。如果我能找到哪里,也许我可以以某种方式覆盖它?
    • @MarkTielemans 这将需要克隆所有 Tomcat 并重新编写/部署您自己的版本。没有别的,外部的,你可以做的。
    • 好的,谢谢!遗憾的是,应用程序无法自行决定使用哪种编码,以防多个应用程序在一个环境中运行,或者应用程序并不总是知道它部署到哪个 tomcat 实例。
    猜你喜欢
    • 2021-10-08
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2021-04-24
    • 2017-03-23
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多