maven解决servlet-api-2.3冲突问题

本文介绍了一个Maven项目中出现的Servlet-API版本冲突问题,详细解释了问题产生的原因,并给出了具体的解决方法,包括排除commons-logging依赖中的servlet-api2.3以及指定使用servlet-api3.0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

最近在maven一程序打包发布,报错如下错误

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 23 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:
        org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
        org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
        org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

经分析, servlet-api.jar和tomcat出现冲突, 删除之,则ok。

然而奇怪的是,本人的项目是用Maven管理,而且用到了servlet3.0的技术,但是项目中用到servlet3.0的地方, 为什么打包发布后总是servlet-api-2.3。

解决方法:
网上都说servlet-api冲突是因为项目部署的时候WEB-INFO/lib下面的servlet-api和servlet中的servlet-api产生冲突,其实我的不然。因为我的项目是用maven管理的,在pom.xml中配置包依赖的时候配置了commons-logging包的依赖,而commons-logging包又依赖于servlet-api2.3,因此我认为servlet-api2.3把3.0版本给冲掉了。解决办法如下:

dependency>  
            <groupId>commons-logging</groupId>  
            <artifactId>commons-logging</artifactId>  
            <version>1.1.1</version>  
            <exclusions>  
                <exclusion>  
                    <groupId>javax.servlet</groupId>  
                    <artifactId>servlet-api</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  

        <dependency>  
            <groupId>org.mortbay.jetty</groupId>  
            <artifactId>servlet-api-2.5</artifactId>  
            <version>6.1.14</version>  
            <scope>provided</scope>  
        </dependency>  

或者:

<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>javax.servlet-api</artifactId>  
    <version>3.0.1</version>  
</dependency>  
<dependency>  
    <groupId>commons-logging</groupId>  
    <artifactId>commons-logging</artifactId>  
    <version>1.1.1</version>  
</dependency>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值