1.作者:moonsbird
主題:Windows下Apache+Tomcat+MySQL+jsp+php的伺服器整合設定經驗總結
時間:2004.8.19
原文發表於西南交通大學錦城驛站
2.本文是作者學習幾年來學習jsp/配置伺服器環境的經驗總結。可以轉載,但請註明出處.
開始學習jsp很久了,網路上有許多關於jsp整合的例子,但存在著許多問題。
對於Apache+Tomcat+MySQL+jsp+php的整合,針對不同的Tomcat和apache的版本,稍微有些差別。
就算你E文很好,去看Tomcat和Apache的手冊,也不一定能完全整合成功。暑假在家,網速不像在交大那樣---老黃牛拉破車樣的慢,所以基於此作者查閱大量網上資料,汲其精華,寫這篇文章希望能為初學者提供方便,也可以作為高手的參考手冊。
jsp是優秀的,它是基於Java技術,利用JavaBean/Servlet製作動態網站,Java強大的物件導向程式設計使Jsp相對於php和asp有著得天獨厚的優勢。但學習jsp相對於php和asp來說是有難度的。
我想原因之一就是jsp伺服器環境的配置要棘手一些。對於動態網頁製作,在交大asp曾很長時間佔上風,不太多的「高手」(也許很多人認為使用jsp的是高手吧)使用jsp,交大比較成功的
jsp網站如世紀星網(Tomcat)、網路教育學院網站(Resin)、交大招生就業網(Tomcat),伺服器是
Linux 9,運作相對來說比較穩定可靠。 Linux下的Apache和Tomcat整合我曾經發過一篇文章,需要的大家在錦城搜搜。 linux和windows下整合思想是相同的,利用apache來解析*.html/*.htm
靜態網頁,當遇到*.jsp和servlet時,透過一個apache中的module把jsp頁面拋給Tomcat(或者
resin)來處理,在linux下透過編譯來製作這個module,要麻煩一些,本文透過現成的win下的一個module來完成整合。
廢話不說啦,以下開始整合:
所需軟體
(1) j2sdk-1_4_2-windows-i586.exe
jdk的版本關係倒不是很大,不影響Apache和Tomcat的整合,配置環境變數時注意一些就行了.
(2) apache_2.0.49-win32-x86-no_ssl.exe
apache版本對整合影響不是太大,但最好利用這個版本。
(3) jakarta-tomcat-4.1.30.exe
版本最好用這個版本,其他的我沒有試過,有可能會導致整合不成功。
(3) php-4.3.3-Win32.zip
是一個壓縮包,下載下來直接解壓縮就行了。
(4) mod_jk.dll
這個module是放到apache中的module中去的,利用它來讓Tomcat和Apache之間通訊。
(5) mysql-max-3.23.46a-win.zip
資料庫mysql,其版本對整合影響不大.
(6) jdbc驅動
mysql的驅動程序,和資料庫連接時用
以上軟體我就不把down的地址貼出來啦,去網上搜baidu、北大天網,只要用心找,應該問題不大,如果真的找不到,發信找我要吧。
一.安裝j2sdk
在Windows下,直接執行下載的j2sdk-1_4_1_01-windows-i586.exe文件,根據安裝精靈安裝到一個目錄,例如安裝到d:serverj2sdk
1.配置環境變數:
新增CLASSPATH變數變數值為
./;%CLASSPATH%;D:serverj2sdk1.4.0libdt.jar;d:serverj2sdk1.4.0libtools.jar;
d:serverj2sdk1.4.0bin
這個配置保證java運作時可以找到class類別。
2.新增JAVA_HOME變數,變數值為d:serverj2sdk1.4.0
3.在原來的path變數中,加上d:serverj2sdk1.4.0bin,這樣無論在何處執行java名令都行。
重新啟動
cmd進入dos,運行java和javac看有沒有反應,如果出現命令的幫助,那麼java就安裝成功了也可以運行一個java小程式看看.
public class test{
public static void main(String args[]){
System.out.println("看到這個說明java安裝成功!");
}
}
把上以程式存放在test.java檔中,一定要是test.java才行,再利用指令編譯
javac test.java
如果沒有錯誤,則表示編譯成功,如果有錯,在程式書寫正確的基礎上,剛說明java環境變數沒有配置好,剛重新配置。如果編譯成功,則執行:
java test
注意,不是java test.java!如果無誤,剛印出:
看到這個說明java安裝成功!
gxgx,jdk安裝成功啦!可以進行下一步.
二.apache安裝
1.執行apache_2.0.49-win32-x86-no_ssl.exe,一路點"確定"和"接受"就行,路徑選
d:serverapache groupapache2。
此時apache已經安裝成功,且已運行,在IE中輸入http://localhost/可以看到
apache的主頁。安裝成功!
2.修改httpd.conf
apache的設定檔是httpd.conf,位於apache根目錄的下的conf資料夾下
(1).修改預設網站根目錄:
在d:server下建立資料夾www,以此作為網站的根目錄
DocumentRoot "D:/server/Apache Group/Apache2/htdocs"
改為DocumentRoot "D:/server/www
(2).修改字元設定
apache解析中文網頁時會產生亂碼,
修改AddDefaultCharset ISO-8859-1為AddDefaultCharset GB2312
(3).修改預設首頁
當存取目錄時,apache會自動匯入的主頁,優先權以先後順序為準
把DirectoryIndex index.html index.html.var改為
DirectoryIndex index.html index.jsp index.php default.jsp default.php index.html.var
(4).設定錯誤頁面
這樣對於你的網站會更安全些,如果沒設置,別人在你的網址後隨便輸入一條路徑,會顯示404錯
誤,並且會顯示你的伺服器版本號,伺服器配置一目了然,為了避免這種情況,可以設定錯誤頁面。
當出現404錯誤,也就是找不到網頁時,把訪客匯入到一個錯誤頁面
找到:
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
httpd.conf中的這一部分,#ErrorDocument 404 /missing.html
一行修改為ErrorDocument 404 /error/noFile.htm,其中noFile.htm為d:serverwwwerror下一個錯誤文件,需
要你自己建立。當發生404錯誤時,進入noFile.htm頁面,可以提示網頁找不到。這樣就不可能看到你的伺服器軟體資訊了。也可以設定其它的錯誤導向的頁面,具體http回應錯誤編號請查閱相關資料。
重新啟動apache,如果沒意外,此時已經安裝成功,把靜態頁面放到d:serverwwwerror目錄下,看能不能成功解析。
隨便輸入一個:http://localhost/sdagasgdasasg.htm,看是不是導向你設定的404錯誤,即noFile.htm錯誤頁.
成功了吧!
關於apache中其他參數的意義,我就不說啦,你可以去網上查,其實最好的方法是看httpd.conf中的註解部分,已經說得很清楚啦。
好啦,到此apache安裝成功,你可以休息一下,聽首音樂,開始下一步的安裝:)
三.php安裝
解壓縮php-4.3.3-Win32.zip,到d:serverphp目錄下.下配置PHP和Apache,使其解析php程式。
將d:serverphp目錄中的「php.ini-dist」改名為「php.ini」,並複製到C:windowssystem32
(Win2K目錄為:C:winntsystem32)下,在apache的設定檔httpd.conf中下入以下幾行,使其支援php.
ScriptAlias /php/ "d:/server/php/"
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
Action application/x-httpd-php "/php/php.exe"
在d:serverwww下建立網頁:index.php,內容為:
<html>
<head><title>php測試</title></head>
<?php
phpinfo();
?>
</html>
用文字編輯器編輯好為存為index.php,重新啟動apache,在IE中輸入http://localhost/index.php ,如果出現php的環境變量,說明php,安裝成功,如果不能解析<?php phpinfo(); ?>中的部分,則表示沒有成功安裝。
四.Tomcat的安裝
我用的是jakarta-tomcat-4.1.30.exe安裝文件,在windows下一路點"確定"就行了,比較簡單,安裝目錄為
d:servertomcat
下面設定環境變數:
同jdk的環境變數,新增變數TOMCAT_HOME,值為d:servertomcat;增加變數CATALINA_HOME,值為
d:tomcatserver,在path變數中加入d:servertomcatbin
下面啟動tomcat,運行tomcat目錄下的,bin/startup.bat檔案就行啦,出現tomcat運行控制台,tomcat成功啟動.
在IE中輸入http://localhost:8080/ ,看到大貓的吧,則tomcat安裝成功.
五.安裝MySQL
第一步:解壓縮mysql-max-3.23.46a-win.zip,運行mysql安裝文件,把mysql安裝到d:servermysql
第二步:在環境變數path中加入d:servermysqlbin
第三步:進入d:servermysqlbin目錄,執行winmysqladmin,剛會出現對話框,設定mysql使用者密碼,假設帳號為:root 密碼為:123
第四步:進入dos,進入mysql/bin下,執行以下指令開啟mysql
mysqld-nt --standalone
則mysql開啟
然後運行:
mysql
如果開啟,則出現以下文字:
Welcome to the MySQL monitor. Commonds end with ; or g.
Your MySQL connection id is 1 to server version: 3.23.46-nt
Type 'help;' 或 'h' for help. Type 'c' to clear the buffer.
mysql>
注意:此時mysql沒有設定密碼,為了不讓別人進入你的資料庫,請為mysql設定密碼,具體操作請參考mysql
的中文說明文件。
至此,mysql安裝成功!
六.安裝MySQL的驅動類jdbc
解開jdbc驅動包,把裡面的org資料夾複製到jsp可以找到的位置就行啦。可以是tomcat的根目錄common/classes
資料夾下,也可以是jsp網站classWEB-INF/class/下。當載入驅動程式時,以便能找到相關的類別。或是把jdbc包的路徑加入classpath變數。
七.Tomcat和Apache的整合配置
Tomcat只是一個用來解析*.jsp檔案的容器,它不是伺服器,其解析靜態htm/html檔案的能力遠遠不如apache,
整合後在同一個埠使apache來解析靜態網頁,而遇到*.jsp網頁時,交由tomcat來解析.
第一步:把mod_jk.dll複製到apache根目錄module資料夾下。
步驟二:設定APACHE
開啟apache根目錄下confhttpd.conf
新增以下語句:
#---------------------------- -------------
#connecting to tomcat using ajp13
LoadModule jk_module modules/mod_jk.dll
JkWorkersFile "d:/server/tomcat/conf/workers.properties"
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13
#------------------------------------------------- ----
注意:以上語句的基本意思是:
loadModule一行:載入mod_jk.dll動態連結庫模組,使其與tomcat通訊
jkWorkersFile:指明工作時tomcat相關文件workers.properties位置
jkMount:兩行指明當遇到*.jsp和servlet時,交由ajp13協議,繼而轉發給tomcat處理。
第三步:建立workers.properties文件,在tomcat根目錄conf下建立workers.properties文件,內容為:
workers.tomcat_home=d:servertomcat
workers.java_home=d:serverj2sdk1.4.0
ps=
# worker.list=ajp13
worker.list=ajp12,ajp13
worker.ajp12.port=8007
worker.ajp12.host=localhost
worker.ajp12.type=ajp12
worker.ajp12.lbfactor=1
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp12, ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)jaxp.jar
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)parser.jar
worker. inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)jasper.jar
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$ (ps)servlet.jar
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)webserver.jar
worker.inprocess.class_path=$(workers.java_home)$(ps )lib$(ps)tools.jar
worker.inprocess.cmd_line=-config
worker.inprocess.cmd_line=$(workers.tomcat_home)/conf/jni_server.xml
worker.inprocess.cmd_line=-home
worker.inprocess.cmd_line=$line (workers.tomcat_home)
worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)jvm.dll
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)inprocess.stderr
worker.inprocess.sysprops=tomcat.home=$( workers.tomcat_home)
注意以上文件第一、二行填上tomcat和jdk的相關目錄.
第四步:配置tomca/conf下的server.xml文件,這個是tomcat的主要設定文件,重要配置如下:
1.虛擬目錄設定:
找到下面內容:
<Host name="localhost" debug="0" appBase="/webapps"
unpackWARs="true" autoDeploy="true">
修改為:
<Host name="localhost" debug="0" appBase="d:/server/www"
unpackWARs="true" autoDeploy="true">
使tomcat主目錄為d:serverwww.
找到下面內容:
<Context path="examples" docBase="/examples" debug="0"
reloadable="true" crossContext="true">
修改為
<Context path="" docBase="/" debug="0"
reloadable="true" crossContext="true">
這個我的理解是應該是使tomcat根目錄下的jsp作為一個虛擬主機吧.
2.設定tomcat監聽埠,找到下面的內容:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
預設的連接埠是8080,但這個大家都知道,最好修改一下,假設修改為:8123,則如下:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8123" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
3.找到以下8009埠的地方,這個很重要,透過8009,tomcat與apache互相通訊,如果下面的部分被<!---->註解掉,一定要把<!---->去掉.
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8009" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="0"
useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
第五步:設定tomcat的conf/web.xml檔:
類似apache下404錯誤頁面的配置,在最後</web-app>一行之前加入以下內容:
<error-page>
<error-code>404</error-code>
<location>/error/noFile.htm</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/error.jsp</location>
</error-page>
第一個<error-page></error-page>之間的是404未找到jsp網頁的錯誤導向頁面,使之發生404錯誤時,
網頁導向至/error/noFile.htm,也可以用類似方法加入其多的錯誤代碼導向頁面。
第二個<error-page></error-page>之間的是當jsp網頁出現java.lang.NullPointerException導常時導向至/error/error.jsp錯誤頁面。那麼就需要在第個jsp網頁加入以下內容:
<%@ page errorPage="/error/error.jsp" %>
典型的error.jsp錯誤頁面的程式寫法如下:
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page isErrorPage="true"%>
<html>
<head><title>錯誤頁面</title></head>
<body>
出錯了:</p> 錯誤訊息: <%= exception.getMessage() %><br>
Stack Trace is : <pre><font color="red"><%
java.io.CharArrayWriter cw = new java.io.CharArrayWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(cw,true);
exception.printStackTrace(pw);
out.println(cw.toString());
%></font></pre>
</body>
</html>
當出現NullPointerException異常時tomcat會把網頁匯入error.jsp,且會印出出錯訊息。
第五步主要是安全考慮,在正常情況下,如果找不到網頁即出現404錯誤或jsp程式出錯,在客戶端
會列舉出類似如下的資訊(以tomcat為例,resin類似):
HTTP Status 404 - /sdags.jsp
------------------------------------------ --------------------------------------
type Status report
message /sdags.jsp
description The requested resource (/sdags.jsp) is not available.
-------------------------------------------------- ------------------------------
Apache Tomcat/5.0.19
這樣伺服器版本會被別人看到,如果完成第五步的配置,就不會出現這種情況.
步驟六:配置httpd.conf文件
這種方法把tomcat和apache的根目錄設定為同一目錄,但必須限制客戶對目錄下一些檔案的訪問,例如存入class
的web-inf,在httpd.conf下加入以下程式碼:
#deny the access to WEB-INF
<Directory ~ "/WEB-INF/">
Order allow,deny
Deny from all
</Directory>
這樣,當試圖記問http://localhost/web-inf/時,apache將會拒絕.
到此為至,tomcat和apache的整合就完成啦.重新啟動tomcat和apache,
把jsp網頁放到d:serverwww下,例如:
<html>
<h1>JSP test<hr>
<%out.println("Hello World!");%>
</html>
存為index.jsp,在IE中輸入http://localhost:8123/index.jsp
如果出現了
Hello World!
剛說明tomcat運作正常,在IE中輸入http://localhost/index.jsp ,如果也出現
Hello World!
恭喜你!整合成功啦,你在jsp漫長艱辛的道路上邁出了一大步~!
以上整合文章我是在倉促的的時間完成的,可能有些錯誤。或考慮不周的地方,但整體應該沒
太大問題,我是重複使用這種方法整合成功的。如果有疑問,可以直接給我聯絡.
moonsbird: mail:[email protected]
http://blog.csdn.net/jangill/archive/2007/03/18/1532857.aspx