java web设置过滤器

来源:互联网 发布:java判断质数的算法 编辑:程序博客网 时间:2024/06/10 09:51

今天在写一个编码过滤器demo的时候,写了一个特别简单的例子。

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;public class EncodeFilterTest implements Filter {private String encoding;public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(encoding);response.setCharacterEncoding(encoding);chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {this.encoding = filterConfig.getInitParameter("encoding");}}

web.xml

<servlet>  <servlet-name>EncodeFilterTest</servlet-name>  <servlet-class>com.encoding.EncodeFilterTest</servlet-class>  <init-param>  <param-name>encoding</param-name>  <param-value>utf-8</param-value>  </init-param>  </servlet>  <servlet-mapping>  <servlet-name>EncodeFilterTest</servlet-name>  <url-pattern>/*</url-pattern>  </servlet-mapping>

结果一直报错:

严重: Allocate exception for servlet EncodeFilterTestjava.lang.ClassCastException: com.encoding.EncodeFilterTest cannot be cast to javax.servlet.Servletat org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1146)at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:866)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)
网上查了好多,貌似没有人发生类似问题。

解决方法:自己web.xml中写错了,将<filter>写成了<servlet>

正确写法是:

<filter><filter-name>EncodeFilterTest</filter-name><filter-class>com.encoding.EncodeFilterTest</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>EncodeFilterTest</filter-name><url-pattern>/*</url-pattern></filter-mapping>


0 0