【问题标题】:request.setcharacterencoding() method seems do nothing in the source coderequest.setcharacterencoding() 方法似乎在源代码中什么都不做
【发布时间】:2017-05-16 15:22:31
【问题描述】:

在一个servlet java类中,我输入request.setCharacterEncoding("utf-8"),然后我想看看这个方法在源代码中到底是什么,我用CTRL+左键输入方法的源代码
然后到ServletRequest接口,接口中方法的代码是

public void setCharacterEncoding(String env)
    throws java.io.UnsupportedEncodingException;

这肯定是一个空方法,因为ServletRequest 是一个接口。

我在哪里可以看到这个方法实际上做了什么来设置编码?

【问题讨论】:

  • 我建议使用调试器并设置断点,然后使用“step into”跳转到实现类。据我所知,“真实”类将由 servlet 容器提供,例如 tomcat、jetty 等。

标签: java http servlets jakarta-ee request


【解决方案1】:

此方法由servlet 容器实现。例如对于 Tomcat 8.5 实现驻留在 org.apache.catalina.connector.Request#setCharacterEncoding 看起来像:

public void setCharacterEncoding(String enc) throws UnsupportedEncodingException {
        if(!this.usingReader) {
            B2CConverter.getCharset(enc);
            this.coyoteRequest.setCharacterEncoding(enc);
        }
    }

如您所见,它只是验证编码名称并设置存储编码的内部请求实现字段。您可以在您的 servlet 容器源代码中搜索 implements HttpServletRequest 并查看实现。

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2015-10-29
    • 2012-09-12
    • 2011-03-17
    • 2017-09-11
    • 2018-08-05
    相关资源
    最近更新 更多