javascript
JAVA Drp项目实战—— Unable to compile class for JSP 一波三折
?
???????交代下背景。電腦系統(tǒng)是64位的,用的是64位的Tomcat。安裝是32位的Myeclipse10,java環(huán)境也是32位的。Tomcat在開(kāi)始啟動(dòng)時(shí)會(huì)報(bào)這樣一個(gè)錯(cuò)誤,“Can't load IA 64-bit .dll on a AMD32-bit platform”。可是不耽誤使用,近期在敲Drp項(xiàng)目中用到了底層接口的幾個(gè)方法,這個(gè)錯(cuò)誤導(dǎo)致項(xiàng)目不能正常執(zhí)行了,所以就將64位的Tomcat換成了與java環(huán)境一樣的32位的Tomcat。上面的問(wèn)題就順利攻克了,于是繼續(xù)自己的開(kāi)發(fā),可是當(dāng)JSP頁(yè)面啟動(dòng)時(shí)就出現(xiàn)了我們這篇文章要說(shuō)的錯(cuò)誤“Unableto compile class for JSP”。
?
以下是這個(gè)錯(cuò)誤的具體信息:
嚴(yán)重: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:\計(jì)算機(jī)\學(xué)習(xí)課程\第三年\3.J2EE\2DRP_Java項(xiàng)目視頻_王勇\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:\計(jì)算機(jī)\學(xué)習(xí)課程\第三年\3.J2EE\2DRP_Java項(xiàng)目視頻_王勇\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)上查資料。有好多人都說(shuō)是JSP頁(yè)面代碼編寫(xiě)錯(cuò)誤或者說(shuō)是Java環(huán)境變量沒(méi)有配置好導(dǎo)致的。因?yàn)槲抑?/span>JSP頁(yè)面能夠正常執(zhí)行。全部就將這個(gè)說(shuō)法給排除了。
?
?
接著找網(wǎng)上說(shuō)的是Tomcat文件夾下的conf文件夾里的web.xml文件與項(xiàng)目中的web.xml文件的版本號(hào)標(biāo)識(shí)不一樣,于是就將Tomcat里的web.xml文件改成了和項(xiàng)目里的一樣的標(biāo)識(shí)版本號(hào)。
就是以下這句話:
<?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>
?
然后又一次啟動(dòng)項(xiàng)目的JSP頁(yè)面,錯(cuò)誤繼續(xù)存在。于是在網(wǎng)上繼續(xù)找,發(fā)現(xiàn)網(wǎng)上非常多的人又說(shuō)是由于項(xiàng)目中有比較低的版本號(hào)的jar包導(dǎo)致的:以下是網(wǎng)上的原話。非常多人都允許以下這樣的說(shuō)法。
?
“catalina.jar、jsp-api.jar、servlet-api.jar、javax.servlet.jar、javax.servlet.jsp.jar等包和應(yīng)用server(JBoss/Tomcat等)中的包反復(fù)且比其版本號(hào)低。應(yīng)用server在啟動(dòng)時(shí)會(huì)優(yōu)先載入項(xiàng)目中的包,這樣就導(dǎo)致和應(yīng)用server中的其他包不匹配。
可把反復(fù)的包從項(xiàng)目中刪除。或?qū)?yīng)用server下的這些包復(fù)制到項(xiàng)目中,重新啟動(dòng)服務(wù)就可以。”
?
接下來(lái)我真的在?javaee Library中發(fā)現(xiàn)了javax.servlet.jar 和javax.servlet.jsp.jar jar兩個(gè)包
。于是就將它們移除了。當(dāng)再次啟動(dòng)JSP頁(yè)面時(shí)這個(gè)問(wèn)題依舊存在。
?
到這里,好幾個(gè)小時(shí)都已經(jīng)過(guò)去。心情有點(diǎn)小浮躁了已經(jīng)。強(qiáng)迫讓自己冷靜下來(lái),好好將這個(gè)問(wèn)題順一順。
?
因?yàn)橹?/span>JSP頁(yè)面能夠正常執(zhí)行。排除JSP代碼編寫(xiě)錯(cuò)誤,唯一做的改變也僅僅是又一次換了一個(gè)Tomcat而已,Tomcat換完以后,環(huán)境變量也已經(jīng)配置完畢了。不可能是環(huán)境變量的問(wèn)題。
如今頁(yè)面不能正常執(zhí)行。會(huì)不會(huì)是因?yàn)橹暗?span lang="en-us" style="font-family:Calibri;">64位Tomcat的jar包影響了如今32位的Tomcat。于是接下來(lái)做了一個(gè)試驗(yàn),又一次建立一個(gè)項(xiàng)目,在里面建立一個(gè)新的JSP頁(yè)面,能夠正常訪問(wèn)。
?
最后問(wèn)題攻克了,解決方法非常搞笑:新建立一個(gè)項(xiàng)目,將原來(lái)項(xiàng)目的類(lèi)、配置文件、jsp文件、還有我們自己專(zhuān)門(mén)引入的jar包,也就是自己在做項(xiàng)目中加入或引入的文件復(fù)制到新建立的項(xiàng)目中。然后執(zhí)行就成功了,問(wèn)題就不會(huì)再出現(xiàn)了。
?
?
果然是之前的64位Tomcat的jar包影響的。盡管之前的64位的Tomcat早已經(jīng)移除了,但是之前的64位的Tomcat的一些jar包仍然包括在項(xiàng)目中導(dǎo)致的。
?
盡管過(guò)程一波三折。只是終于問(wèn)題還是攻克了。
?
總結(jié)
以上是生活随笔為你收集整理的JAVA Drp项目实战—— Unable to compile class for JSP 一波三折的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Python实践】Python部分实际
- 下一篇: Swagger+Spring mvc生成