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

    问题描述:

        程序中使用到javax.servlet.http.HttpServletRequest等类内容,然而这些类是依赖于tomcat容器lib包下的jar包,工程中导入这两个jar包后就会和tomcat产生冲突。
 
        javax包下都是jdk提供接口规范,由第三方服务器厂商自己来实现。
 
        工程中导入的目的是为了能顺利使用这两个jar包,包含正确编译、使用等。
 
    解决方式:
        
        1.在tomcat的context.xml中添加一段配置,这段配置的作用就是采用jvm的代理模式,优先使用父类包含的jar包。
  1. <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。
            





原文地址:https://www.cnblogs.com/douJiangYouTiao888/p/6473879.html