• 关于程序中使用servlet-api.jar和jsp-api.jar与服务器lib包jar包冲突的问题


    一、maven引入依赖

    <properties>     
    
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     
    
        <javax.servlet-api.version>4.0.1</javax.servlet-api.version> // 请自行选择最新版本号     
    
        <javax.servlet.jsp-api.version>2.3.3</javax.servlet.jsp-api.version>   
    
    </properties> 
    
    <dependencies>   
    
        <dependency>       
    
            <groupId>javax.servlet</groupId>       
    
            <artifactId>javax.servlet-api</artifactId>       
    
            <version>${javax.servlet-api.version}</version>       
    
            <scope>provided</scope>     
        </dependency>   
    
        <dependency>       
    
            <groupId>javax.servlet.jsp</groupId>       
    
            <artifactId>javax.servlet.jsp-api</artifactId>       
    
            <version>${javax.servlet.jsp-api.version}</version>       
    
            <scope>provided</scope>    
    
        </dependency> 
    
    </dependencies>

    或者:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <!--主要是与 tomcat 中的 版本冲突 就加了 作用域 -->
      <scope>provided</scope>
    </dependency>

    二、问题描述:

            程序中使用到javax.servlet.http.HttpServletRequest等类内容,然而这些类是依赖于tomcat容器lib包下的jar包,工程中导入这两个jar包后就会和tomcat产生冲突。
     
            javax包下都是jdk提供接口规范,由第三方服务器厂商自己来实现。
     
            工程中导入的目的是为了能顺利使用这两个jar包,包含正确编译、使用等。
     
    三、解决方式:
            
            1.在tomcat的context.xml中添加一段配置,这段配置的作用就是采用jvm的代理模式,优先使用父类包含的jar包。
    <Loaderdelegate="true"/>
            delegate值为true时,使用代理模式,加载前先访问上级loader。 false代表从本web应用程序中查找。        
            2.如果使用maven,可以将依赖jar包的作用域调成provide,作用就是只在编译、测试环境下使用,发布时jar包会由JDK或容器提供,不会发布此jar包。换言之,provide作用于不具有传递性。这也是与compile作用域的区别(compile会将jar发布出去)。
            3.编写项目以及发布的时候将两个jar复制到lib并加入buildpath,项目运行之前删掉两个jar。这种方式不方便,但是能达到效果。(不推荐)。
            4.无需复制jar包,直接将tomcat目录下的jar添加到工程中。到build path中Add Library →User Library,将tomcat/lib下servlet-api.jar和jsp-api.jar放到User Library中,buildPath给工程就OK。
    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    UML之对象图
    android5.0(Lollipop) BLE Peripheral牛刀小试
    自己定义msi安装包的运行过程
    高速排序
    字符串函数---strcat()与strncat具体解释及实现
    杭电(hdu)1181 变形课
    电脑突然死机,编译报错dll缺少依赖项
    谈谈java垃圾回收机制
    swift(2)元祖(Tuple)
    IOS小工具以及精彩的博客
  • 原文地址:https://www.cnblogs.com/szrs/p/12560571.html
Copyright © 2020-2023  润新知