熟悉JAVA web開(kāi)發(fā)的朋友都知道JSP會(huì )被轉換成java文件(預編譯),然后編譯成class使用,即按照JSP-->java-->class的過(guò)程進(jìn)行編譯。
由于JVM只認識class文件,它不知道什么是JSP,因此在tomcat中 如何把JSP解析成java文件 就是本文所要描述的問(wèn)題。
其他翻譯內容參考:Tomcat官方文檔翻譯
如有錯誤,請予指正。
什么是Jasper
Jasper是tomcat中使用的JSP引擎,在Tomcat 6中使用的是Jasper 2,相對于原來(lái)的版本作了不少的改進(jìn),比如:JSP的標簽緩沖池、后臺編譯、頁(yè)面改變時(shí)自動(dòng)重新編譯、Eclipse中JDT編譯等等。
那么Jasper到底是做什么的呢?
簡(jiǎn)單的說(shuō),就是把JVM不認識的JSP文件解析成java文件,然后編譯成class文件提供使用。目前有很多的JSP解析引擎,Tomcat中使用的是Jasper。
在Tomcat中可以通過(guò)配置 CATALINA_HOME/conf/web.xml 中的內容,配置Jasper的選項(web.xml中的內容很長(cháng),截取其中的一部分):

jsporg.apache.jasper.servlet.JspServletforkfalsexpoweredByfalse3

具體的參數,上面都有解釋?zhuān)@里就不多贅述了。
都是些調節JSP編譯的參數,比如多長(cháng)時(shí)間檢測一次,debug的調試信息相關(guān)配置,編譯信息等等。
如何利用Japser.Jspc自定義預編譯JSP
1 jasper相關(guān)jar包
在tomcat6中提供了幾個(gè)jasper的jar包,相對于之前版本,去掉了jasper-compiler.jar以及jasper-runtime.jar,合并為jasper.jar

另外如果開(kāi)發(fā)者自己想要編譯JSP,還需要使用ant以及tomcat-juli.jar。
2 ant相關(guān)jar包
其中ant相關(guān)的jar包可以去官網(wǎng)下載ant.zip,然后解壓提取其中lib內的jar包。

3 tomcat-juli相關(guān)jar包
tomcat-juli.jar位于CATALINA_HOME/bin/目錄下。
在Eclipse的構建路徑下添加上述相關(guān)的jar包即可,然后創(chuàng )建測試類(lèi):
添加JAR包步驟:右鍵工程-->Properties-->Java Build Path-->Libraries-->Add External JARs-->選擇添加的JAR包-->OK

package com.test;import org.apache.jasper.JspC;public class testCompiler{public String jspcTest(){ String error=""; try { JspC jspc = new JspC(); //第一種方式String[] arg0 = {"-uriroot", "F:/apache-tomcat-6.0.43/webapps/ROOT", "-d", "F:/test", "index.jsp" }; jspc.setArgs(arg0); //第二種方式/*jspc.setUriroot("F:/apache-tomcat-6.0.43/webapps/ROOT");//web應用的root目錄 jspc.setOutputDir("F:/test");//.java文件和.class文件的輸出目錄 jspc.setJspFiles("index.jsp");//要編譯的jsp */ jspc.setCompile(true);//是否編譯 false或不指定的話(huà)只生成.java文件 jspc.execute(); }catch(Exception e){ error=e.toString(); }return error; }public static void main(String args[]){ testCompiler t=new testCompiler(); System.out.println(t.jspcTest()); } }

可以使用兩種方式進(jìn)行自定義的JSP編譯。
測試后,可以在 F:/test 目錄下發(fā)現編譯出的index.jsp的java文件以及class文件。

參考
【1】Jasper2 JSP引擎:http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html
【2】解讀JSP解析過(guò)程:http://www.cnblogs.com/zollty/p/3309310.html
【3】使用Jspc編譯JSP文件:http://kjah.iteye.com/blog/625588
【4】 tomcat官方文檔翻譯:http://www.cnblogs.com/xing901022/p/4412469.html
聯(lián)系客服