練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

預先編譯Tomcat JSP檔案 RSS feed
討論區首頁 » Web/Application Server
發表人 內容
andowson

七段學員
[Avatar]

註冊時間: 2007/1/2
文章: 718
來自: 台北
離線
使用ant task方式來處理,步驟如下:
0.安裝ant,並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去
1.將要預先編譯的webapp上傳到webapps目錄下,包含WEB-INF/web.xml檔,WEB-INF/lib目錄下的jar檔,及WEB-INF/classes目錄下的一些class檔,或者包成war檔由Tomcat自動解開。
2.將底下的ant task檔存檔為jsp-precompile.xml,放到隨便一個目錄下。
<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- ********************************************************************* -->
<!-- Ant build script for JSP Precompilation in Tomcat -->
<!-- Version: $Id: jsp-precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $ -->
<!-- ********************************************************************* -->
<project name="Webapp Precompilation" default="all" basedir=".">

<target name="jspc">

<taskdef classname="org.apache.jasper.JspC" name="jasper2" >
<classpath id="jspc.classpath">
<pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>

<jasper2
validateXml="false"
uriroot="${webapp.path}"
webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
outputDir="${webapp.path}/WEB-INF/src"
addWebXmlMappings="true" />

</target>

<target name="compile">

<mkdir dir="${webapp.path}/WEB-INF/classes"/>
<mkdir dir="${webapp.path}/WEB-INF/lib"/>

<javac destdir="${webapp.path}/WEB-INF/classes"
optimize="off"
debug="on" failonerror="false"
srcdir="${webapp.path}/WEB-INF/src"
excludes="**/*.smap">
<classpath>
<pathelement location="${webapp.path}/WEB-INF/classes"/>
<fileset dir="${webapp.path}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/common/classes"/>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/shared/classes"/>
<fileset dir="${tomcat.home}/shared/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**" />
<exclude name="tags/**" />
</javac>

</target>

<target name="all" depends="jspc,compile">
</target>

<target name="cleanup">
<delete>
<fileset dir="${webapp.path}/WEB-INF/src"/>
<fileset dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
</delete>
</target>

</project>

3.執行ant,例如我的Tomcat安裝在/var/tomcat5目錄下,webapp放在/home/andowson/www/examples目錄下,則輸入以下:
ant -Dtomcat.home=/var/tomcat5 -Dwebapp.path=/home/andowson/www/examples -buildfile jsp-precompile.xml

執行完時會有下列變化:
(1)將WEB-INF/web.xml改寫加上一些<servlet>和<servlet-mapping>的設定。
(2)在WEB-INF目錄下建立src目錄,並將產生的java原始檔存放於WEB-INF/src目錄下。
(3)在WEB-INF/classes目錄底下建出org/apache/jsp目錄,並將編譯過的class檔放在WEB-INF/classes/org/apache/jsp目錄下。
4.重新載入webapp,可透過Tomcat Manager來reload。
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。

參考資料:
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation
http://www.javaworld.com.tw/jute/post/view?bid=6&id=55117&sty=3&age=0&tpg=1&ppg=1#55117
 檔案名稱 jsp-precompile.xml [Disk] 下載
 描述 Tomcat JSP precompile Ant Task
 檔案大小 2 Kbytes
 下載次數:  17 次


分享經驗 累積智慧
[WWW]
andowson

七段學員
[Avatar]

註冊時間: 2007/1/2
文章: 718
來自: 台北
離線
使用上面的方法會改寫web.xml,並在原本的webapp中產生一些java及class檔,如果不喜歡這種方式,可以採用原本Tomcat對JSP檔的處理方式,將產生的.java檔及.class檔放在Tomcat的work目錄下。
一樣使用ant task方式來處理,步驟如下:
0.安裝ant,並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去
1.將要預先編譯的webapp上傳到webapps目錄下,包含WEB-INF/web.xml檔,WEB-INF/lib目錄下的jar檔,及WEB-INF/classes目錄下的一些class檔,或者包成war檔由Tomcat自動解開。
2.將底下的ant task檔存檔為precompile.xml,放到隨便一個目錄下。
<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- ********************************************************************* -->
<!-- Ant build script for JSP Precompilation in Tomcat -->
<!-- Version: $Id: precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $ -->
<!-- ********************************************************************* -->
<project name="Webapp Precompilation" default="all" basedir=".">
<property name="tomcat.home" location="${tomcat.home}"/>
<property name="tomcat.base" location="${tomcat.base}"/>
<property name="webapp.hostname" value="${webapp.hostname}" />
<property name="webapp.name" value="${webapp.name}" />
<property name="webapp.path" location="${tomcat.base}/webapps/${webapp.hostname}/${webapp.name}"/>
<property name="dir-path" location="${tomcat.base}/work/Catalina/${webapp.hostname}/${webapp.name}"/>

<target name="jspc">
<taskdef classname="org.apache.jasper.JspC" name="jasper2" >
<classpath id="jspc.classpath">
<pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${tomcat.home}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>

<jasper2
validateXml="false"
uriroot="${webapp.path}"
webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
outputDir="${webapp.path}/WEB-INF/src" />

<move todir="${dir-path}">
<fileset dir="${webapp.path}/WEB-INF/src">
<include name="**/*.*"/>
</fileset>
</move>

<delete dir="${webapp.path}/WEB-INF/src" failonerror="false"/>
</target>

<target name="compile">
<echo>Compile JSP in: ${dir-path}</echo>
<javac destdir="${dir-path}"
optimize="off"
debug="on"
failonerror="false"
srcdir="${dir-path}">
<classpath>
<pathelement location="${webapp.path}/WEB-INF/classes"/>
<fileset dir="${webapp.path}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/common/classes"/>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/shared/classes"/>
<fileset dir="${tomcat.home}/shared/lib">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**/*.java" />
</javac>
</target>

<target name="all" depends="jspc,compile">
</target>

</project>

3.執行ant,例如我的Tomcat安裝在/var/tomcat5目錄下,Tomcat worker目錄(即單部主機跑多重Tomcat時的TOMCAT_BASE)是/var/robust/worker1,網站名稱是www.andowson.com,webapp名稱是examples,則輸入以下:
ant -Dtomcat.home=/var/tomcat5 -Dtomcat.base=/var/robust/worker1 -Dwebapp.hostname=www.andowson.com -Dwebapp.name=examples -buildfile precompile.xml


執行完時會有下列變化:
(1)在WEB-INF目錄下產生generated_web.xml,裡面就是一些<servlet>和<servlet-mapping>的設定。
(2)在/var/robust/worker1/work/Catalina/www.andowson.com/examples目錄下建立org/apache/jsp目錄,並將產生的java原始檔存放於該目錄下。
(3)將編譯過的class檔放在/var/robust/worker1/work/Catalina/www.andowson.com/examples/org/apache/jsp目錄下。

4.由於我們直接替Tomcat產生.java和.class檔,故不必重新reload webapp。
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。

參考資料:
http://people.apache.org/~fhanik/tomcat-precompile-jsp.xml
 檔案名稱 precompile.xml [Disk] 下載
 描述 Tomcat JSP precompile Ant Task
 檔案大小 3 Kbytes
 下載次數:  19 次


分享經驗 累積智慧
[WWW]
 
討論區首頁 » Web/Application Server
前往:   
行動版