練功房推薦書單

  • 黑心建商的告白:買屋前不看會哭的17堂課
  • 黑心房仲的告白:買屋簽約前最後救命的17堂課
  • 黑心投資客炒房告白:搞懂中古屋坑錢陷阱的17堂課
  • 猛虎出閘制霸版:最新OCP Java SE 6 Programmer專業認證(附原始程式碼及範例檔)
預先編譯Tomcat JSP檔案  XML
Forum Index » Tomcat
Author Message
andowson

六段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 662
Location: 台北
Offline

使用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改寫加上一些<servelt>和<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
 Filename jsp-precompile.xml [Disk] Download
 Description Tomcat JSP precompile Ant Task
 Filesize 2 Kbytes
 Downloaded:  16 time(s)

This message was edited 1 time. Last update was at 2008-02-28 19:42:20


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

六段學員
[Avatar]

Joined: 2007-01-02 22:20:40
Messages: 662
Location: 台北
Offline

使用上面的方法會改寫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,裡面就是一些<servelt>和<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
 Filename precompile.xml [Disk] Download
 Description Tomcat JSP precompile Ant Task
 Filesize 3 Kbytes
 Downloaded:  18 time(s)

This message was edited 1 time. Last update was at 2008-02-28 20:04:05


分享經驗 累積智慧
[WWW] [MSN]
 
Forum Index » Tomcat
Go to: