可能大多數(shù)Jsp開發(fā)員在寫完程序測試通過后,不太會關(guān)注Jsp生成的Java文件,其實,通過Java代碼,更能體現(xiàn)程序代碼的真正含義,對進一步研究程序代碼的后臺運行情況是非常有幫助的。例如,用Jsp編寫代碼時,有時候用<%! %>,有時候用<% %>,加不加感嘆號,到底有什么不同嗎? (Jsp代碼加感嘆號與不加感嘆號的區(qū)別)這類問題在教程里一般不會涉及到,從哪里找到問題的突破口呢——Jsp生成的Java文件!所以,對于Jsp開發(fā),有必要知道這點技能。
對于Tomcat而言,JSP頁面生成的Java文件放在work路徑對應的Web應用下。例如:
D:\Tomcat5.5\webapps\test\test.jsp
生成對應的java文件
D:\Tomcat5.5\work\Standalone\localhost\test\
Jsp與Servlet的關(guān)系
1、 JSP文件必須在JSP服務器內(nèi)運行。
2、 JSP文件必須生成Servlet才能執(zhí)行。
3、 每個JSP頁面的第一個訪問者速度很慢,因為必須等待JSP編譯成Servlet。
4、 JSP頁面的訪問者無須安裝任何客戶端,甚至不需要可以運行Java的運行環(huán)境,因為JSP頁面輸送到客戶端的是標準HTML頁面。
5、 JSP頁面的靜態(tài)內(nèi)容、JSP腳本都會轉(zhuǎn)換成Servlet的xxxService()方法,類似于自行創(chuàng)建Servlet時service()方法。
6、 JSP聲明部分,轉(zhuǎn)換成Servlet的成員部分。所有JSP聲明部分可以使用private,protected,public,static等修飾符,其他地方則不行。
7、 JSP的輸出表達式(<%= ..%>部分),輸出表達式會轉(zhuǎn)換成Servlet的xxxService()方法里的輸出語句。
8、 九個內(nèi)置對象要么是xxxService()方法的形參,要么是該方法的局部變量,所以九個內(nèi)置對象只能在JSP腳本和輸出表達式中使用。
從上述第5、6點,其實就可以解釋Jsp代碼加感嘆號與不加感嘆號的區(qū)別的問題。
如何在Tomcat下指定Jsp生成的Java文件路徑?
當需要自定義Jsp生成的Java文件位置時,可以通過如下兩種方法來實現(xiàn):
方法1.在tomcat的配置文件server.xml(路徑:tomcat路徑\conf下面)里,找到:<Context docBase="D:\workspace\icinfo\trunk\web" path="" reloadable="false" debug="0" crossContext="true" workDir="D:\workspace\icinfo\trunk\web\WEB-INF\lib\CommonPKI\META-INF\work"/>,添加如上的workDir=""屬性,""里寫你的要看到.java/.class的路徑.
方法2.到conf\Catalina\localhost下找到你項目的.xml培植文件,找到方法1中的代碼,后續(xù)操作同方法1.
怎樣保留Weblogic 中Jsp編譯后生成的Java文件?
運行自己配置的web應用,往往只能看見weblogic編譯之后的class文件。而看不見編譯前的java的文件。為了調(diào)試方便,我們有時候是想看編譯前的java文件的。
<jsp-descriptor>
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>
即可。如果沒有,在WEB-INF中建立一個weblogic.xml文件。增加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app
PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd" >
<weblogic-web-app>
<jsp-descriptor>
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>
</weblogic-web-app>
看看web應用在Weblogic中生成臨時文件中,有Java文件了吧!