<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "預先編譯Tomcat JSP檔案"]]></title>
		<link>https://forum.andowson.com/posts/list/20.page</link>
		<description><![CDATA[Latest messages posted in the topic "預先編譯Tomcat JSP檔案"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>預先編譯Tomcat JSP檔案</title>
				<description><![CDATA[ 使用ant task方式來處理，步驟如下: 
<br>
0.安裝[url=http://ant.apache.org/]ant[/url]，並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去 
<br>
1.將要預先編譯的webapp上傳到webapps目錄下，包含WEB-INF/web.xml檔，WEB-INF/lib目錄下的jar檔，及WEB-INF/classes目錄下的一些class檔，或者包成war檔由Tomcat自動解開。 
<br>
2.將底下的ant task檔存檔為jsp-precompile.xml，放到隨便一個目錄下。 
<br>
[code=xml]&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 
<br>
&lt;!-- ********************************************************************* --&gt; 
<br>
&lt;!-- Ant build script for JSP Precompilation in Tomcat --&gt; 
<br>
&lt;!-- Version: $Id: jsp-precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $ --&gt; 
<br>
&lt;!-- ********************************************************************* --&gt; 
<br>
&lt;project name="Webapp Precompilation" default="all" basedir="."&gt; 
<br>
<br>
 &lt;target name="jspc"&gt; 
<br>
<br>
 &lt;taskdef classname="org.apache.jasper.JspC" name="jasper2" &gt; 
<br>
 &lt;classpath id="jspc.classpath"&gt; 
<br>
 &lt;pathelement location="${java.home}/../lib/tools.jar"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/bin"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/server/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/common/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;/classpath&gt; 
<br>
 &lt;/taskdef&gt; 
<br>
<br>
 &lt;jasper2 
<br>
 validateXml="false" 
<br>
 uriroot="${webapp.path}" 
<br>
 webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml" 
<br>
 outputDir="${webapp.path}/WEB-INF/src" 
<br>
 addWebXmlMappings="true" /&gt; 
<br>
<br>
 &lt;/target&gt; 
<br>
<br>
 &lt;target name="compile"&gt; 
<br>
<br>
 &lt;mkdir dir="${webapp.path}/WEB-INF/classes"/&gt; 
<br>
 &lt;mkdir dir="${webapp.path}/WEB-INF/lib"/&gt; 
<br>
<br>
 &lt;javac destdir="${webapp.path}/WEB-INF/classes" 
<br>
 optimize="off" 
<br>
 debug="on" failonerror="false" 
<br>
 srcdir="${webapp.path}/WEB-INF/src" 
<br>
 excludes="**/*.smap"&gt; 
<br>
 &lt;classpath&gt; 
<br>
 &lt;pathelement location="${webapp.path}/WEB-INF/classes"/&gt; 
<br>
 &lt;fileset dir="${webapp.path}/WEB-INF/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;pathelement location="${tomcat.home}/common/classes"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/common/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;pathelement location="${tomcat.home}/shared/classes"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/shared/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/bin"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;/classpath&gt; 
<br>
 &lt;include name="**" /&gt; 
<br>
 &lt;exclude name="tags/**" /&gt; 
<br>
 &lt;/javac&gt; 
<br>
<br>
 &lt;/target&gt; 
<br>
<br>
 &lt;target name="all" depends="jspc,compile"&gt; 
<br>
 &lt;/target&gt; 
<br>
<br>
 &lt;target name="cleanup"&gt; 
<br>
 &lt;delete&gt; 
<br>
 &lt;fileset dir="${webapp.path}/WEB-INF/src"/&gt; 
<br>
 &lt;fileset dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/&gt; 
<br>
 &lt;/delete&gt; 
<br>
 &lt;/target&gt; 
<br>
<br>
&lt;/project&gt;[/code] 
<br>
3.執行ant，例如我的Tomcat安裝在/var/tomcat5目錄下，webapp放在/home/andowson/www/examples目錄下，則輸入以下： 
<br>
[code]ant -Dtomcat.home=/var/tomcat5 -Dwebapp.path=/home/andowson/www/examples -buildfile jsp-precompile.xml[/code] 
<br>
執行完時會有下列變化： 
<br>
 (1)將WEB-INF/web.xml改寫加上一些&lt;servlet&gt;和&lt;servlet-mapping&gt;的設定。 
<br>
 (2)在WEB-INF目錄下建立src目錄，並將產生的java原始檔存放於WEB-INF/src目錄下。 
<br>
 (3)在WEB-INF/classes目錄底下建出org/apache/jsp目錄，並將編譯過的class檔放在WEB-INF/classes/org/apache/jsp目錄下。 
<br>
4.重新載入webapp，可透過[url=http://tomcat.apache.org/tomcat-5.5-doc/manager-howto.html]Tomcat Manager[/url]來reload。 
<br>
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。 
<br>
<br>
參考資料： 
<br>
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation 
<br>
http://www.javaworld.com.tw/jute/post/view?bid=6&amp;id=55117&amp;sty=3&amp;age=0&amp;tpg=1&amp;ppg=1#55117]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/222/337.page</guid>
				<link>https://forum.andowson.com/posts/preList/222/337.page</link>
				<pubDate><![CDATA[Thu, 28 Feb 2008 19:40:50]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:預先編譯Tomcat JSP檔案</title>
				<description><![CDATA[ 使用上面的方法會改寫web.xml，並在原本的webapp中產生一些java及class檔，如果不喜歡這種方式，可以採用原本Tomcat對JSP檔的處理方式，將產生的.java檔及.class檔放在Tomcat的work目錄下。 
<br>
一樣使用ant task方式來處理，步驟如下: 
<br>
0.安裝ant，並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去 
<br>
1.將要預先編譯的webapp上傳到webapps目錄下，包含WEB-INF/web.xml檔，WEB-INF/lib目錄下的jar檔，及WEB-INF/classes目錄下的一些class檔，或者包成war檔由Tomcat自動解開。 
<br>
2.將底下的ant task檔存檔為precompile.xml，放到隨便一個目錄下。 
<br>
[code=xml]&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 
<br>
&lt;!-- ********************************************************************* --&gt; 
<br>
&lt;!-- Ant build script for JSP Precompilation in Tomcat --&gt; 
<br>
&lt;!-- Version: $Id: precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $ --&gt; 
<br>
&lt;!-- ********************************************************************* --&gt; 
<br>
&lt;project name="Webapp Precompilation" default="all" basedir="."&gt; 
<br>
 &lt;property name="tomcat.home" location="${tomcat.home}"/&gt; 
<br>
 &lt;property name="tomcat.base" location="${tomcat.base}"/&gt; 
<br>
 &lt;property name="webapp.hostname" value="${webapp.hostname}" /&gt; 
<br>
 &lt;property name="webapp.name" value="${webapp.name}" /&gt; 
<br>
 &lt;property name="webapp.path" location="${tomcat.base}/webapps/${webapp.hostname}/${webapp.name}"/&gt; 
<br>
 &lt;property name="dir-path" location="${tomcat.base}/work/Catalina/${webapp.hostname}/${webapp.name}"/&gt; 
<br>
<br>
 &lt;target name="jspc"&gt; 
<br>
 &lt;taskdef classname="org.apache.jasper.JspC" name="jasper2" &gt; 
<br>
 &lt;classpath id="jspc.classpath"&gt; 
<br>
 &lt;pathelement location="${java.home}/../lib/tools.jar"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/server/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/common/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;/classpath&gt; 
<br>
 &lt;/taskdef&gt; 
<br>
<br>
 &lt;jasper2 
<br>
 validateXml="false" 
<br>
 uriroot="${webapp.path}" 
<br>
 webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml" 
<br>
 outputDir="${webapp.path}/WEB-INF/src" /&gt; 
<br>
<br>
 &lt;move todir="${dir-path}"&gt; 
<br>
 &lt;fileset dir="${webapp.path}/WEB-INF/src"&gt; 
<br>
 &lt;include name="**/*.*"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;/move&gt; 
<br>
<br>
 &lt;delete dir="${webapp.path}/WEB-INF/src" failonerror="false"/&gt; 
<br>
 &lt;/target&gt; 
<br>
<br>
 &lt;target name="compile"&gt; 
<br>
 &lt;echo&gt;Compile JSP in: ${dir-path}&lt;/echo&gt; 
<br>
 &lt;javac destdir="${dir-path}" 
<br>
 optimize="off" 
<br>
 debug="on" 
<br>
 failonerror="false" 
<br>
 srcdir="${dir-path}"&gt; 
<br>
 &lt;classpath&gt; 
<br>
 &lt;pathelement location="${webapp.path}/WEB-INF/classes"/&gt; 
<br>
 &lt;fileset dir="${webapp.path}/WEB-INF/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;pathelement location="${tomcat.home}/common/classes"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/common/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;pathelement location="${tomcat.home}/shared/classes"/&gt; 
<br>
 &lt;fileset dir="${tomcat.home}/shared/lib"&gt; 
<br>
 &lt;include name="*.jar"/&gt; 
<br>
 &lt;/fileset&gt; 
<br>
 &lt;/classpath&gt; 
<br>
 &lt;include name="**/*.java" /&gt; 
<br>
 &lt;/javac&gt; 
<br>
 &lt;/target&gt; 
<br>
<br>
 &lt;target name="all" depends="jspc,compile"&gt; 
<br>
 &lt;/target&gt; 
<br>
<br>
&lt;/project&gt;[/code] 
<br>
 3.執行ant，例如我的Tomcat安裝在/var/tomcat5目錄下，Tomcat worker目錄(即單部主機跑多重Tomcat時的TOMCAT_BASE)是/var/robust/worker1，網站名稱是www.andowson.com，webapp名稱是examples，則輸入以下： 
<br>
[code]ant -Dtomcat.home=/var/tomcat5 -Dtomcat.base=/var/robust/worker1 -Dwebapp.hostname=www.andowson.com -Dwebapp.name=examples -buildfile precompile.xml[/code] 
<br>
<br>
 執行完時會有下列變化： 
<br>
(1)在WEB-INF目錄下產生generated_web.xml，裡面就是一些&lt;servlet&gt;和&lt;servlet-mapping&gt;的設定。 
<br>
(2)在/var/robust/worker1/work/Catalina/www.andowson.com/examples目錄下建立org/apache/jsp目錄，並將產生的java原始檔存放於該目錄下。 
<br>
(3)將編譯過的class檔放在/var/robust/worker1/work/Catalina/www.andowson.com/examples/org/apache/jsp目錄下。 
<br>
<br>
4.由於我們直接替Tomcat產生.java和.class檔，故不必重新reload webapp。 
<br>
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。 
<br>
<br>
參考資料： 
<br>
http://people.apache.org/~fhanik/tomcat-precompile-jsp.xml]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/222/338.page</guid>
				<link>https://forum.andowson.com/posts/preList/222/338.page</link>
				<pubDate><![CDATA[Thu, 28 Feb 2008 20:01:20]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
	</channel>
</rss>