明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在Linux上構(gòu)建Jsp環(huán)境

[摘要]老早就在國(guó)外的網(wǎng)站上看到Jsp(Java Server Pages)的介紹,說(shuō)它如何如何的好, 如何如何的強(qiáng)大,可是只知道jsp這玩意不錯(cuò),卻一直沒(méi)有機(jī)會(huì)用上。聽(tīng)說(shuō)unix下 配置jsp環(huán)境頗為復(fù)雜,因此一直沒(méi)敢去碰。后來(lái)在臺(tái)灣的站點(diǎn)上找到了一份臺(tái)灣老 寫(xiě)的在Linux下配置jsp環(huán)境的文章,如獲...
老早就在國(guó)外的網(wǎng)站上看到Jsp(Java Server Pages)的介紹,說(shuō)它如何如何的好, 如何如何的強(qiáng)大,可是只知道jsp這玩意不錯(cuò),卻一直沒(méi)有機(jī)會(huì)用上。聽(tīng)說(shuō)unix下 配置jsp環(huán)境頗為復(fù)雜,因此一直沒(méi)敢去碰。后來(lái)在臺(tái)灣的站點(diǎn)上找到了一份臺(tái)灣老 寫(xiě)的在Linux下配置jsp環(huán)境的文章,如獲至寶,于是就馬上操刀上陣,想試試如何。

  可惜照樣子畫(huà)葫蘆未果。

  于是到國(guó)內(nèi)幾個(gè)大的bbs內(nèi)到處查找,尋訪(fǎng)幾個(gè)前輩,找到一些零碎的配置方法。 這些方法大都是gnujsp0.9x/1.0配合ApacheJser-1.x.x來(lái)運(yùn)行jsp的,我都一一照樣 進(jìn)行配置,結(jié)果頂多是讓ApacheJserv運(yùn)行起來(lái)而已。一直無(wú)法運(yùn)行jsp。

  最后筆者決心自己獨(dú)立將配置方法摸透,于是所有軟件包都盡量從官方網(wǎng)站下載回來(lái)。 以下是筆者配置過(guò)程中使用到的軟件包:

Apache_1.3.12.tar.gz (從www.apache.org下載)
ApacheJserv-1.1.2.tar.gz(從java.apache.org下載)
gnujsp-1.0.tar.gz(從教育網(wǎng)內(nèi)獲得)
JSDK-2.0.tar.gz(從教育網(wǎng)內(nèi)獲得)
JDK-1.2.2.tar.gz(For Linux版本,從freesoft.online.sh.cn及www.sun.com可下載)
  經(jīng)過(guò)連續(xù)8個(gè)小時(shí)反復(fù)琢磨gnujsp-1.0 中的安裝文檔以及綜合手頭幾份安裝文章, 還有從java.apache.org上下載的簡(jiǎn)單安裝配置文章,筆者最后終于成功將jsp環(huán)境 配置成功并成功地運(yùn)行了調(diào)用bean的jsp程序。

  以下就安裝和配置的原理、過(guò)程、注意事項(xiàng)以及關(guān)鍵點(diǎn)等進(jìn)行詳細(xì)描述。

一、配置要求

RedHat 5.x 或 6.x (筆者在TurboLinux 4.02/6.0 Bluepoint1.0/2.0 等系統(tǒng)中都順利編譯、配置通過(guò))
JSDK2.0(其實(shí)就是需要一個(gè) 70多k的jsdk.jar)
gnujsp1.0(其實(shí)就是需要里面的jar文件而已)
JDK-1.x.x or JDK-1.2.x(兩個(gè)版本都能夠順利通過(guò)編譯和配置)
ApacheJserv1.0 or 1.x.x 編譯需要的make,gcc等程序、編譯器與函數(shù)庫(kù)
二、基本配置原理

  要讓jsp能夠正確解析并運(yùn)行良好的話(huà),需要確保ajp1.2(apacheJserv protocol1.2)
可以正常地在本地(local)端口8007通信,Servlet需要能夠正常執(zhí)行,并且要合理配置好Jserv的配置文件使gnujsp正確解析jsp文件。本文采用static(靜態(tài))編譯方式編譯 ApacheJserv。

三、基本步驟

  首先要確保ApacheJserv正確編譯并測(cè)試通過(guò)。然后正確配置ApacheJserv的配置文件,讓gnujsp可以解析jsp文件。

  以下是安裝步驟示意圖:
  JDK-->JSDK-->apache(基本配置)-->ApacheJserv(配置/編譯)-->apache(配置/編譯/安裝) -->gnujsp-->編輯ApacheJserv配置文件-->測(cè)試-->OK

四、詳細(xì)過(guò)程

1、安裝JDK

  其實(shí)不存在什么安裝,只需要將JDK拷貝到一個(gè)固定目錄就可以了。這里筆者采用JDK-1.2.2的二進(jìn)制版本。對(duì)于采用1.1.x的讀者,如果是選擇了static的方式 將Apache和ApacheJserv整和,出現(xiàn)故障的時(shí)候可以采用DSO模式(建議JDK-1.1.x版本的都采 用DSO模式比較好)。

  #tar xfz JDK-1.2.2-linux-i386.tar.gz
  #mv JDK-1.2.2 /www/JDK122

2、安裝JSDK

  和安裝JDK道理一樣,只需要解包后拷貝到一個(gè)固定目錄就可以了。 不過(guò)要注意的是,這里實(shí)際上只是用到這個(gè)包的jsdk.jar文件,所以一定要知道這個(gè)文件的路徑。

  #tar xfz jsdk-2.0.tar.gz
  #mv JSDK-2.0 /www/jsdk
  #ls -l /www/jsdk/lib
  total 80 -r--r--r-- 1 root root 76453 Jun 28 01:03 jsdk.jar

3、apache基本配置

  這個(gè)其實(shí)并不能說(shuō)是真正的配置,只是在第一次解包的時(shí)候要生成一些必須的.h文件才需要 的一步而已。相當(dāng)于預(yù)配置。

  #tar xfz apache_1.3.12.tar.gz
  #cd apache_1.3.12
  #./configure
  #cd ..

  這樣就會(huì)生成了諸如httpd.h等的頭文件。如果沒(méi)有這些文件的話(huà),以后配置ApacheJserv或者 Php3等都會(huì)報(bào)錯(cuò)的。

4、ApacheJserv配置與編譯

  這里需要使用的指令至少有:

  --with-apache-src= (指定了apache源碼的路徑,用于static方式的編譯)
  --with-jdk-home= (指定jdk的根目錄)
  --with-JSDK= (指定jsdk.jar的目錄,注意是大寫(xiě)的JSDK!!!)

  至于其他的并不是一定要寫(xiě),但是建議還是要指定諸如安裝目錄,jdk平臺(tái)號(hào)碼(1或者2)等。 其中java-platform是這樣指定的:即如果使用的是jdk-1.1.x的就是1(默認(rèn)是1,可以不寫(xiě))。如果是jdk-1.2.x就指定是2。

  #tar xfz ApacheJserv-1.1.2.tar.gz
  #cd ApacheJserv-1.1.2
  #./configure --with-apache-src=../apache_1.3.12 --prefix=/www/jserv   >--with-jdk-home=/www/jdk122 --with-java-platform=2   >--with-JSDK=/www/jsdk/lib/jsdk.jar --disable-debugging
  #make
  #make install
  #cd ..

5、Apache的配置編譯

  關(guān)于Apache的配置很多文檔都有說(shuō)明,這里就不贅述了。

  #cd apache_1.3.12
  #./configure --prefix=/www/httpd --activate-module=src/modules/jserv/libjserv.a
  #make
  #make install

6、gnujsp安裝

  其實(shí)只是需要gnujsp-1.0中的幾個(gè)jar文件而已。

  #tar xfz gnujsp-1.0.tar.gz
  #mkdir /www/gnujsp
  #cp gnujsp-1.0/lib/*.jar /www/gnujsp
  #mkdir /www/gnujsp/bean_jsp
  #ls -l /www/gnujsp
  drwxr-xr-x 10 root root 4096 Sep 15 15:56 bean_jsp/
  -rw-rw-r-- 1 root root 125972 Sep 15 12:55 gnujsp10.jar
  -rw-rw-r-- 1 root root 153015 Sep 15 12:55 gnujsp10test.jar
  -rw-rw-r-- 1 root root 37291 Sep 15 12:55 servlet-2.0-plus.jar
  -rw-r--r-- 1 root root 38826 Sep 15 12:55 servlet-2.1.jar

7、Jserv配置文件的編輯

  這個(gè)是jsp是否能夠正確解析使用的關(guān)鍵,也是本文的重點(diǎn)。

  關(guān)鍵點(diǎn)在于設(shè)置好jserv的相關(guān)文件:

  jserv.conf
  jserv.properties
  zone.properties

  或者新建立一個(gè)properties文件,編輯的順序大概是:
jserv.conf-->jserv.properties-->zone.properties-->自定義的properties文件。

  現(xiàn)在假設(shè)你需要定義一個(gè)叫g(shù)sp的zone,那么可以按照以下步驟和方法編輯相關(guān)內(nèi)容:

  *jserv.conf
在編輯這個(gè)文件前,請(qǐng)將"include /www/jserv/etc/jserv.conf"這句 添加到apache的httpd.conf文件內(nèi)。文檔中說(shuō)這句話(huà)可以放到任何地方,不過(guò)經(jīng)過(guò)實(shí)踐發(fā)現(xiàn):最好還是放到httpd.conf的末尾!!!!!

  你可以這樣運(yùn)行:
#echo "include /www/jserv/etc/jserv.conf" >> /www/httpd/conf/httpd.conf

  做好后,再用例如vi編輯器編輯jserv.conf。如果你想記錄(log)jserv的所有動(dòng)作,那么最好是允許log,去掉以下語(yǔ)句注釋:
ApJServLogFile /www/jserv/logs/mod_jserv.log

  然后找到"# Mount point for Servlet zones"這行,這里是定義Servlet zones 的mount點(diǎn)的(類(lèi)似linux的安裝點(diǎn))。我們加入以下這行:
ApJServMount /gsp /gsp

  接著找到ApJServAction關(guān)鍵字,加入以下這行:
ApJServAction .jsp /gsp/gnujsp
這個(gè)是定義了.jsp文件是給gnujsp解析的。這樣jserv.conf文件就基本設(shè)置好了。

  *jserv.properties
這里要設(shè)置一下wrapper.classpath,找到wrapper.classpath關(guān)鍵字,添加以下這行:
wrapper.classpath=/www/jdk122/lib/tools.jar

  接著找到"# Servlet Zones parameters"這行,修改zones=root成為:
zones=root,gsp (添加gsp這個(gè)zone)

  接著下面幾行在 root.properties=/www/jserv/etc/zone.properties后添加定義gsp的properties行:
  gsp.properties=/www/jserv/etc/gsp.properties

  基本上jserv.properties就設(shè)置好了。

  *gsp.properties
至于zone.properties就不需要設(shè)置,因?yàn)檫@里定義了一個(gè)新的zone-->gsp,起作用的是gsp.properties。

  找到: # List of Repositories 這行,然后添加以下幾行:
  repositories=/www/gnujsp/gnujsp10.jar
  repositories=/www/gnujsp/servlet-2.0-plus.jar
  repositories=/www/gnujsp/bean_jsp

  其中第三行是定義了bean的響應(yīng)目錄,這個(gè)目錄可以隨便定義。但是必須是真實(shí)存在的。

  找到"# Servlet Aliases" 這行,添加別名行:
  servlet.gnujsp.code=org.gjt.jsp.JspServlet
  servlet.gnujsp.initArgs=checkclass=true,\(請(qǐng)注意不要斷行回車(chē))
  <pagebase=/www/httpd/htdocs,scratchdir=/www/httpd/jsp,\(請(qǐng)注意不要斷行回車(chē))
  <debug=true,compiler=builtin-javac -classpath
  %classpath%:%scratchdir%:/www/gnujsp/servlet-2.0-plus.jar
  :/www/gnujsp/gnujsp10.jar
  :/www/gnujsp/bean_jsp -d %scratchdir% -deprecation %source%

  其中第二行開(kāi)始到最后結(jié)束其實(shí)是同一樣,由于篇幅問(wèn)題才加入了換行符號(hào)。 請(qǐng)大家一定要注意盡量使用同一行!!!!!!!,并且注意其中的符號(hào)不可以缺少任何一個(gè)。

  其中一些參數(shù)做一下解釋?zhuān)?

pagebase意思是允許解析jsp文件的起始目錄。
scratchdir是生成的.java 和.class文件的臨時(shí)目錄。
請(qǐng)大家一定要注意這個(gè)目錄必須對(duì)nobody是可寫(xiě)的!!!所以必須用chown命令將這個(gè)目錄的owner和 group改成nobody。
其后的是classpath是定義搜索的路徑,其中要包括bean的目錄,否則沒(méi)辦法使用bean的。另外你也可以增加多幾個(gè)類(lèi)似的目錄,但是必須在以上文件中都要有定義。
  至此:基本的設(shè)置就全部完成了。接下來(lái)就可以進(jìn)行測(cè)試了。

8、測(cè)試

  首先,確定你已經(jīng)重新啟動(dòng)了apache使所有設(shè)置生效。然后可以在瀏覽器里輸入“http://localhost/gsp/Hello”,如果出現(xiàn):

  Example Apache JServ Servlet
  Congratulations, ApacheJServ 1.1.2 is working!

  那么說(shuō)明servlets運(yùn)行正常。 然后,就是創(chuàng)建一個(gè)test.jsp的文件:

  <html>
  <body>
    <h1>The Famous JSP Hello Program</h1>
    <% SString s = "GNUJSP"; %>
  The following line should contain the text "Hello GNUJSP World!".
  <br>If thats not the case start debugging ...
  <p>Hello <%= s %> World!
  </body>
  </html>

  然后放到htdocs目錄內(nèi),并運(yùn)行。如果正確被執(zhí)行的話(huà)說(shuō)明一切都基本正常了。

  接下來(lái)測(cè)試一下gnujsp支持中文是否正確。將以上的test.jsp文件修改成中文的字符就可以看出是否正確了。筆者的實(shí)驗(yàn)中發(fā)現(xiàn)gnujsp對(duì)中文支持很不錯(cuò),不需要任何補(bǔ)丁。

五、注意事項(xiàng)

  在詳細(xì)步驟中筆者也強(qiáng)調(diào)多次了。這里再?gòu)?qiáng)調(diào)一次。這些也是成功的關(guān)鍵點(diǎn):

第一次解包apache后要先運(yùn)行configure以產(chǎn)生相應(yīng)的頭文件。
創(chuàng)建的scratchdir目錄必須是對(duì)任何人都是可寫(xiě)的,用nobody的owner。
對(duì)于要使用bean目錄必須也在gsp.properties中定義好,而且需要使用的 bean組件必須放到你指定的bean目錄中。
不需要對(duì)系統(tǒng)的path進(jìn)行修改,一些文章說(shuō)需要修改,其實(shí)并不需要,因?yàn)榕渲梦募杏衏lasspath。
(6)結(jié)束語(yǔ)

  本文之所以將并不是非常復(fù)雜的配置過(guò)程和原理闡述得如此詳細(xì),就是希望讀者閱讀后能夠正確配置jsp環(huán)境,不要再為jsp環(huán)境頭疼了。其實(shí)除了采用這 個(gè)方案外,還可以采用tomcat,jrun等等。gnujsp只是一個(gè)廉價(jià)的方案。性能和 功能并不是很好。

  筆者還編寫(xiě)了一個(gè)簡(jiǎn)單的安裝腳本,幫助讀者更加方便地安裝配置jsp環(huán)境。 詳細(xì)可參考筆者另外的文章。