JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Servlet/JSP 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 手動法預編譯Tomcat JSP檔案 [精華]
vip88





發文: 77
積分: 1
於 2003-08-09 21:44 user profilesend a private message to usersend email to vip88reply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
手動法預編譯Tomcat JSP檔案

1.使用jspc將jsp檔案編譯成servlet

範例:
jspc -s -webapp ..\webapps\CRWRO -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO"

說明:
-s 當檔案成功編譯之後,顯示成功編譯的檔名
-webapp 指定要編譯的目錄
-d 指定輸出.java(即編譯成servlet)的目錄

2.使用javac將servlet編譯成byte code

javac -classpath "C:\Tomcat 4.1.27\common\lib\servlet.jar;C:\Tomcat 4.1.27\common\lib\jasper-runtime.jar" -sourcepath "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" @compile.txt -encoding CP950

說明:
-encoding CP950 繁體中文必須加上這個選項,否則無法編譯成功。
-classpath 指定需要用到的class目錄,所需要的內容,將依照
所使用到相關的元件來決定。
-d 指定編譯後的.class放置的目錄
@ 指定編譯的.java檔名清單

3.compile.txt內容
"C:\\Tomcat 4.1.27\\work\\Standalone\\localhost\\CRWRO\\delete_0002dmssql_jsp.java"
"C:\\Tomcat 4.1.27\\work\\Standalone\\localhost\\CRWRO\\do_delete_0002dmssql_jsp.java"

說明:
   這個檔案用來提供需要編譯成.class檔案的.java檔案名。


snpshu edited on 2004-07-21 10:54
reply to postreply to post
歡迎光臨神奇力量網
http://www.688.idv.tw

歡迎加入神奇力量論壇
http://www.688.idv.tw/forum
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-08-09 21:50 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
嗯嗯 .. 不錯的整理資料 ...
如果能再搭配 ant 的使用 ...
應該就更方便了 ...

只不過 ... 自己手動編譯 JSP -> Servlet ...
想不出有什麼功用 ....


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
vip88





發文: 77
積分: 1
於 2003-08-09 21:53 user profilesend a private message to usersend email to vip88reply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
1.可以解決第一次執行慢的問題。
2.可以只部署.class檔案,保留原始程式碼。
3.部署的機器,裝JRE即可,可節省硬碟空間。


vip88 edited on 2003-08-10 14:49
reply to postreply to post
歡迎光臨神奇力量網
http://www.688.idv.tw

歡迎加入神奇力量論壇
http://www.688.idv.tw/forum
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
cmwen





發文: 16
積分: 0
於 2003-08-11 14:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
嗯.... 這個我有試過,不過要怎麼樣讓 tomcat 知道是 compile
過的 jsp 呢,我也是 compile 出一堆 .class ,但是請問一下要
放在那 tomcat才會知道是已compiled的 jsp 呀?

ps. 這樣子的做法還有一個好處,你可以不用啟動 tomcat 就知
道程式是否有錯誤


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:cmwen]
sdargon





發文: 109
積分: 0
於 2003-08-11 14:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
[quote][b]cmwen wrote:[/b]
嗯.... 這個我有試過,不過要怎麼樣讓 tomcat 知道是 compile
過的 jsp 呢,我也是 compile 出一堆 .class ,但是請問一下要
放在那 tomcat才會知道是已compiled的 jsp 呀?

ps. 這樣子的做法還有一個好處,你可以不用啟動 tomcat 就知
道程式是否有錯誤
[/quote]
好像要在WEB-INF底下的web.xml裡
對把每個compile過的jsp的.class做對應

<servlet>
<servlet-name>appController1</servlet-name>
<servlet-class>appController1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appController1</servlet-name>
<url-pattern>/appController1.jsp</url-pattern>
</servlet-mapping>


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:sdargon]
cmwen





發文: 16
積分: 0
於 2003-08-12 11:14 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sdargon wrote:
好像要在WEB-INF底下的web.xml裡
對把每個compile過的jsp的.class做對應

<servlet>
<servlet-name>appController1</servlet-name>
<servlet-class>appController1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appController1</servlet-name>
<url-pattern>/appController1.jsp</url-pattern>
</servlet-mapping>


應該不會是這樣子吧... 這樣子不是更累,用
XDoclet 有辨法嗎?


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:cmwen]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-08-12 11:18 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
cmwen wrote:
應該不會是這樣子吧... 這樣子不是更累,用
XDoclet 有辨法嗎?


對 XDoclet 不是很熟 ....
不過 ant 一定可以 ...
請大家愛用 ant


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:cmwen]
snpshu

Norman

版主

發文: 1073
積分: 5
於 2003-08-12 13:10 user profilesend a private message to usersend email to snpshureply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
沒有這樣辛苦啦...try this
jspc -webxml myweb.xml .....

參考資料:
http://cvs.apache.org/viewcvs/~checkout~/jakarta-tomcat-4.0/jasper/doc/jspc.html


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:browser]
cmwen





發文: 16
積分: 0
於 2003-08-13 10:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
browser wrote:
對 XDoclet 不是很熟 ....
不過 ant 一定可以 ...
請大家愛用 ant


browser 大大, ant 可以神奇到幫我們 gen web.xml喔,
這就一定要學一下了...... Big Smile


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
disc





發文: 30
積分: 3
於 2003-08-17 23:00 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我在 windows XP Tomcat 4.1.27 j2sdk 1.4.2 上面測試的結果,

在執行
jspc -s -webapp ..\webapps\CRWRO -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO"
前,要設定二個環境數:
JAVA_HOME = c:\j2sdk (最後面不要加上分號)
JASPER_HOME = C:\Tomcat4 (最後面也不要加分號)

javac -classpath "C:\Tomcat 4.1.27\common\lib\servlet.jar;C:\Tomcat 4.1.27\common\lib\jasper-runtime.jar" -sourcepath "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" @compile.txt -encoding UTF-8

檔案最後面的編碼要用 UTF-8 才可以正常的產生檔案。
因為我觀察所產生出來的 .java 檔,是用 UTF-8 編碼的,所以compile 的時候,要指定 .java 檔是 UTF-8 的才能正常的產生 class 檔

補充一下產生 compile.txt 檔的方法,這是在本站 「JAVA技巧」版中找到的:
1.切換目錄到放 .java 檔的目錄
2.下指令:dir *.java /b/s > compile.txt

使用 dir 將所有 .java 的檔案列出來,再使用輸出入導向,存到 compile.txt 中

我將產生出來的 .class 檔案,放在 WEB-INF/classes 中,另外,再配合 snpshu 大大的方法,自動產生 myweb.xml 檔,並將設定加入 WEB-INF/web.xml 中,重新 reload 這個 jsp 應用程式,就可以了。這樣子即使將 *.jsp 檔都刪除掉,程式都可以正常執行。

提供一個 bat 檔,讓大家參考:
(現行目錄在 C:\Tomcat4\webapps\CRWRO 中)
@echo off
cd C:\Tomcat4\webapps\CRWRO
set JAVA_HOME=C:\j2sdk
set JASPER_HOME=c:\Tomcat4
call C:\Tomcat4\bin\jspc -s -webxml myweb.xml -webapp . -d ".\WEB-INF\classes"
dir WEB-INF\classes\*.java /b/s > compile.txt
javac -classpath "C:\Tomcat4\common\lib\servlet.jar;C:\Tomcat4\common\lib\jasper-runtime.jar" -sourcepath "WEB-INF\classes" -d "WEB-INF\classes" @compile.txt -encoding utf-8


disc edited on 2003-08-17 23:02
reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:disc]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-08-18 07:30 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
disc wrote:
我在 windows XP Tomcat 4.1.27 j2sdk 1.4.2 上面測試的結果,

在執行
jspc -s -webapp ..\webapps\CRWRO -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO"
前,要設定二個環境數:
JAVA_HOME = c:\j2sdk (最後面不要加上分號)
JASPER_HOME = C:\Tomcat4 (最後面也不要加分號)


請問一下 disc 兄 ...
後面加上 ; 會有什麼影響 ??


javac -classpath "C:\Tomcat 4.1.27\common\lib\servlet.jar;C:\Tomcat 4.1.27\common\lib\jasper-runtime.jar" -sourcepath "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" -d "C:\Tomcat 4.1.27\work\Standalone\localhost\CRWRO" @compile.txt -encoding UTF-8

檔案最後面的編碼要用 UTF-8 才可以正常的產生檔案。
因為我觀察所產生出來的 .java 檔,是用 UTF-8 編碼的,所以compile 的時候,要指定 .java 檔是 UTF-8 的才能正常的產生 class 檔

補充一下產生 compile.txt 檔的方法,這是在本站 「JAVA技巧」版中找到的:
1.切換目錄到放 .java 檔的目錄
2.下指令:dir *.java /b/s > compile.txt

使用 dir 將所有 .java 的檔案列出來,再使用輸出入導向,存到 compile.txt 中

我將產生出來的 .class 檔案,放在 WEB-INF/classes 中,另外,再配合 snpshu 大大的方法,自動產生 myweb.xml 檔,並將設定加入 WEB-INF/web.xml 中,重新 reload 這個 jsp 應用程式,就可以了。這樣子即使將 *.jsp 檔都刪除掉,程式都可以正常執行。

提供一個 bat 檔,讓大家參考:
(現行目錄在 C:\Tomcat4\webapps\CRWRO 中)
@echo off
cd C:\Tomcat4\webapps\CRWRO
set JAVA_HOME=C:\j2sdk
set JASPER_HOME=c:\Tomcat4
call C:\Tomcat4\bin\jspc -s -webxml myweb.xml -webapp . -d ".\WEB-INF\classes"
dir WEB-INF\classes\*.java /b/s > compile.txt
javac -classpath "C:\Tomcat4\common\lib\servlet.jar;C:\Tomcat4\common\lib\jasper-runtime.jar" -sourcepath "WEB-INF\classes" -d "WEB-INF\classes" @compile.txt -encoding utf-8


嘿嘿 ... 在 java 的世界中 ...
我還是推薦使用 ant 呦 ..... Tongue


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
disc





發文: 30
積分: 3
於 2003-08-18 11:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
環境變數
JAVA_HOME = c:\j2sdk (最後面不要加上分號)
JASPER_HOME = C:\Tomcat4 (最後面也不要加分號)

如果後面加上 ; 的話, jspc 會不能正常執行,會出現訊息說環境變數沒有設定好,因為 jspc 可能是直接取 JAVA_HOME 的內容加上 \bin 來取得 java 的執行路徑,如果後面有加上分號的話,路徑會變成 C:\j2sdk;\bin\java 就不能正常執行了。

這個分號的問題是我在安裝 Tomcat4 時發現的問題,如果安裝時設定 JAVA_HOME = C:\j2sdk; 那安裝完成後的執行檔,會執行 C:\j2sdk;\bin\java 造成找不到 java 的問題。我想 jpsc 應該也是因為這樣,所以不能在環境變數後加上 ; 。

我也是推薦使用 ant Smile 不過我還沒有去試著把 compile jsp 的過程和 ant 做整合,各位有興趣可以試試看,心得再分享一下囉~ :-p


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:cmwen]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-08-25 16:55 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
cmwen wrote:
browser 大大, ant 可以神奇到幫我們 gen web.xml喔,
這就一定要學一下了...... Big Smile


什麼什麼 .....
如果要 gen web.xml 時
xDoclet 是一定要的啦 ~~~
ant 也可以搭配 xDoclet .. 一起使用 ...

不過如果單純使用 ant ...
應該不法做到 gen web.xml 的功能

PS. 有錯請指正 ..... 是該去小k一下 xDoclet ..


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
snpshu

Norman

版主

發文: 1073
積分: 5
於 2003-10-27 12:52 user profilesend a private message to usersend email to snpshureply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
剛剛不小心看到的資料 ant & precompile jsp 給大家參考

It couldn't get easier, this compile script will precompile your JSPs into the tomcat work folder so that you can have precompiled jsps and enjoy the ability to change your JSPs on the fly.

Note:This script only works on exploded wars, so it is a good idea to run it after tomcat has started if you are deploying .war files

Step by Step

1. Download Ant Contrib v0.4 and store it in your $ANT_HOME/lib folder
2. Download the ANT precompile script and store it anywhere you want
3. Open a command line interface in the same directory as your precompile script
4. run the command ant -Dtomcat.home=/usr/local/tomcat -Dwebapp.name=mywebappname -buildfile tomcat-precompile-jsp.xml and watch your JSPs be precompiled. Your war must be exploded and the webapp name is the name of the directory (the war name minus .war)

For the advanced user, upon tomcat startup, you can create a shell script that runs this for each webapp.

For the advanced user 2, set the parallel attribute in the <foreach parallel="true"> to true, for better performance


snpshu edited on 2003-10-27 12:55
reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:snpshu]
snpshu

Norman

版主

發文: 1073
積分: 5
於 2004-06-25 12:09 user profilesend a private message to usersend email to snpshureply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
剛好一個網友問這一個問題,precompile jsp 新版的ant task作法如下 , 不需要下載 Ant Contrib

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<project name="Webapp Precompilation" default="all" basedir="."> 
    <property name="tomcat.home" location="C:\Program Files\Apache Software Foundation\Tomcat 5.0\"/>
    <property name="webapp.path" location="C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\myjsp"/>
  <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" /> 
 
  </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>
 
</project>
 


C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\myjsp 是我打算要precompile的jsp 檔案

可以順利產生web.xml 及_jsp.java檔 ,適用tomcat 5的jasper 沒有問題

問題集:
1.若出現: Could not create task of type: jasper2 due to java.lang.NoClassDefFoundError
請檢查你的tomcat_home變數

2.使用舊的方式會出現
error:org.apache.jasper.JasperException: Unrecognized option: -vX的錯誤,供未來發生這一個錯誤參考

3.org.apache.jasper.JasperException: The -uriroot option must specify a pre-existing directory
請輸入正確的webapps目錄


snpshu edited on 2004-06-25 12:14
reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:snpshu]
angela_liu99





發文: 1
積分: 0
於 2004-06-28 15:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不知道自动生成的那个generated_web.xml能否用include被web.xml包含进去,而不是用copy一下,然后再paste到web.xml里去的方法。
可以吗?


reply to postreply to post
作者 Re:手動法預編譯Tomcat JSP檔案 [Re:vip88]
naru0325





發文: 1
積分: 0
於 2009-01-15 17:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
snpshu前輩貼的連結己經失效了QQ

在使用snpshu前輩的build.xml後
己成功的編譯出.java與.class的檔案
有發現到一個奇怪的現像就是第一次執行ant時
並末在WEB-INF底下產生generated_web.xml
而是在第二次執行時才會出現generated_web.xml

而另一個問題就是
該如何讓tomcat去知道我現在是要使用已編譯過的檔案
而不是使用原始碼呢?


reply to postreply to post
» JWorld@TW »  Servlet/JSP 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8