問題描述:
程序中使用到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。