做一个果酱瓶[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程序测试:
<?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,写个程序测试一下。
<?php
$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"
<Directory "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"
</Directory>
注意:在修改的时候要注意大小写!
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文件测试一下。
<html>
<hl>JSP test <hr>
<% out.println("This is a jsp page!"); %>
</html>
将文件存为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监听端口,找到下面的内容:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
ort="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
默认的端口是8080,但这个大家都知道,最好修改一下,假设修改为:8178,则如下:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8178" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="0"
useURIValidationHack="false" disableUploadTimeout="true" />
② 找到以下8009端口的地方,这个很重要,通过8009,tomcat与apache互相通讯,如果下面的部分
被<!---->注释掉,一定要把<!---->去掉.
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" />
③ 在</Host>上边添加如下语句:
<Context path="/test" docBase="D:\Jampot\www\test" debug="0" reloadable="true"/>
这句话的意思是给Tomcat增加一个虚拟目录test,同时在D:\Jampot\www下建立test目录,将jTest.jsp文件复制到该文件夹。
5) 修改D:\Jampot\Tomcat5\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错误页面。那么需要在error .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);
xception.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.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.*"%>
<html>
<body>
<%
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();
%>
</body>
</html>
将文件保存于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 下。这点请注意,不要混淆概念!
在本文中,我使用的是虚拟目录的方法来解决的,即:
<Context path="/test" docBase="D:\Jampot\www\test" debug="0" reloadable="true"/>
实际在www下的test目录是Tomcat中Root下的一个虚拟的test目录。
在网上还有一种虚拟主机的方法,我不太清楚,在这里列出来,供有兴趣的朋友参考:
Tomcat与Apache虚拟主机的实现:
这种方法把tomcat和apache的根目录设置为同一目录,但是必须限制客户对目录下一些文的访问,比如存入class 的web-inf,在httpd.conf下添加以下代码:
#deny the access to WEB-INF
<Directory ~ "/WEB-INF/">
Order allow,deny
Deny from all
</Directory>
在最后加入下面这段代码
<VirtualHost localhost> //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下
</VirtualHost>
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