HttpServletRequest.getServletContext()一直提示找不到,而引出的問題


開發j2ee項目的時候,需要用到servlet-api,如果使用了maven,web項目可以在pom.xml中手動加入所需jar包,達到與依賴j2ee libarary同樣的功能。可問題來了:

 

1. 問題描述

最近使用myeclipse10.7用maven開發一個web項目,就遇到了這樣一個問題:

由於項目的servlet類中使用了servlet-api-3.0相應的方法,即HttpServletRequest類的一個getServletContext()方法,

為了使編譯通過,可在build path中添加j2ee6 libarary,或者pom.xml中引入servlet-api-3.0.jar,但雖然通過這2種方法引入使編譯成功后,

運行時,servlet中仍然報找不到getServletContext()方法的錯誤。

2. 分析結果

追查問題后,分析可能的原因是,如果使用的是tomcat6服務器,由於tomcat6安裝目錄下自帶的是servlet-api-2.5.jar,不支持servlet-3.0,

由此進行猜測,web應用在tomcat中運行時,運行時與編譯時是不一樣的。

編譯使用的項目build path引入的jar包進行編譯,編譯完成后,運行時,tomcat應該是使用了其自帶的j2ee jar包來運行web應用的,我們項目build path中引入的j2ee 相關jar包,在tomcat容器運行web項目時,已經不起作用了!

3. 待解決的問題

問題來了,有沒有一種方法,使得web項目在tomcat容器中運行時,能夠優先使用我們指定的jar包呢?正在百度當中。

4. 分析結果糾正

即使把servlet-api-3.0jar包替換掉tomcat6的lib目錄下的servlet-api.jar包,也並不能解決問題,說明了並不是web項目運行時優先加載tomcat自帶jar這種原因,而是tomcat6不支持servlet-api-3.0,使用tomcat7后,問題解決了,也說明了這個問題。

注意,如果反過來把servlet-api-2.5替換掉tomcat7目錄下的servlet-api包,則容器直接無法成功啟動了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM