JSP的環(huán)境引擎--Tomcat 所謂的JSP環(huán)境引擎指的就是JSP的運(yùn)行環(huán)境,就象ASP的運(yùn)行環(huán)境是IIS而PHP的運(yùn)行環(huán)境可以是APACHE+PHP,前面我們已經(jīng)提到過JSP的一大特點是他支持多平臺,不僅支持Windows同樣也支持Linux/Unix,現(xiàn)在流行的JSP引擎主要有Tomcat、JSWDK、Resin、JRun、Servletexec、Websphere、Weblogic、GNUJSP,Enhydra等幾種,下面我們將重點介紹幾個常用的環(huán)境引擎。 TomCat TomCat特點 Tomcat是apache上實現(xiàn)jsp+javabean環(huán)境的接口程序,集成了jsp和servlet。他提供一個單獨的mod_jserv.so模塊,利用apache的DSO動態(tài)載入,與早先的Jserver不同,Tomcat必須作為一個單獨的程序運(yùn)行,所有提交給apache的java請求將通過Tomcat自帶的jserv模塊提交給Tomcat進(jìn)一步處理。就是說,必須先運(yùn)行Tomcat,再運(yùn)行apache才能解釋jsp/servlet程序。 Tomcat很可能成為下一代Java Web Server的主流。因為Tomcat受到Sun公司的全力支持,并由非常強(qiáng)大的開發(fā)組織apache來進(jìn)行發(fā)展,這一工程被稱為Jakarta計劃。從戰(zhàn)略上看,Sun 現(xiàn)在正借助apache的影響來開發(fā)server端的java技術(shù),這就是tomcat。因此可以相信tomcat已經(jīng)或者即將是一個較理想的jsp & servlet開發(fā)和支撐平臺。相對地,JSWDK只是一個簡化的服務(wù)器平臺,性能和穩(wěn)定程度都比較有限,而且實際上SUN并不許可將它作為internet上的商業(yè)平臺。 Tomcat的功能比jws或jswdk強(qiáng)大得多,您可以訪問tomcat的站點http://jakarta. 查看詳細(xì)介紹,Tomcat的穩(wěn)定版本是3.2.3,最新4.0的版本處于開發(fā)階段,他主要包含了三個主要部分: Catalina:一個符合Servlet API規(guī)范2.3的Servlet 容器; Jasper:一個符合JSP規(guī)范1.2的JSP編譯器和運(yùn)行環(huán)境; Webapps:Tomcat中包含的一些例子和用于測試的web例程,以及相關(guān)文檔。 Tomcat4.0的一個主要目的是支持目前正在處于測試版的Servlet2.3規(guī)范和JSP1.2規(guī)范的新特性,他有以下幾個特點: 支持Servlet API 規(guī)范2.3 Servlet為Web開發(fā)員提供了一個簡單、一致的機(jī)制,來擴(kuò)展Web服務(wù)器的功能,并且和已有的業(yè)務(wù)系統(tǒng)交互。可以把Servlet看作在服務(wù)端運(yùn)行的Applet。 JSP技術(shù)是servlet技術(shù)的擴(kuò)展,對HTML和XML的頁面創(chuàng)作提供支持。它使網(wǎng)頁設(shè)計員能非常容易地將固定或靜態(tài)的模板數(shù)據(jù)與動態(tài)內(nèi)容進(jìn)行組合。 Tomcat4.0的版本支持Servlet API 規(guī)范2.3,你可以在web.xml文件中注冊相應(yīng)的事件監(jiān)聽器,當(dāng)這些事件發(fā)生時,在應(yīng)用程序中可以收到相應(yīng)的事件通知,這些事件包括: - 應(yīng)用啟動 - 應(yīng)用關(guān)閉 - 應(yīng)用的屬性的增加、刪除、被替換 - Session創(chuàng)建 - Session失效、超時 - Session的屬性的增加、刪除、被替換 事件監(jiān)聽器的功能被加入到Catalina,看來效果非常好。在Webapps中的web應(yīng)用examples中就有兩個監(jiān)聽器的例子用于通過ServerletContext.log()記錄相應(yīng)的事件。 Servlet Fliter 在web.xml文件中注冊類似與Catalina核心中Valves功能類似的的Filter。Filter主要具有以下特性: - Filter能夠映射成相應(yīng)的URL或特定的Servlet。 - Filter能被用于對request,reponse對象進(jìn)行預(yù)處理、或后處理。 - Filter能封裝request、response對象,比如可以對對象中的內(nèi)容進(jìn)行轉(zhuǎn)換。 - Filter能夠?qū)υL問請求直接響應(yīng),然后返回給客戶端,而不僅僅進(jìn)行訪問請求的傳送,比如,你可以在應(yīng)用級進(jìn)行用戶認(rèn)證。 與這些特性相關(guān)聯(lián),當(dāng)servlet傳遞參數(shù)給RequestDispatcher時就可以做這種類型的封裝。而在以前,你只能將初始的request對象傳遞給Servlet Container,并且從Servlet Container中得到返回的response對象。Servlet filter的功能目前已經(jīng)加入到Catalina中,并通過了初步測試。在應(yīng)用examples中有一個filter用于路徑映射和向調(diào)用servlet的映射("/servlet/*"),其中存放了最終傳遞給執(zhí)行Servlet的request對象屬性。 安裝擴(kuò)展庫的依賴關(guān)系 Web應(yīng)用程序或WEB-INF/lib中的jar文件,現(xiàn)在可以聲明對特定版本外部庫的依賴關(guān)系,這些外部庫是由Servlet Container作為共享擴(kuò)展提供的。在Catalina中目前還沒有完全實現(xiàn)這部分功能。 國際化支持 Catalina現(xiàn)在支持從Locale向字符集的映射,在ServletRequest中增加了一個新的方法setCharacterEncoding() ,在這一方面,還需要有個多的測試和功能增強(qiáng)。 Web應(yīng)用的類裝載器 Servlet規(guī)范草案中9.6.2節(jié)中定義了與Web應(yīng)用中類裝載器相關(guān)的需求和建議。這些需求在Catalina中被遵照執(zhí)行。 Servlet 2.3應(yīng)用程序分發(fā)描述符的DTD 在Catalina中包括一個非正式的用于解析web.xml文件的DTD(catalina/src/conf/web_23.dtd)它將被正式發(fā)布的DTD所替代。 JSP規(guī)范1.2 JSP 對Include flush="false"的支持 這個變化通過在標(biāo)準(zhǔn)或定制的標(biāo)記中嵌套使用 JSP頁面的XML視圖 JSP1.2的實現(xiàn)要求輸入不僅要符合JSP語法,而且要符合XML語法。目前正在將Jasper的parser進(jìn)行轉(zhuǎn)換,使得其能接受任何一種類型的輸入。 屬性編輯器的利用 假如一個應(yīng)用對java類的一個特定屬性注冊了一個屬性編輯器(PropertyEditor),那么這個屬性編輯器的setAsText()方法將用于將文本格式的屬性(比如request對象的一個參數(shù))轉(zhuǎn)換為該屬性的內(nèi)部表示。假如沒有定義屬性編輯器,那么就采用前述的缺省屬性編輯器進(jìn)行轉(zhuǎn)換。 定制標(biāo)記庫驗證頁面的合法性 在定制標(biāo)記庫中增加了一個新的編譯階段用于檢查頁面的XML視圖,如果檢測到錯誤,就拋出一個轉(zhuǎn)換時異常。在這當(dāng)中,可用于驗證: - 從語義上不能被TLD中定義的信息驗證的嵌套定制標(biāo)記 - 誤用或濫用JSP中定制標(biāo)記特性。比如,你可以用一個驗證子禁止JSP使用Java語句塊。 - 增強(qiáng)的迭代支持 - 增強(qiáng)了的定制tag機(jī)制支持在不做內(nèi)容嵌套的前提下進(jìn)行迭代的能力。這將優(yōu)化這類非常常見的例子的性能,比如通過迭代來表示一個表格的處理結(jié)果,而不用顯式對表格中每一行進(jìn)行處理。 定制tag庫能夠聲明應(yīng)用監(jiān)聽器 一個定制的tag庫能夠利用servlet2.3中的新特性,聲明一個監(jiān)聽器,用于監(jiān)聽?wèi)?yīng)用程序相關(guān)的事件。 附加的TLD元素 在許多簡單的例子中,聲明變量時,采用附加的TLD元素可不用書寫TagExtraInfo類 在Tag接口中增加resetCustomAttributes()方法,通過由Servlet Container調(diào)用附加的方法,使得在循環(huán)調(diào)用一個tag的實例前調(diào)用該方法。 Tomcat和JServ的區(qū)別 JServ是由Apache開發(fā)并使用的Servlet API 2.0兼容的Servlet容器。Tomcat是完全重寫的Servlet API 2.2和JSP 1.1兼容的Servlet/JSP容器。Tomcat使用了JServ的一些代碼,特別是Apache服務(wù)適配器。 Tomcat的應(yīng)用 實際上,只有針對一個象amazon.com這樣的大型站點,采用apache + tomcat這樣的結(jié)構(gòu)才具有更特出的優(yōu)點,主要體現(xiàn)在具有更好的可擴(kuò)展性和安全性。這種類型的站點的主要特點是每一個頁面都可能是動態(tài)生成的,但這些數(shù)據(jù)中主要部分還是靜態(tài)的(比如,各類圖像GIF、JPG、PNG,流式媒體等)。 想象以下某個站點采用了多個用于負(fù)載均衡的硬件設(shè)備,這些設(shè)備后端連結(jié)一組服務(wù)器,這些服務(wù)器可能是一組相對廉價的運(yùn)行apache的linux服務(wù)器簇。 這組位于前端的服務(wù)器簇將僅占總訪問請求的10%的真正需要調(diào)用servlet的訪問請求發(fā)送給后段的系統(tǒng),后鍛系統(tǒng)可以是一臺Sun的E3500,或是IBM的AS/400,在這個后端的系統(tǒng)上運(yùn)行著Tomcat,可能還包括企業(yè)級數(shù)據(jù)庫。 這種結(jié)構(gòu)的優(yōu)點是兼有可擴(kuò)展性和安全性。假如單位時間內(nèi)訪問請求數(shù)急劇增加,可以用相對較低的費用增加前端的能力。盡管后段的處理部分也需要擴(kuò)充,但通常情況下,這種定位在單個服務(wù)器上的處理部分比較容易擴(kuò)展。由于是通過在這臺功能強(qiáng)大的服務(wù)器上運(yùn)行的單個servlet容器,實際上也就不需要考慮session狀態(tài)在分布式環(huán)境下的維護(hù)這類復(fù)雜的問題。 另外,因為這臺后端服務(wù)器在外界不可以訪問,網(wǎng)上的黑客只能訪問前端的web服務(wù)器,不能直接訪問后端的應(yīng)用服務(wù)器,這就提高了安全性。但這并不意味著黑客們不能通過網(wǎng)絡(luò)瀏覽器進(jìn)行其它形式的攻擊。對于apache->tomcat這種配置來說,前端和后端是通過ajp12協(xié)議來進(jìn)行通信,ajp12不過是http訪問請求的一種轉(zhuǎn)換形式,如果給黑客們足夠的時間,他們也許有能力通過Web層,從后端的數(shù)據(jù)庫中取得一些比如信用卡號等關(guān)鍵數(shù)據(jù)。 Tomcat的安裝 Tomcat在Linux/Unix下的安裝 下載所需軟件:apache 1.3.20――webserver tomcat 3.2.3 ――環(huán)境引擎 JDK 1.2.0 ――Java Develop Kit mod_jserv.so――Apache的Jserv模塊 Apache Webserver 1.3.20: http://httpd./dist/httpd/apache_1.3.20.tar.gz Tomcat3.2.3 : http://jakarta./builds/jakarta-tomcat/release/v3.2.3/bin/jakarta-tomcat-3.2.3.tar.gz JDK 1.2.2: http://java./products/jdk/1.2/download-linux.html mod_jserv.so:http://jakarta./builds/jakarta-tomcat/release/v3.2.3/bin/linux/mod_jk-eapi.so 安裝所需的軟件: 1) Apache: 先解壓apache:tar zxvf apache_1.3.20.tar.gz cd apache_1.3.20 ./configure make make install Apache Webserver被默認(rèn)安裝在/usr/local/apache下 修改apache的配置文件: vi /usr/local/apache/ 安照你的要求自行修改相應(yīng)的參數(shù)。 把下載mod_jk-eapi.so下載到/usr/local/apache/libexec目錄下 2) JDK 解壓:tar zxvf jdk-1_2_2-linux-i386.tar.gz mv jdk-1_2_2 /usr/local/jdk1.2.2 3) Tomcat 解壓:tar zxvf jakarta-tomcat-3.2.3.tar.gz mv akarta-tomcat-3.2.3 /usr/local/jakarta-tomcat 4) 配置環(huán)境變量 編輯/etc/profile文件,這里對環(huán)境變量修改就是修改所有的系統(tǒng)用戶的環(huán)境變量,如果你不希望這么作可以只修改root用戶的環(huán)境變量,那就只要編輯/root/.bash_profile,在文件尾加入下面幾句: JAVA_HOME=/usr/local/jdk1.2.2 export JAVA_HOME JRE_HOME=/usr/local/jdk1.2.2/jre export JRE_HOME TOMCAT_HOME=/usr/local/jakarta-tomcat export TOMCAT_HOME CLASSPATH=/usr/local/jdk1.2.2/lib:/usr/local/jdk1.2.2/jre/lib export CLASSPATH PATH=$PATH:/usr/local/jakarta-tomcat/bin:/usr/local/jdk1.2.2/bin:/usr/local/jdk1.2.2/jre/bin export PATH 配置Tomcat tomcat本身其實就是一個web服務(wù)器,我們可以把他和apache等其他web服務(wù)器連接起來,這兩個服務(wù)器 可以不在同一臺機(jī)器上。底下的操作為在同一臺機(jī)器上的情況,如果想把他們分開在兩臺計算機(jī)上,請 修改/usr/loca/jakarta-tomcat/conf/tomcat.conf cp /usr/loca/jakarta-tomcat/conf/tomcat.conf /usr/local/apache/conf/ vi /usr/local/apache/conf/httpd.conf 在文件結(jié)尾加入: include /usr/local/apache/conf/tomcat.conf 啟動服務(wù) 啟動Apache Web server:/usr/local/apache/bin/apachectl start 關(guān)閉Apache Web server:/usr/local/apache/bin/apachectl stop 啟動Tomcat :/usr/local/jakarta-tomcat/bin/startup.sh start 關(guān)閉Tomcat :/usr/local/jakarta-tomcat/bin/shutdown.sh stop 測試Tomcat 用ps ax確認(rèn)服務(wù)都啟動后,在客戶端的瀏覽器內(nèi)敲入 http://dress/examples/、 如果你看見了jsp、servlet目錄,你的apche與tomcat已經(jīng)連接成功了. 說明 如果你的jsp/servlet運(yùn)行不了或者有錯誤,一般是你的CLASSPATH設(shè)置錯誤 如果你的apache是自己編譯的,編譯apache時請把--enable-module=so打開 Tomcat在Windows下的安裝 下載所需的軟件: JDK1.2.2:http://java./products/jdk/1.2/download-windows.html Apache Web Server: http://httpd./dist/httpd/binaries/win32/apache_1.3.20-win32-no_src-r2.msi Apache Jserver模塊: http://jakarta./builds/jakarta-tomcat/release/v3.2.3/bin/win32/i386/mod_jk.dll Tomcat 3.2.2: http://jakarta./builds/jakarta-tomcat/release/v3.2.3/bin/jakarta-tomcat-3.2.3.zip 安裝 一、安裝JDK1.2.2,并將jdk1.2.2的目錄加入到環(huán)境變量PATH中(Autoexec.bat); 1、 雙擊jdk1_2_2-00x-win.exe文件進(jìn)行安裝,使用缺省配置進(jìn)行安裝,JDK的缺省安裝目錄為 C:jdk1.2.2,JRE的缺省安裝目錄為C:Program FilesJavaSoftJRE1.2; 2、 重啟計算機(jī); 3、 更新下列環(huán)境變量:把C:jdk1.2.2in目錄追加到PATH中;把 C:jdk1.2.2lib ools.jar;C:jdk1.2.2libdt.jar加入到CLASSPATH中。更新 方法:控制面板->系統(tǒng)->環(huán)境->系統(tǒng)變量; 4、 測試applet: 1) 打開command窗口; 2) 切換到C:jdk1.2.2demoappletsTicTacToe目錄; 3) 運(yùn)行appletviewer example1.htm; 4) 一切正常; 5、 測試application: 1) 新建c:jsp目錄并創(chuàng)建一個test.java文件,內(nèi)容如下: public class test { public static void main(String arc[]){ System.out.println("hello world!” ) }; 2) 打開command窗口; 3) 切換到c:jsp目錄; 4) 運(yùn)行javac test.java進(jìn)行編譯; 5) 運(yùn)行java test運(yùn)行這個程序; 6) 一切正常。 二、安裝apache_1.3.20-win32-no_src-r2.msi 1、 雙擊apache_1.3.20-win32-no_src-r2.msi文件進(jìn)行安裝,使用缺省配置進(jìn)行安裝,缺省安裝目錄為 C:Program FilesApache GroupApache,我用$APACHE_ROOT來代替安裝目的地; 2、 修改$APACHE_ROOTconfhttpd.conf: 1、 port:設(shè)置Apache Web Server運(yùn)行時使用的端口號,默認(rèn)是80 ,如果你的系統(tǒng)有IIS或PWS也在運(yùn)行,IIS或PWS使 用了80端口號,于是我把它改成Port 88,以后在瀏覽器上輸入 http://localhost:88/才能訪問到Apache Web Server服務(wù)器,輸入 http://localhost/時能訪問到IIS或PWS,這樣兩個Web Server都可以用了; 2、 DocumentRoot 設(shè)置文檔根目錄,當(dāng)您在瀏覽器上輸入http://localhost/時,服 務(wù)器會從文檔根目錄讀取數(shù)據(jù),我們把他設(shè)為c:jsp,所以把 DocumentRoot設(shè)置為c:jsp; 3、 Apache安裝完后在"開始->程序"菜單組中多了Apache Web Server菜單組,運(yùn)行其中的 apache conctrol中的start來啟動服務(wù),運(yùn)行stop關(guān)閉apache web server,restart重新啟動服務(wù);、 4、 在瀏覽器上輸入http://localhost/或http://localhost:88/,就看到了c:jsp下的所有文件, 這時表明Apache服務(wù)已經(jīng)安裝成功。 將mod_jk.dll拷到Apache所在目錄的modules子目錄中; 安裝Tomcat 3.2.2 (解壓并拷到某個目錄中); 此時所需部件都已經(jīng)安裝完畢,以下是配置過程。 配置 1、設(shè)置以下環(huán)境變量(可以放在autoexec.bat中: SET TOMCAT_HOME=C:PROGRA~1Tomcat SET JAVA_HOME=C:PROGRA~1jdk1.2.2 2、打開TOMCAT的conf子目錄下的tomcat.conf文件以下行前的注釋去掉: LoadModule jserv_module modules/mod_jk.dll 再將對應(yīng)LINUX的類似一行用注釋屏敝掉。 3、打開apache的httpd文件,在最后加入一行 include c:/progra~1/tomcat/conf/tomcat.conf 啟動與測試: 1、 首先啟動apache 2、 進(jìn)入到tomcat的執(zhí)行目錄(bin), 3、 用tomcat.bat start或tomcat.bat run啟動tomcat,此時應(yīng)當(dāng)可以看到正確輸出的classpath,此時Tomcat啟動成功! 4、 在瀏覽器中輸入http://localhost/examples/此時應(yīng)當(dāng)可以看到server返回的三個目錄列表。點擊其中JSP的就可以看到示例了。 5、 只要用官方站下載的程序,照上述幾步應(yīng)當(dāng)能正確啟動JSP環(huán)境,接下來的問題就是如何加入context以便映射到你的工作目錄,并開始JSP世界的探索了。這將在后面加帖。 |
|