Maven无法转换为javax.servlet.Filter

Maven无法转换为javax.servlet.Filter,java,maven,tomcat,servlets,Java,Maven,Tomcat,Servlets,我开始使用maven开发一个项目,但当我启动它时,它说我的过滤器不能转换为javax.servle.Filter 这是一个例外: GRAVE: Exception starting filter FilterLogin java.lang.ClassCastException: it.tgi.cd.servlet.FilterLogin cannot be cast to javax.servlet.Filter at org.apache.catalina.core.Appli

我开始使用maven开发一个项目,但当我启动它时,它说我的过滤器不能转换为javax.servle.Filter

这是一个例外:

    GRAVE: Exception starting filter FilterLogin
java.lang.ClassCastException: it.tgi.cd.servlet.FilterLogin cannot be cast to javax.servlet.Filter
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
我按照建议使用了“提供”,异常消失,但现在当我尝试转到“localhost ecc..”时,出现了异常

   INFORMAZIONI: Starting ProtocolHandler ["http-bio-8080"]
ott 04, 2016 3:06:42 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [jsp] in context with path [/CDStore] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at org.apache.jsp.login_jsp._jspInit(login_jsp.java:31)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
我不知道这是否正常,但它仍然停留在“INFORMAZIONI:Starting ProtocolHandler[“http-bio-8080]”上

然后我转到localhost,异常消失

在WEB-INF/lib下,我没有任何jar文件。 这是我的构建路径


您正在将
javax.servlet api
jar文件打包到应用程序中。您应该使用Tomcat中可用的jar文件来避免ClassCastException

您可以将maven依赖项的范围更改为提供,以便在应用程序中不包含jar文件:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0-b01</version>
    <scope>provided</scope>
</dependency>
<dependency>
        <groupId>com.netflix.eureka</groupId>
        <artifactId>eureka-client</artifactId>
        <version>1.8.0</version>
        <scope>runtime</scope>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

javax.servlet
javax.servlet-api
4.0.0-b01
假如
1)在pom.xml中添加servlet依赖项,如下所示:

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.0.1</version>
   <scope>provided</scope>
</dependency>

javax.servlet
javax.servlet-api
3.0.1
假如
2)确保您的类路径中没有填充多个不同版本的
javax.servlet.Filter
类。

检查
/WEB-INF/lib
文件夹中是否存在
servlet api.jar
。您必须在
pom.xml
或您的
构建路径中添加依赖项,您的答案是正确的,但主要问题是,尽管我有另一个版本的tomcat7插件,但我仍试图使用它启动web应用程序。
因此,我对maven的不了解是说我必须使用tomcat插件(pom.xml中的tomcat7插件)运行web应用程序,因为我认为它应该这样做


该项目现在可以从tomcat运行配置中完美地启动它。我会向你竖起大拇指,为你在应用程序中添加的最后一个库添加一个排除项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0-b01</version>
    <scope>provided</scope>
</dependency>
<dependency>
        <groupId>com.netflix.eureka</groupId>
        <artifactId>eureka-client</artifactId>
        <version>1.8.0</version>
        <scope>runtime</scope>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

com.netflix.eureka
尤里卡客户
1.8.0
运行时
javax.servlet
servlet api

什么是
it.tgi.cd.servlet.FilterLogin
类?您可以添加过滤代码吗please@Berger在主postApache中添加Tomcat 7.x实现了Servlet 3.0I使用的“提供”和强制转换异常消失,我将Servlet-api.jar放入web inf/lib,然后放入“dipendences”(我使用intellij),现在它给了我路径为[/CDStore]的上下文中Servlet[jsp]的GRAVE:Servlet.service()在org.apache.jsp.login_jsp._jspInit(login_jsp.java:31)上引发了根本原因为java.lang.NullPointerException的异常[java.lang.NullPointerException]“此异常不同,请将整个堆栈跟踪放在问题中。请记住,lib文件夹或pom.xmlUpdated中应该只有一个servlet api jar。当您尝试访问未初始化的变量时,会发生nullPointerException。我认为它出现在`response.sendRedirect(“/login.jsp”);`或者
if(request.getSession().getAttribute(“用户”)!=null)
检查第31行代码这是login.java el_expressionfactory=\u jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory()的第31行;