如何将页面编码包含到所有 jsp 页面

How to include page encoding to all the jsp page

我已将 <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 包含在一个 jsp 页面中,它可以正确显示法语字符。 但我想将页面编码包含在所有 jsp 页面中。 在 web.xml 我包括了

<jsp-config>
      <jsp-property-group>
      <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
      </jsp-property-group>
 </jsp-config>

但它适用于 tomcat7,我使用的是 tomcat6。

还有其他解决办法吗?

如果您的参数在使用 Tomcat 时不是 UTF-8 编码的,请尝试像这样调整 Tomcat 的 server.xml 中的连接器配置:
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

您可以在 web.xml 中定义一个新的过滤器并在那里修改您的答案。

例如,您可以将其放入 web.xml 中:

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.example.EncodingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*.jsp</url-pattern> 
    <!-- or any pattern you like to excluse non-jsp resources -->
</filter-mapping>

然后像这样创建一个 com.example.EncodingFilter class :

public class EncodingFilter implements javax.servlet.Filter {

    // init, destroy, etc. implementation

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException
    {
        response.setCharacterEncoding("utf-8");
        chain.doFilter(request, response); // pass request to next filter
    }
}

您还可以在 setCharacterEncoding() 调用周围添加测试以仅过滤特定 URI 或排除例如非 HTML jsp 或特定参数,例如 JSP 如果提供 URL 参数 format=PDF 则输出 PDF :

if (!request.getQueryString().contains("format=PDF") {
        response.setCharacterEncoding("utf-8");
}
chain.doFilter(request, response); // pass request to next filter

您可以使用元标记而不是在所有 jsp 文件或 web.xml 中添加页面编码。如果你有一个共同的 .jsp 文件包含

另一种对所有页面应用编码的方法是使用过滤器。

public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
            request.setCharacterEncoding(encoding);
    //                response.setContentType("text/html;charset=UTF-8");
                    response.setCharacterEncoding(encoding);
            filterChain.doFilter(request, response);

        }

        public void init(FilterConfig filterConfig) throws ServletException {
            String encodingParam = filterConfig.getInitParameter("encoding");
            if (encodingParam != null) {
                encoding = encodingParam;
            }
        }

在 web.xml

中注册此过滤器