做一個果醬瓶[JAMPOT]服務器(網站服務器培訓 郵件服務器培訓視訊服務器培訓 )
——組建JSP、PHP、MySQL Web服務器
忙了幾天,在網上參考了無數文章,經歷了數不清的失敗,總算做好了一個支持JSP、PHP編程語言,MySQL 數據庫的網頁服務器,現將經驗心得整理如下,供朋友們參考,Let’s Go!
一、 應用環境及所需軟件
1. 操作系統:WindowsXP sp2
2. 應用軟件:
(1) J2sdk-1_4_2-Windows-i586.exe
說明:SUN公司出品的Java開發包軟件;
(2) apache_2.0.52-win32-x86-no_ssl.exe
說明:目前最流行的個人Web服務器軟件;
(3) MySQL-4.1.7-win.exe
說明:The world's most popular open source database,關鍵可能是便宜吧J
(4) mod_jk_2.0.46.dll
說明:用於apache和Tomcat之間通訊;
(5) PHP-5.0.2-Win32.zip
說明:最流行的網頁後台編程語言PHP
(6) PHPMyAdmin-2.6.0.zip
說明:用PHP編寫的MySQL數據庫管理軟件
(7) [Odbc] MySQL-connector-Java-3.1.7-bin.jar
說明:JSP訪問連接MySQL數據庫時用驅動文件;
(8) Tomcat-5.0.30.exe
說明:一個JSP應用容器,不能完全代替apache的;
以上軟件都可以在網上找到,也可以到這裡來下載。
二、 安裝軟件及配置
為了方便,請先建立D:\Jampot文件夾,好了,開始安裝軟件:
1. 安裝JDK
運行J2sdk-1_4_2-Windows-i586.exe,在選擇安裝路徑的時候,選擇D:\Jampot\J2sdk1.4.2,安裝完成後,然後到“我的電腦>屬性>高級>環境變量”做如下配置:
添加Java_HOME變量,變量值為:D:\Jampot \j2sdk1.4.2
修改path變量,添加D:\ Jampot\J2sdk1.4.2\bin,這樣無論在何處運行Java命令都行。
重新啟動cmd進入DOS,運行java和javac看有沒有反應,如果出現命令的幫助,那麼java就安裝成功了,也可以運行一個Java小程序看看:
public class TestJdk{
public static void main(String arg[]){
System.out.println("Hello,The Jdk is install successful!");
}
}
保存為TestJdk.Java,然後在CMD下運行
javac TestJdk.Java
Java TestJdk
如果出現“Hello,The Jdk is install successful!”,那麼我們就可以進行下一步了。
2. 安裝apache
(1)運行Apache_2.0.52-win32-x86-no_ssl.exe,一路點"確定"和"接受"就行,選擇路徑時輸入D:\Jampot;安裝成功後的Apache目錄為D:\Jampot\Apache2,安裝成功後Apache服務會自動運行,在IE中輸入http://localhost/可以看到apache的主頁。
(2)修改httpd.conf
apache的配置文件是httpd.conf,位於apache根目錄的下的conf文件夾下
① 修改默認網站根目錄:
在D:\Jampot下建立文件夾www,以此作為網站的根目錄
DocumentRoot "D:/Jampot/apache2/htdocs"
改為DocumentRoot "D:/Jampot/www"
② 修改字符設置
apache解析中文網頁時會產生亂碼,
修改AddDefaultCharset ISO-8859-1為AddDefaultCharset GB2312
或將在AddDefaultCharset ISO-8859-1前加##將其屏蔽
③ 修改默認主頁
當訪問目錄時,apache會自動導入的主頁,優先級以先後順序為准
把DirectoryIndex index.html index.Html 改為
DirectoryIndex index.html index.JSp index.php default.JSP default.PHP index.Html
④ 設置錯誤頁面[建議設置]
這樣對於你的網站會更安全些,如果沒設置,別人在你的網址後隨便輸入一個路徑,會顯示404錯誤,並且會顯示你的服務器版本號,服務器配置一目了然,為了避免這種情況,可以設置錯誤頁面。當出現404錯誤,即找不到網頁時,把訪問者導入到一個錯誤頁面,找到httpd.conf中的這一部分:
# 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
將#ErrorDocument 404 /missing.Html一行修改為ErrorDocument 404 /error/noFile.htm,其中noFile.htm為D:\Jampot\www\error\下一個錯誤文件,需要你自己建立。當發生404錯誤時,進入noFile.htm頁面,可以提示網頁沒有找到。這樣就不可能看到你的服務器軟件信息了。也可以設置其它的錯誤導向的頁面,具體http響應錯誤編號請查閱相關資料。
重新啟動apache,如果沒意外,此時已經安裝成功,把靜態頁面放到d: erver\www\error\目錄下,看能不能成功解析。隨便輸入一個:http://localhost/sdagasgdasasg.htm,看是不是導向你設置的404錯誤,即noFile.htm錯誤頁面. 成功了嗎?好了,開始下一步。
3. 安裝MySQL
運行Mysql-4.1.7-win.exe,默認安裝是在C:\mysql,在這裡我們將MySQL數據庫的安裝到D:\Jampot\Mysql4_1,對於mysql 4.1以前的版本,在安裝完成後可能需要將MySQL目錄內的my-small.cnf復制到C:\Windows下,更名為my.ini並做如下修改:
[MySQLd]
basedir=D:/Jampot/MySQL
datadir= D:/Jampot/MySQL/data
修改path變量,添加D:\ Jampot\Mysql4_1\bin,這樣無論在何處運行MySQL命令都行。
啟動CMD,輸入:
MySQL –u root –p
輸入密碼(假設為abc)
abc
如果出現下面的字符:
Welcome to the MySQL monitor. Commonds end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.7-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. MySQL>
那麼,我們的MySQL數據庫就安裝成功了!下面開始安裝PHP了。
4. 安裝PHP
Php-5.0.2-Win32.zip是一個ZIP壓縮文件,解壓裡面的文件到D:\Jampot\Php5,然後打開PHP5目錄,你會發現有一個叫做"php.ini-dist"的文件,這就是PHP的配置文件了,你需要把它改名成"php.ini",然後復制到Windows目錄下,將D:\Jampot\PHP5目錄下的" PHP5apache2.dll"文件復制到D:\Jampot\Aphache2\bin目錄下。
打開PHP.ini文件,做如下的修改:
找到extension_dir = "./" 改為extension_dir = " D:/Jampot/PHP5/ext"
找到;session.save_path = "/tmp"將';'去掉
設置你保存session的目錄,如session.save_path = " D:/Jampot/PHP5/session_temp";
編輯apache2\conf\httpd.conf文件:
在文件的最後面加上兩句:
LoadModule php5_module bin/PHP5apache2.dll
AddType application/x-httpd-php .php .PHP3
PHPIniDir " D:/Jampot/PHP5"
寫一最簡單的PHP程序測試:
PHPinfo();
?>
命名為info.php存入D:\Jampot\www下,然後地址欄內敲入http://localhost/info.php應該顯示php和apache2的相關信息了,現在可以使用PHP了,但我們還要讓PHP支持MySQL才行,打開PHP.ini文件,做如下的修改:
找到;extension=php_MySQL.dll將';'去掉改為extension=PHP_MySQL.dll
好了,保存,重新啟動apache,寫個程序測試一下。
$link=MySQL_connect('localhost','username','passWord');
if(!$link) echo "fail";
else echo "success";
MySQL_close();
?>
如果運行後出現“success”,那麼就說明你的PHP能使用MySQL數據庫了,到現在為止,我們的服務器已經算配置一半,它支持PHP語言、MySQL數據庫,休息一下。
5. 安裝PHPMyAdmin
解壓phpMyAdmin-2.6.0.zip到D:\Jampot\phpMyAdmin2_6,修改目錄內的config.inc.PHP文件:
設置$cfg['PmaAbsoluteUri']為http://localhost/PHPMyAdmin
設置$cfg['blowfish_secret']='admin'
設置$cfg['Servers']['$i']['auth_type']='cookIE'
設置$cfg['Servers']['$i']['user']為MySQL用戶名
設置$cfg['Servers']['$i']['passWord']為MySQL用戶口令
修改apache內的httpd.conf文件,在最下面加以下語句:
PHP_admin_flag engine on
PHP_admin_flag safe_mode off
Alias /phpMyAdmin "D:/Jampot/PHPMyAdmin2_6"
DirectoryIndex index.PHP
Options Indexes MultiVIEws
AllowOverride None
Order allow,deny
Allow from all
PHP_admin_flag engine on
PHP_admin_flag safe_mode off
PHP_admin_value open_basedir none
php_admin_value open_basedir "D:/Jampot/PHPMyAdmin2_6"
注意:在修改的時候要注意大小寫!
6. 安裝Tomcat
其實,在前面的過程中,並沒有使用Jdk,之所以先安裝它是因為筆者的喜愛,但現在開始,我們就使用Jdk了。運行tomcat-5.0.30.exe安裝文件,在Windows下一路點"確定"就行了,比較簡單,安裝目錄為D:\Jampot\Tomcat5,下面設置環境變量:
添加變量TOMCAT_HOME,變量值為:D:\Jampot\Tomcat5
修改path變量,添加D:\Jampot\Tomcat5\bin
重新啟動後,tomcat會自動啟動.在IE中輸入http://localhost:8080/,然後就可以看到tomcat的主頁。這樣就安裝好了Tomat,寫一個JSP文件測試一下。
<% out.println("This is a JSP page!"); %>
將文件存為jTest.JSp,放到D:\Jampot\Tomcat5\webaPPS\ROOT目錄裡。然後在IE中輸入http://localhost:8080/jTest.JSP,看到了嗎?
我們現在有兩個問題要解決,一是和Aache服務器合並到一起;二是讓JSP能連接MySQL數據庫。
第一步,合並Aache服務器。
Tomcat只是一個用來解析*.JSP文件的容器,它不是服務器,其解析靜態htm/Html文件的能力遠遠不如apache,整合後在同一個端口使apache來解析靜態網頁,而遇到*.JSP網頁時,交由tomcat來解析.
1) 把mod_jk_2.0.46.dll文件復制到apache2根目錄bin文件夾下。
2) 修改apache目錄下的httpd.conf文件,在該文件最後添加以下語句:
#------------------------------------------
#Connecting to tomcat using ajp13
LoadModule jk_module bin/mod_jk_2.0.46.dll
JkWorkersFile "D:/Jampot/Tomcat5/conf/workers.propertIEs"
JkMount /servlet/* ajp13
JkMount /*.JSP ajp13
#-----------------------------------------------------
注意:以上語句的基本意思是:
loadModule一行:加載mod_jk_2.0.46.dll動態鏈接庫模塊,使之與tomcat通訊;
jkWorkersFile:指明工作時tomcat相關文件workers.propertIEs位置;
jkMount:兩行指明當遇到*.JSP和servlet時,交由ajp13協議,繼而轉發給tomcat處理。
3) 在D:\Jampot\Tomcat5\conf目錄下建立workers.propertIEs文件,內容為:
workers.tomcat_home= D:\Jampot\Tomcat5
workers.Java_home= D:\ Jampot\J2sdk1.4.2
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=$(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的相關目錄.
4) 修改D:\Jampot\Tomcat5\conf下的server.XML文件,這個是tomcat的主要配置文件,做以下修改:
① 設置tomcat監聽端口,找到下面的內容:
ort="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
默認的端口是8080,但這個大家都知道,最好修改一下,假設修改為:8178,則如下:
port="8178" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
② 找到以下8009端口的地方,這個很重要,通過8009,tomcat與apache互相通訊,如果下面的部分
被注釋掉,一定要把去掉.
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" />
③ 在上邊添加如下語句:
這句話的意思是給Tomcat增加一個虛擬目錄test,同時在D:\Jampot\www下建立test目錄,將jTest.JSP文件復制到該文件夾。
5) 修改D:\Jampot\Tomcat5\conf下的web.XML文件[建議修改]:
類似於apache下404錯誤頁面的配置,在最後一行之前加入以下內容:
第一個
第二個
<%@ page errorPage="/error/error.JSP" %>
典型的error.JSP錯誤頁面的程序寫法如下:
<%@ page contentType="text/Html;charset=GB2312"%>
<%@ page isErrorPage="true"%>
出錯了:
錯誤信息: <%= exception.getMessage() %>Stack Trace is :
<%java.io.CharArrayWriter cw = new Java.io.CharArrayWriter();
java.io.PrintWriter pw = new Java.io.PrintWriter(cw,true);
xception.printStackTrace(pw);
out.println(cw.toString());
%>
當出現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.30
這樣服務器版本會被別人看到,如果將web.XML文件做如上的修改,就不會出現這種情況。在“服務”裡重新啟動tomcat,然後在IE中輸入http://localhost:8178/test/jTest.jsp,可以運行後,再輸入http://localhost/test/jTest.jsp,是不是可以運行了。這樣,我們只需將JSp放入JSPfile文件夾裡就可以運行了,第一部算是完成了。
第二步——讓JSP連接MySQL數據庫
將mysql-connector-java-3.1.7-bin.jar文件復制到D:\Jampot\j2sdk1.4.2\jre\lib\ext目錄或將MySQL-connector-Java-3.1.7-bin.jar文件復制到D:\Jampot\ Tomcat5\common\lib目錄,
寫一個文件jTestMySQL.JSP做測試:
<%@ page contentType="text/Html;charset=gb2312"%>
<%@ page import="Java.sql.*"%>
<%
Class.forName("org.gjt.mm.MySQL.Driver").newInstance();
String url ="jdbc:MySQL://localhost/test?
user=userName&passWord=userPass&useUnicode=true&characterEncoding=8859_1";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from tBTest";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {
%>
Your first fIEld is:<%=rs.getString(1)%>
Your second fIEld is:<%=rs.getString(2)%>
<%}%>
<%out.print("Operation DataBase is success,congratulate you!");%>
<%rs.close();
stmt.close();
conn.close();
%>
將文件保存於D:\Jampot\www\test下,在IE中輸入http://localhost /test/jTestMySQL.JSp,如果你看到“Operation DataBase is success,congratulate you!”,那麼就說明我們已經可以用JSP連接MySQL數據庫,好了,我們可以使用這個果醬瓶了J
三、 注意問題
1. MySQL數據庫與PHP連接問題:
Mysql4.1以後版本同以前的不同,首先在安裝的過程你,它會要求你設定root密碼,因此在安裝完後,你不能向前的版本那樣使用空密碼進入mysql。另外,MySQL對密碼也進行了改革,我們在增加一個用戶後,不能簡單的使用grant的命令,還要使用PassWord命令,否則,用PHP連接數據庫時會連接不上。舉個例字:
假設我們建立一個使用Test數據庫的用戶userTest,密碼為passTest;
用root進入MySQL,輸入:
grant all on test.* to userTest@locathost identifIEd by ‘passTest’;
這個時候可以用該用戶在CMD下進入MySQL,但用PHP語言連接時,就會報錯。這是因為mysql對密碼的加密方法進行了改變,所以我們要將用戶userTest的密碼改為舊的加密方式儲存, 用root進入MySQL,輸入:
set password for userTest@localhost =old_passWord(‘passTest’);
退出MySQL,然後用PHP連接,成功了吧。
2. 關於PHP的運行方式的問題
ScriptAlias /php/ "c:/PHP/"
AddType application/x-httpd-php .PHP
Action application/x-httpd-php "/php/PHP.exe"
或者
LoadModule php4_module c:/php/sapi/PHP5apache2.dll
AddType application/x-httpd-php .PHP4
ScriptAlias /php4/ "c:/PHP/"
Action application/x-httpd-php4 "/php4/PHP.exe"
AddType application/x-httpd-php4 .PHP
上邊的代碼有人說PHP是以模塊化運行,也有人說是以CGI方式運行的,我沒有研究過,在此記錄供有興趣者研究。
3. Tomcat與Aache合並及虛擬主機的問題
對於apache主機下訪問的JSP文件,實際上物理上不存在與apache的主機上,而是存在TOMCAT的主機目錄裡,例如:
http://localhost/jTest.JSp 中的jTest.JSP文件實際上並不是存在於在 D:\Jampot\www下,而是在D:\Jampot\Tomcat5\webaPPS\ROOT 下。這點請注意,不要混淆概念!
在本文中,我使用的是虛擬目錄的方法來解決的,即:
實際在www下的test目錄是Tomcat中Root下的一個虛擬的test目錄。
在網上還有一種虛擬主機的方法,我不太清楚,在這裡列出來,供有興趣的朋友參考:
Tomcat與apache虛擬主機的實現:
這種方法把tomcat和apache的根目錄設置為同一目錄,但是必須限制客戶對目錄下一些文的訪問,比如存入class 的web-inf,在httpd.conf下添加以下代碼:
#deny the Access to WEB-INF
Order allow,deny
Deny from all
在最後加入下面這段代碼
ServerAdmin [email protected] //你的mail地址
DocumentRoot d:\yourweb //你的項目根目錄
ServerName localhost //你的服務名,若你的機器有域名,設為域名
ErrorLog logs/rosealet_home_log.txt //錯誤日志,在C:\apache\logs下
CustomLog logs/rosealet_Custom_log.txt common //訪問日志,在C:\apache\logs下
4. 關於本文中使用軟件中的版本兼容問題
我在剛開始配置服務器的時候,用的Tomcat軟件是tomcat 5.5.7結果發現不能運行,後來看了log文件才知道,tomcat 5.5以上的版本需要jdk1.5以上版本,害的我又重新下載了一個tomcat 5.0.30才可以使用。
另外,mysql-connector-java-3.1.7-bin.jar文件是mysql-connector-java-3.1.7.zip文件解壓後目錄內的一個文件——有這一個文件就夠了。MySQL-connector-Java-3.1.7.zip文件可以到mysql.com網站下載,我在看了它的幫助以後,發現它建議mysql數據庫使用4.1以後的版本,因此,我不保證該文件大家能夠連接上MySQL數據庫4.1以前的版本。
到此,本文應該告一段落了,我這也要感謝網上眾多的網友,沒有參考他們的相關文章,靠我自己可能需要花費更多的時間和精力,但大部分人在寫的時候沒有署名,因此我只能說感謝moonsbird(http://www.hyd8.net/info/10100.htm)等網友,本文初次寫成,如有錯誤之處,請見諒並告訴本人(mail:[email protected]),謝謝!
本人主頁:http://Javaheart.niwote.com
本人QQ:312652431
網名:墨·非[Mophay]
2005年4月5日星期二
凌晨0時6分
相關下載:
1. http://freeweb.nyist.Net/~bwc/bd/j2sdk-1_4_2.exe
2. http://freeweb.nyist.Net/~bwc/bd/jakarta-tomcat-5.0.30.exe
3. http://freeweb.nyist.Net/~bwc/bd/mod_jk_2.0.46.dll
4. http://freeweb.nyist.Net/~bwc/bd/MySQL-connector-Java-3.1.7-bin.jar
5. http://freeweb.nyist.Net/~guyusl/bd/apache_2.0.52-win32-x86-no_ssl.msi
6. http://freeweb.nyist.Net/~guyusl/bd/MySQL-4.1.7-win.exe
7. http://freeweb.nyist.Net/~guyusl/bd/PHP-5.0.2-Win32.zip
8. http://freeweb.nyist.Net/~guyusl/bd/PHPMyAdmin-2.6.0.zip