程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 做一個果醬瓶[JAMPOT]服務器

做一個果醬瓶[JAMPOT]服務器

編輯:關於JAVA

做一個果醬瓶[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文件測試一下。

JSP test


<% 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錯誤頁面的配置,在最後一行之前加入以下內容:

404

/error/noFile.htm

Java.lang.NullPointerException

/error/error.JSP

第一個之間的是404未找到JSP網頁的錯誤導向頁面,使之發生404錯誤時,網頁導向至/error/noFile.htm,也可以用類似方法添加其他的頁面。

第二個之間的是當JSP網頁出現Java.lang.NullPointerException導常時導向至/error/error.JSp錯誤頁面。那麼需要在error .JSP網頁中加入以下內容:

<%@ 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

在最後加入下面這段代碼

       //localhost為本機,你可用本機ip

  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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved