问题描述:
做一个字符编码过滤器.注册xml后,Tomcat启动web项目提示如下错误信息 :
org.apache.catalina.core.StandardContext.startInternal 一个或多个筛选器启动失败。
将web.xml
中的注册信息注释项目能正常运行,所以怀疑是过滤器的问题
CharacterEncodingFilter.java
package com.shme.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @Desc 字符编码过滤器
*/
public class CharacterEncodingFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter过滤器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//设置utf-8
request.setCharacterEncoding("utf-8");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("CharacterEncodingFilter过滤器销毁");
}
}
web.xml (3.1版本)
<!--字符编码过滤器-->
<filter>
<filter-name>charset</filter-name>
<filter-class>com.shme.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
解决办法 :
原因 :
使用Maven创建项目,IDEA部署到Tomcat服务器时,在本人的开发环境中会有几率遇到不编译java
文件夹下的java源文件,导致tomcat在部署项目时, Filter需要优先启动,在web.xml中寻找映射时,项目文件中Filter实现类没有被编译,所以才会报错.
解决办法 :