javascript
JAVA Drp项目实战—— Unable to compile class for JSP 一波三折
?
???????交代下背景。電腦系統(tǒng)是64位的,用的是64位的Tomcat。安裝是32位的Myeclipse10,java環(huán)境也是32位的。Tomcat在開始啟動時會報這樣一個錯誤,“Can't load IA 64-bit .dll on a AMD32-bit platform”。可是不耽誤使用,近期在敲Drp項目中用到了底層接口的幾個方法,這個錯誤導致項目不能正常執(zhí)行了,所以就將64位的Tomcat換成了與java環(huán)境一樣的32位的Tomcat。上面的問題就順利攻克了,于是繼續(xù)自己的開發(fā),可是當JSP頁面啟動時就出現(xiàn)了我們這篇文章要說的錯誤“Unableto compile class for JSP”。
?
以下是這個錯誤的具體信息:
嚴重:Servlet.service() for servlet [jsp] in context with path [/drp5.9] threwexception [Unable to compile class for JSP:An error occurred atline: [33] in the generated java file: [D:\計算機\學習課程\第三年\3.J2EE\2DRP_Java項目視頻_王勇\MyDrp\drp\apache-tomcat-7.0.55-windows-x86\apache-tomcat-7.0.55\work\Catalina\localhost\drp5.9\org\apache\jsp\login_jsp.java] The methodgetJspApplicationContext(ServletContext) is undefined for the type JspFactoryStacktrace:] withroot cause org.apache.jasper.JasperException:Unable to compile class for JSP:An error occurred atline: [33] in the generated java file: [D:\計算機\學習課程\第三年\3.J2EE\2DRP_Java項目視頻_王勇\MyDrp\drp\apache-tomcat-7.0.55-windows-x86\apache-tomcat-7.0.55\work\Catalina\localhost\drp5.9\org\apache\jsp\login_jsp.java] The methodgetJspApplicationContext(ServletContext) is undefined for the type JspFactoryStacktrace: atorg.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) atorg.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366) atorg.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:476) atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:378) atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:353) atorg.apache.jasper.compiler.Compiler.compile(Compiler.java:340) atorg.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657) atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) atjavax.servlet.http.HttpServlet.service(HttpServlet.java:727) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) atcom.bjpowernode.drp.util.filter.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:40) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) atorg.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) atorg.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2440) atorg.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2429) atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) atorg.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) atjava.lang.Thread.run(Thread.java:744)?
于是僅僅好去網(wǎng)上查資料。有好多人都說是JSP頁面代碼編寫錯誤或者說是Java環(huán)境變量沒有配置好導致的。因為我之前JSP頁面能夠正常執(zhí)行。全部就將這個說法給排除了。
?
?
接著找網(wǎng)上說的是Tomcat文件夾下的conf文件夾里的web.xml文件與項目中的web.xml文件的版本號標識不一樣,于是就將Tomcat里的web.xml文件改成了和項目里的一樣的標識版本號。
就是以下這句話:
<?xmlversion="1.0" encoding="UTF-8"?> <web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name></display-name> </web-app>
?
然后又一次啟動項目的JSP頁面,錯誤繼續(xù)存在。于是在網(wǎng)上繼續(xù)找,發(fā)現(xiàn)網(wǎng)上非常多的人又說是由于項目中有比較低的版本號的jar包導致的:以下是網(wǎng)上的原話。非常多人都允許以下這樣的說法。
?
“catalina.jar、jsp-api.jar、servlet-api.jar、javax.servlet.jar、javax.servlet.jsp.jar等包和應用server(JBoss/Tomcat等)中的包反復且比其版本號低。應用server在啟動時會優(yōu)先載入項目中的包,這樣就導致和應用server中的其他包不匹配。
可把反復的包從項目中刪除。或?qū)胹erver下的這些包復制到項目中,重新啟動服務就可以。”
?
接下來我真的在?javaee Library中發(fā)現(xiàn)了javax.servlet.jar 和javax.servlet.jsp.jar jar兩個包
。于是就將它們移除了。當再次啟動JSP頁面時這個問題依舊存在。
?
到這里,好幾個小時都已經(jīng)過去。心情有點小浮躁了已經(jīng)。強迫讓自己冷靜下來,好好將這個問題順一順。
?
因為之前JSP頁面能夠正常執(zhí)行。排除JSP代碼編寫錯誤,唯一做的改變也僅僅是又一次換了一個Tomcat而已,Tomcat換完以后,環(huán)境變量也已經(jīng)配置完畢了。不可能是環(huán)境變量的問題。
如今頁面不能正常執(zhí)行。會不會是因為之前的64位Tomcat的jar包影響了如今32位的Tomcat。于是接下來做了一個試驗,又一次建立一個項目,在里面建立一個新的JSP頁面,能夠正常訪問。
?
最后問題攻克了,解決方法非常搞笑:新建立一個項目,將原來項目的類、配置文件、jsp文件、還有我們自己專門引入的jar包,也就是自己在做項目中加入或引入的文件復制到新建立的項目中。然后執(zhí)行就成功了,問題就不會再出現(xiàn)了。
?
?
果然是之前的64位Tomcat的jar包影響的。盡管之前的64位的Tomcat早已經(jīng)移除了,但是之前的64位的Tomcat的一些jar包仍然包括在項目中導致的。
?
盡管過程一波三折。只是終于問題還是攻克了。
?
總結
以上是生活随笔為你收集整理的JAVA Drp项目实战—— Unable to compile class for JSP 一波三折的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python实践】Python部分实际
- 下一篇: [Leedcode][JAVA][面试题