如何将页面编码包含到所有 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
中注册此过滤器
我已将 <%@ 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
中注册此过滤器