javaweb 过滤器init()函数调用两次的问题

J2EE 码拜 9年前 (2016-03-12) 1372次浏览
package com.jikexueyuan.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
 * Servlet Filter implementation class EncodingFilter
 */
@WebFilter("/EncodingFilter")
public class EncodingFilter implements Filter {
	private String charEncoding=null;
    /**
     * Default constructor. 
     */
    public EncodingFilter() {
        // TODO Auto-generated constructor stub
    
    }
    
	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		charEncoding=fConfig.getInitParameter("encoding");

	//	if(charEncoding==null)
		//{
			System.out.println("EncodingFilter init函数开始");
			System.out.println(fConfig.getInitParameter("encoding"));
			//throw new ServletException("EncodingFilter编码设置为空");
	//	}
		System.out.println("EncodingFilter init函数结束");
	}
	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		if(!charEncoding.equals(request.getCharacterEncoding())){
			request.setCharacterEncoding(charEncoding);
		}
		response.setCharacterEncoding(charEncoding);
		chain.doFilter(request, response);
	}
	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}
}

控制台输出看图
javaweb 过滤器init()函数调用两次的问题
init()被调用了两次
下面是web.xml部分配置信息

  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.jikexueyuan.filter.EncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
解决方案

40

建议你回去研究下注解,为啥会有注解的出现,一开始全用的xml配置,然后两者之间的关系。再看看你的Filter上@WebFilter(“/EncodingFilter”)和你web.xml中的filter配置。你不觉得tomcat在启动的时候会创建两个filter吗?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明javaweb 过滤器init()函数调用两次的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)