今天部署一個J2EE項目後,就出現了這個錯誤:
java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
昨天還好好的,可是今天就出錯了,去網上查了下解決方案。找到一個貌似可行的方法:
1.把部署到伺服器上的工程裡面的 WEBROOT/WEB-INF/LI目錄下的兩個jar包刪除,然後重啟伺服器就OK了 要刪除的jar包是: javax.servlet.jar javax.servlet.jap.jar 原因是在tomcat裡面的lib包下面也有這兩個jar包, jar包衝突。
照著這樣做,發現刪除掉這兩個jar後,再次用Myeclipse編譯還是會在lib下出現這兩個包,這下子就鬱悶。又試了幾下,結果一樣。找了下ClassPath,發現這兩個包其實是在J2EE Library下的,我感覺這個錯誤肯定是跟這兩個包有關的啦,索性拿了另外一個項目來測試,同樣再次編譯,可是那個項目的lib下卻沒有增加這兩個包。
2.網上還有解釋是這兩個包跟tomcat下lib的包衝突,可是找了tomcat lib裡面卻沒有這兩個包,一時間也有點鬱悶。
3.網上還有的情況是刪除tomcat下發行的這個項目,然後重新發布一次,我也試了,照樣不行。
這些方法都試過,還是不行。之後我就把項目的項目下struts和lib下的包整合在一起,再把有重複的包刪除掉,一運行,居然就通過了。。。項目lib下的 javax.servlet.jar javax.servlet.jap.jar兩個包也沒再產生了。。
這種情況我的確沒法解釋,可能中間有一個操作我沒注意到,然後就使得這兩個包不會發布到根目錄下。結果就幸運地解決問題了。
總之,這種問題挺煩的。可是要是能夠在解決問題的過程中,更加熟悉tomcat和項目發布、編譯的原理,哪怕只是過程,也挺有協助的吧。