最近在學Acegi,就試著運行一個小例子,不成想拋出下面的異常
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 23 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
上網搜,發現不少人有這個問題,但都沒有解決辦法。后來想到可能和tomcat6有關,因為我在工程的lib中添加了很多包(一堆什么Spring
依賴),所以把他們一刪JSP就不拋異常了。我估計是,工程中和tomcat6 lib中重復的包在加載時是先被加載(也就是tomcat6中相同的包沒
有被加載),而工程中的包版本要比tomcat6中的低,造成上面的異常。我對照著tomcat中包,發現工程中出現諸如catalina.jar、jsp-api.jar
、servlet-api.jar等這樣的重復包,把它們從工程中刪了就應該行了(對于上面的異常,原因應該是包jsp-api.jar)。看來不是什么包都可
以一股腦往工程里加阿。