-->

编码过滤器,使用HTML的支杆工作只是:表单标签(encoding filter , struts

2019-09-22 08:24发布

我面对这个问题。 我有一个过滤器,设置请求根据过滤器的配置(例如,UTF-8)的字符编码。 这适用于使用Struts HTML编码形式:表单标签。 但是,如果我用普通的HTML表单标签,数据编码不正确。

这是在web.xml过滤器定义:

<filter>
    <filter-name>Encoding Filter</filter-name>
    <filter-class>EncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
 </filter>
 <filter-mapping>
    <filter-name>Encoding Filter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

这里的过滤器:

public class EncodingFilter implements javax.servlet.Filter {
private String encoding;
public void init(FilterConfig filterConfig) throws ServletException {
    this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    filterChain.doFilter(request, response);
}
public void destroy() {
}

}

Answer 1:

如果你使用Struts标签<html:form> ,省略了method属性则默认为POST。 如果您使用的是标准的HTML <form> ,省略了method属性则默认为GET。

Tomcat将处理您的POST和GET不同的参数:

POST:您的过滤器将被使用。 需要注意的是,如果它没有被客户端指定你真的应该只设置请求字符编码(您的过滤器始终将其设置为UTF-8)。 Tomcat的带有过滤器SetCharacterEncodingFilter.java做这个。

GET:Tomcat将使用ISO-8859-1作为默认的字符编码。 有指定如何GET参数有两种解释:

  • 设定元件上的URIEncoding属性server.xml中特定的东西(例如的URIEncoding =“UTF-8”)。
  • 坐落在server.xml中真正的元素有关的useBodyEncodingForURI属性。 这将导致连接器使用请求主体的编码GET参数。

这是所有在: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding



文章来源: encoding filter , struts working just when using html:form tag