QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 926|回复: 0

RedHat Linux 网络服务器构架实务

[复制链接]
发表于 2002-12-3 12:18:02 | 显示全部楼层 |阅读模式
RedHat Linux 网络服务器构架实务
[code:1]

A compendious Configure Guide for RedHat Linux 7.2
Tell you how to use RedHat 7.2 build your web develop server step by step










作者 :赵凤君(叶三耿)
邮件 : [email protected]
版本 :Chs_ 0.0.1
最后修改:Decmber 22,2001
Copyleft ( 2001 ) with GNU Public License.


Copyleft ( 2001 ) with GNU Public License.

本文档由赵凤君(叶三耿)原创于2001年12月18日。遵循GNU Public License(GPL)规范,特声明如下:在不用于商业目的的前提下,任何人均可自由使用、复制、传播和修改本文档。但是,如果您修改了本文档,您应当保留本版权说明,并书写您的修改记录在文档的修改日志中,同时将修改后的结果发布到网络上。


Author : Fengjun zhao (yesgo)
Mail : [email protected]
Site: http://yesgo.gledecity.com
Qq; 27565476
Version : chs_0.0.2
Last revised : Decmber 22,2001
Copyleft ( 2001 ) with GNU Public License.







目录
Copyleft ( 2001 ) with GNU Public License. 2
目录 3
告诉我您的看法 6
前言 7
软件列表 9
配置步骤 10
Step 1 RedHat 7.2 install 10
Step 2 X setup 10
Step 3 Services setup 11
Step 4 Dns setup 11
1 创建标准区域 11
2 创建域名库文件 11
3 重新启动DNS服务 12
4 域名查询 12
Step 5 KDE setup 12
Step 6 Ftp setup 12
Step 7 MySQL、Apache and php Unistall 13
Step 8 MySQL install 13
1 准备用户 13
2 安装MySQL 13
3 修改文件夹权限 13
4 重新加载动态库 14
5 测试MySQL 14
6 创建启动脚本 14
Step 9 Apache configure 15
Step 10 Php install 15
Step 11 Apache install 16
1 安装Apache 16
2 建立符号连接 16
3 编辑配置文件 16
4 测试Apache 16
5 创建启动脚本 16
Step 12 Jvm setup 17
Step 13 Classes Install 17
Step 14 Edit /etc/profile 18
Step 15 Resin Install 19
1 安装Resin 19
2 建立符号连接 19
3 修改配置文件 19
4 测试Resin 21
5 创建启动脚本 21
Step 16 PhpMyAdmin install 23
1 安装phpMyAdmin 23
2 添加身份验证 23
3 添加虚拟主机 23
4 测试phpMyAdmin 24
Step 17 Server Test 24
例一:使用连接串连接数据库 24
例二:用连接池连接数据库 27
例三:用处理层连接数据库 28
例四:测试PHP 34
Step 18 Configuration debug 35
常见错误一:You don have permission 35
常见错误二:404 Not Found 35
常见错误三:java.lang.ClassNotFoundException 36
常见错误四:Invalid authorization specification 37
常见错误五:Invalid authorization specification 37
常见错误六:中文乱码 38
Appendix 40
Appendix I : Thanks 40
Appendix II : Todo List 40
Appendix III: Revision log 40






告诉我您的看法

在LINUX的路上,我只是一个初学者。这本来是我最近配置服务器的一份笔记,然后我将其整理成一篇配置文档,后来我把它发布到网络上,希望能够对初学者有所帮助并能够得到大家的建议,使其更加严谨和完善。
我想,开放源代码的好处之一就是将自己的东西拿出来与大家分享,让大家去剖析自己、批判自己,从而使其更加严谨和完善。所以,虽然深知自己的浅薄,做的也只是一些很粗浅的东西,但我还是将它拿出来,接受大家的检验。所以,我非常希望能够得到您的反馈,包括意见和建议等等。
如果您发现如下情况,请不吝告知:
2 文档当中是否有错误?
2 语言表述是否清晰和完善?
2 您是否需要其他内容?如果是,您需要什么内容?
2 文中举例是否正确?是否需要更多的例子?
2 文档排版是否舒适?如果不舒适?您的建议是什么?
2 您最欣赏的是文档的哪些方面?哪些章节?
如果您有任何意见建议,请注明文档名称、问题、错误的章节、页码等信息告知与我。
您可以通过如下方式与我联系:
2 电子邮件: [email protected] [email protected] (前者优先)
2 个人主页: http://yesgo.gledecity.com (当前不可用)
2 QQ :27565476
2 地址: 中国 . 深圳

非常感谢您阅读本文档,如果您按照本文档配置成功,祝贺您!如果遇到问题,告诉我。






前言

这里我将说明本文档的书写动机、配置目标、主要内容、遵循原则和使用说明。
我主要的从事领域是网络开发,主要采用的技术方案是
FreeBSD/Linux+MySQL/Oracle+JavaBean/EJB+Jsp,也就是所说的四层结构(也有人认为是三层结构,但在J2EE中添加了界面层的概念)。项目开发过程中,常常需要进行服务器的构架,每次配置完毕我都会写一份简单的配置文档作为项目技术文档的一部分。这份文档是我一次次配置的结晶,我将构建网路服务器常用的部分写进了本文档,其一可以作为初学者的安装向导,其二也可以听取大家的意见和建议,使之更加严谨和完善。
本文档的目标是构架一个比较规范的RedHat开发服务器作为项目的开发环境。本文档共十八个步骤,简明而全面的介绍了DNS、FTP、 MySQL、Apache 、JVM、 Resin、 PHP等服务器的配置办法。
下面是我书写本文档所遵循的几个原则:
1、 力求简明:去除任何多余的步骤;让命令说话,只加必要的注释,这样方便大家作为配置清单使用。本文档主要告诉读者如何去做,很少说明为什么那样做(这一点在本版本中有所改善),但需要注意的是,如果您忽略了其中的任何一步都可能导致后面出错;
2、 系统全面:步骤贯穿从安装操作系统到配置完成的全过程,初学者一步一步照做即可;服务器的配置是一个系统的过程,很多说明文档只是说明某几个软件的配置方法,没有统筹兼顾,所以照搬往往失败;
3、 力求严谨:这是我的一个目标,也是我发布原因之一,当然这需要大家的检验才能实现;
4、 保持最新:包括操作系统在内,所有的软件都是截止到12/22/2001的最新版本,如果有新的软件版本出现,我也会努力做到及时更新;
5、 精选软件:文中提及的软件都是大家所熟悉的,只有两个需要说明。其一:为什么不选择FreeBSD而用Redhat?FreeBSD可谓是Intel平台上最好的网络操作系统,但它对JAVA(尤其是新版本的JDK)的支持很差,我曾在较长一段时间内采用FreeBSD作为JAVA开发平台,然而由于SUN并没有发布FreeBSD上的JDK,所以经常造成系统崩溃,已经是多次的经历了;为什么不用Tomcat而使用Resin?虽然Tomcat是Apache组织的一个项目,虽然它也在不断完善起来,但较之Resin还是有一定的差距;Resin在中文支持、执行效率、可定制性、升级速度、支持J2EE等方面都有不俗的表现,也是我个人已经体会到的;虽然我怀疑它在高端应用、系统负载等方面的性能,但应付中小型的Web项目方面应该是绰绰有余的;
6、 侧重JSP:以搭建JSP开发环境为主,可以作为JSP初学者的服务器配置手册:其一:RH7.2增强了多语言的支持,如果你在安装的过程中选择语言时选择了i18n的简体中文包,加上Resin对中文的良好支持,你无需声明Content-Type(任何方式的声明都不需要),中文将自动支持,这一点文档中也已说明;其二:提供了Resin连接池的配置方法和调用方法,并提供了一个用于数据库连接和处理的组件;其三:提供了添加一个JSP虚拟主机的详细方法,从DNS FTP APACHE到Resin全面讲述;其四:指出了JDBC2.0的支持办法,并提供代码进行测试;
7、 编译安装:软件全部编译安装,有益于系统可定制性和系统稳定性;
8、 目标读者:linux初学者的配置向导和中高级读者的参考;
9、 配置目标:本文档当前最适合作为企业内部开发服务器的配置手册,如果作为Internet服务器,需要考虑的安全因素还很多,最起码不能全部安装,也不需要安装X server,Internet 服务器不仅需要我文档中提及的功能,更需要一个简洁安全的系统;
10、 功能清晰:我将服务器定位在一个DNS+FTP+MySQL+Apache+Resin+Php构架的Web开发服务器,而将可有可无的服务去掉。所以,文档中没有提及QMAIL、ORACLE和ASP、FrontPage扩展等配置方法。除了功能的分离和读者的需求之外,Oracle的最佳运行平台是SUSE Linux,ASP的最佳运行平台是NT,至于Qmail,后续版本可以增加进去;
以下是本文档的使用说明:
1、颜色说明:
深蓝色: 在原文文档中修改的或者添加的部分
深绿色: 我的注释
2、符号说明
#: 系统或者软件配置文档中原有的注释;
##: 我为随后段落做的说明
//: 我的行末说明
/*…*/:篇幅较长的说明
3、命令说明:
我习惯使用vi来表示编辑一个文件,如果不喜欢使用这个工具,你完全可以使用Advanced Editor之类的可视化编辑器或者mc等其他命令。
偶尔我会在命令之前加上shell>表示这是一个命令,以与文件内容区别开来,但这个版本是中文的,所以我一般不加该符号。
make 和make install是可以使用make;make install替代的,但为了便于查看每一步的提示信息,建议分开执行。
. /在文中很多地方出现,中间没有空格,而且点号也不明显,需要注意。



赵凤君
二○○一年十二月二十二日


软件列表

下载下面的软件并将它们放到/home/src目录。首先要创建一个系统帐户,然后将软件放到该目录下。下面的软件都将在本文档中用到,下面的连接都是截止到12/22/2001的最新版本:

RedHat 7.2
http://redhat.pacific.net.au/redhat/linux/7.2/ja/iso/i386/
mysql-3.23.46.tar.gz
http://www2.linuxforum.net/mirror/mysql/Downloads/MySQL-3.23/mysql-3.23.46.tar.gz
mm.mysql-2.0.4-bin.jar
http://www2.linuxforum.net/mirror/mysql/Downloads/Contrib/mm.mysql-2.0.4-bin.jar
apache_1.3.22.tar.gz
http://www.apache.org/dist/httpd/apache_1.3.22.tar.gz
php-4.1.0.tar.gz
http://www.php.net/do_download.php?download_file=php-4.1.0.tar.gz
j2sdk-1_3_1_01-linux-i386.bin
http://java.sun.com/j2se/1.3/download-linux.html
jaf1_0_1.zip
http://java.sun.com/products/javabeans/glasgow/jaf.html
javamail1_1_3.zip
http://java.sun.com/products/javamail/javamail-1_1_3.html
resin-2.0.4.tar.gz
http://www.caucho.com/download/resin-2.0.4.tar.gz
phpMyAdmin_2.1.0.tar.gz
http://phpmyadmin.sourceforge.net/download.html
//phpMyAdmin的下载页我当前打不开,该软件最新的版本是2.2.0,我没有下载到。不久我将更新这个软件的配置方法。






配置步骤

Step 1 RedHat 7.2 install
我的建议:
1、 安装时为/home建立单独的分区,因为/home是用户数据的存放之地,本文档中也将软件的安装文件都放到这个目录下,所以,这样做当你下次重新安装系统的时候,可以保留该分区,数据也就得以保全;
2、 采用定制安装的方式并选中’Everything’选项,这样特别适合于初学者,否则后面的安装过程中可能会出现找不到某个包或某个命令的情况;但如果是配置Internet服务器,就应该只选择必需的包,做到尽量的精简才够安全;
3、 选择语言时,建议选中simplified chinese(P.R.CHINA)选项,这样,当你配置好服务器的时候,在程序代码中无需任何声明,中文将被支持而不会乱码;
4、 使用Gnome做为登陆管理器,使用KDE作为默认的Session,设置默认启动到X,这样做的目的是为了方便远程控制;
5、 IP: 192.168.1.2,这是我在本文档中使用的IP,这个可以自行设置。
--------------------------------------------------------------------------------------------
Step 2 X setup
##这一步完成后,重启服务器,然后你就可以使用Extra!X等远程控制软件以图形界面在微软平台上进行服务器配置,这样做的好处是可以同时控制服务器端和客户端,不必奔走在两台机器之间。
vi /etc/X11/gdm/gdm.conf
[xdmcp]
Enable=1

vi /etc/X11/gdm/Sessions/Default
exec /etc/X11/xdm/Xsession kde

vi /etc/X11/xdm/Xaccess
192.168.1.*

--------------------------------------------------------------------------------------------
Step 3 Services setup
Shell> ntsysv
运行ntsysv命令启用named 、telnet 和 wu_ftpd 服务,禁用httpd 和 mysqld 服务和其他一些不需要的服务,然后重启服务器。
--------------------------------------------------------------------------------------------
Step 4 Dns setup
vi /etc/named.conf

1 创建标准区域
##你可以根据你的喜好来命名,这里我使用的后缀是.loc,主要是为了避免和Internet已经注册的域名相冲突,你可以自行决定你的后缀。
##添加下面的文本到 /etc/named.conf

zone yesgo.loc{
type master;
file "yesgo.loc";
}
zone 1.168.192.in-addr.arpa{
type master;
file "192.168.1";
}

2 创建域名库文件
touch /var/named/yesgo.loc
touch /var/named/192.168.1

##编辑正向域名库文件,建立主机名和主机别名
vi /var/named/yesgo.loc

@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (
2001050801 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yesgo.loc.
IN MX 0 ns.yesgo.loc.

ns IN A 192.168.1.2
ftp IN CNAME ns.yesgo.loc.
mail IN CNAME ns.yesgo.loc.
pop IN CNAME ns.yesgo.loc.
smtp IN CNAME ns.yesgo.loc.

##编辑反向域名库文件,建立主机名指针
vi /var/named/192.168.1

@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (
2001050801 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yesgo.loc.
IN MX 0 ns.yesgo.loc.

2 IN PTR ns.yesgo.loc.

3 重新启动DNS服务
/etc/rc.d/init.d/named restart

4 域名查询
##测试域名是否解析成功,这是一个交互式的命令行,你可以输入域名或者IP地址进行正向和反向查询
nslookup -sil
--------------------------------------------------------------------------------------------
Step 5 KDE setup
这一步是可有可无的,因为你完全可以不去理会而直接使用默认界面。一般的做法是先根据KDE配置向导进行总体设置,然后再使用KDE控制中心进行详细配置,在此不多介绍。需要提的一点是你可以通过KDE Control Panel 中的Windows Manager来设置默认Session,当然也可以通过配置文件来实现这一点。
--------------------------------------------------------------------------------------------
Step 6 Ftp setup
vi /etc/shells
##添加下面一行到/etc/shells,将作为FTP用户的shell,使其不能使用命令和telnet服务
/dev/null

## 增加ftpchroot组,该组中的用户将以自己的home目录作为FTP根目录

groupadd ftpchroot

## 添加FTP用户,该类用户只能使用FTP服务,且以自己的home目录为根目录
useradd src –s /dev/null –g ftpchroot //本帐号用来存放软件包
passwd src

/*
我习惯将软件包放到自定义的/home/src目录,主要目的还是上面提到的数据保全和软件上传问题,如果放到/usr/local/src目录,这两点也能实现但不方便,如果你习惯将软件包放到/usr/local/src,你可以删除/usr/local/src然后为/home/src建立一个符号连接。
*/
rm –R -f /usr/local/src
ln –s /home/src /usr/local/src
--------------------------------------------------------------------------------------------
Step 7 MySQL、Apache and php Unistall
使用Package管理器或者rpm命令卸载MySQL、Apache和PHP,建议初学者使用Package管理器,分别查找这三个关键词直到将所有相关的软件包都卸载干净。我们接着会编译安装这些软件。
--------------------------------------------------------------------------------------------
Step 8 MySQL install
1 准备用户
useradd mysql
passwd mysql

2 安装MySQL
cd /home/src
tar xvzf my* //解包
cd my*
./configure --prefix=/usr/local/mysql //配置
make //编译
make install //安装
./scripts/mysql_install_db //建库

3 修改文件夹权限
##下面修改相关文件夹权限,否则MySQL服务不能启动,或者说你对数据库没有写权限
chown –R root /usr/local/mysql
chgrp –R mysql /usr/local/mysql

chown –R root /usr/local/mysql/bin
chgrp –R mysql /usr/local/mysql/bin

chown –R root /usr/local/mysql/var
chgrp –R mysql /usr/local/mysql/var
chmod 770 /usr/local/mysql/var

chown –R root /usr/local/mysql/var/mysql
chgrp –R mysql /usr/local/mysql/var/mysql
chmod 770 /usr/local/mysql/var/mysql

chown –R root /usr/local/mysql/var/mysql/*
chgrp –R mysql /usr/local/mysql/var/mysql/*
chmod 770 /usr/local/mysql/var/mysql/*

chmod 770 /usr/local/mysql/lib/mysql/libmysqlclient.a

4 重新加载动态库
##因为我们采用自定义编译安装的方式,所以跟系统原先定义的库位置不一样,现在我们重新指定它并重新加载
vi /etc/ld.so.conf
#添加下面一行
/usr/local/mysql/lib

shell>ldconfig //重新加载动态库

5 测试MySQL
cd /usr/local/mysql
./bin/safe_mysqld –-user=mysql & //启动MySQL服务
mysqladmin –u root –p password your_password //更改用户密码
mysql –p //开始使用

6 创建启动脚本
##创建MySQL服务,使之在系统启动时自动启动
cd /etc/rc.d/init.d
touch mysqld
vi mysqld
##文件内容如下:

#!/bin/bash
#Start MySQL service
cd /usr/local/mysql
./bin/safe_mysqld - -user=mysql

##改变该脚本的权限,否则系统启动时会说由于没有执行权限而启动失败
chown –R root /etc/rc.d/init.d/mysqld
chmod 700 /etc/rc.d/init.d/mysqld

##将此服务连接到init 5,如果你使用init 3启动机器,连接到rc3.d即可,60代表启动的次序,S要大写
ln –s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S60mysqld
--------------------------------------------------------------------------------------------
Step 9 Apache configure
##这是Apache的初次配置,等到PHP安装好后才进行安装
cd /home/src
tar xvzf apa* //解包
cd apa*
./configure //初始化
--------------------------------------------------------------------------------------------
Step 10 Php install
cd ..
tar xvzf php*
cd php*
./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.22 --enable-track-vars //设置PHP编译参数
make //编译
make install //安装
cp ./php.ini-dist /usr/local/lib/php.ini //复制配置文件到/usr/local/lib/
--------------------------------------------------------------------------------------------

Step 11 Apache install
1 安装Apache
##这是Apache的正式安装步骤
cd /home/src/apa*
./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --enable-module=so //设置编译参数
make //编译
make install //安装

2 建立符号连接
##为启动程序建立符号连接,便于以后重启服务
ln –s /usr/local/apache/bin/apachectl /usr/bin/apache

3 编辑配置文件
vi /usr/local/apache/conf/httpd.conf

## 以php为关键词查找到如下几行,去掉前面的注释符号

# AddType application/x-httpd-php .php
# AddType application/x-httpd-php .php3 //本行需要自行添加,用来支持PHP3
# AddType application/x-httpd-php-source .phps

## 设置默认页面,中间用空格分开

DirectoryIndex index.html index.jsp index.xtp index.php index.php3

4 测试Apache
Shell>apache start
lynx http://localhost
##如果出现Apache的文档页面,表示安装成功。

5 创建启动脚本
##创建Apache服务
touche /etc/rc.d/init.d/httpd
vi /etc/rc.d/init.d/httpd

## 文件内容如下:

#!/bin/bash
#Start httpd service
/usr/local/apache/bin/apachectl start

##设置文件权限
chown –R root /etc/rc.d/init.d/httpd
chmod 700 /etc/rc.d/init.d/httpd

##连接到你默认init 级别的所在目录
ln –s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S65httpd
--------------------------------------------------------------------------------------------
Step 12 Jvm setup
cp /home/src/ j2sdk-1_3_1-linux-i386.bin /usr/local
cd /usr/local
chmod a+x j2sdk-1_3_1-linux-i386.bin
##下面的指令是一个脚本,它先要问你是否同意,输入Y,然后它会自行安装
./j2sdk-1_3_1-linux-i386.bin

##为当前的JDK版本建立一个符号连接,这样做的目的是将来如果有新的版本安装到系统上,
可以将新的目录连接为/usr/local/jvm,这样就无需重新修改很多配置文件
ln –s /usr/local/jdk1.3.1_01 /usr/local/jvm
--------------------------------------------------------------------------------------------
Step 13 Classes Install
##这个步骤是我的一个习惯,如果不做JAVA或者JSP开发可能不需要这一步,这个步骤的目的是设置一个
放置自己JAVA类库的主目录,然后在此主目录下建立子目录分别存放不同种类的类文件。

##创建类库主目录
mkdir /usr/local/lib/java

##下面安装MySQL的JDBC驱动,这个驱动是支持JDBC2.0的
mkdir /usr/local/lib/java/drivers
cp /home/src/mm.mysql-2.0.4-bin.jar.zip /usr/local/lib/java/drivers //MySQL driver

##下面安装JAF,需要说明的是,下载的jaf包是个winzip文件,我是windows上解压的,然后创建了一个jaf的目录将activation.jar放到里面又上传到/home/src的,你可以自行解决
mkdir /usr/local/lib/java/jaf
cp /home/src/java/jaf/activation.jar /usr/local/lib/java/jaf //Jaf class

##下面安装JAVAMAIL,我的处理办法同上
mkdir /usr/local/lib/java/javamail
cp /home/src/java/javamail/*.jar /usr/local/lib/java/javamail //JavaMail classes
--------------------------------------------------------------------------------------------
Step 14 Edit /etc/profile
##这一步用来配置环境变量,Resin的安装需要依赖该步骤
Vi /etc/profile
## 在/etc/profile文件末添加如下内容:

JAVA_HOME=/usr/local/jvm

RESIN_HOME=/usr/local/resin

CLASS_HOME=/usr/local/lib/java

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar: $CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar

PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin

export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH

## 保存文件后注销登陆,然后重新进入,输入下面的命令查看系统变量是否已经生效:
Shell>env
--------------------------------------------------------------------------------------------
Step 15 Resin Install
1 安装Resin
cd /home/src
cp /home/src/resin-2.0.4.tar.gz /usr/local
cd /usr/local
tar xvzf resin*
cd resin*
./configure --with-apache=/usr/local/apache //设置编译参数
(Or: ./configure --with-apxs=/usr/local/apache/bin/apxs)
make //编译
make install //安装

2 建立符号连接
##建立resin的符号连接,道理同建立jvm符号连接
ln –s /usr/local/resin2.0.4 /usr/local/resin

##建立resin服务程序的符号连接,道理同建立apache符号连接
ln –s /usr/local/resin/bin/httpd.sh /usr/bin/resin

3 修改配置文件
vi /usr/local/resin/conf/resin.conf

Modify One: 建立连接池,类似于NT上的DSN(数据源)
<java compiler="internal" compiler-args="" work-dir=work/>

<dbpool.sql id="your_data_source_name">
<driver>org.gjt.mm.mysql.Driver</driver>
<url>jdbc:mysql://localhost/database_name</url>
<!-- <url> jdbc:mysql://localhost/database_name </url> -->
<user>user_name</user>
<password>password</password>
<max-connections>100</max-connections>
</dbpool.sql>

<!--
- Sample database pool configuration
- The JDBC name is java:comp/env/jdbc/test
-->

##后面的测试部分有例子介绍如何调用数据源

Modify Two: 修改默认主目录,如果使用虚拟主机,其实也可以不理会这个地方
<app-dir> /usr/local/apache/htdocs </app-dir>

Modify Three: 修改Resin端口,与Apache协同工作
<http port=8080 /> //删除本行即可

Modify Four: 添加支持JSP的虚拟主机
##添加一个支持JSP的虚拟主机需要做如下四方面的工作: DNS、FTP、RESIN、APACHE

1、添加一个DNS别名(当然主机名也可以)
vi /var/named/yesgo.loc
# 追加如下一行,当然你可以自定义其他别名或主机名
www IN CNAME ns.yesgo.loc.

/etc/rc.d/init.d/named restart //重启DNS服务
nslookup //测试是否解析成功
2、添加一个FTP帐号
Useradd www –s /dev/null –g ftpchroot //添加帐号
Passwd www //修改密码
Chmod 701 /home/www //设置权限,否则将来访问时服务器会说你没权限
3、在Resin中添加虚拟主机
vi /usr/local/resin/conf/resin.conf

##在文档中查找</host>,然后在其后加入如下内容:
<host id=www.yesgo.loc>
<app-dir>/home/www</app-dir> //指定该站点的根目录
<classpath id=classes source=classes compile= rue/ > //指定class文件目录
</host>
『注意』:
按照上面地设置,你放置JavaBean的目录就是站点根目录下的classes目录,不可以死记硬背/WEB-INFO/classes,关键要明白其中的道理,其实你设置什么都可以的,例如Amao,Agou啦,呵呵。
4、在Apache中建立相应的虚拟主机
vi /usr/local/apache/conf/httpd.conf

# 指定你建立虚拟主机所用的IP地址
NameVirtualHost 192.168.1.2

# Add virtual host
<VirtualHost www.yesgo.loc>
ServerAdmin [email protected] //管理员邮件
DocumentRoot /home/www //根目录
ServerName www.yesgo.loc //域名
ErrorLog logs/www.yesgo.loc-error_log //错误日志名称
CustomLog logs/www.yesgo.loc -access_log common //自定义日志名称
</VirtualHost>

4 测试Resin
##启动Resin
shell>resin start
##重新启动Apache,因为刚才修改了httpd.conf,需要重启才生效
shell>apache restart
#创建文件
touch /home/www/index.jsp
chown –R www /home/www/index.jsp
chmod 701 /home/www/index.jsp
##编辑源文件
vi /home/www/index.jsp
##源代码只有一句:
1+1=<%=1+1%>
##测试该程序
lynx http://www.yesgo.loc/
##输出结果应该是:1+1=2

5 创建启动脚本
##创建Resin服务,道理跟创建MySQL和Apache服务是一样的,不过这里要设置相关环境变量,设置了这些变量之后,/etc/profile中设置的其实就可以去掉了,当然不去也没关系。:
##创建脚本文件
touch /etc/rc.d/init.d/resin
##更改文件权限
chmod 701 /etc/rc.d/init.d/resin
##连接到相关启动级别
ln –s /etc/rc.d/init.d/resin /etc/rc.d/rc5.d/S70resin
##编辑启动脚本
vi /etc/rc.d/init.d/resin

##文件内容如下:

#!/bin/bash
#Set environment parameter:

JAVA_HOME=/usr/local/jvm

RESIN_HOME=/usr/local/resin

CLASS_HOME=/usr/local/lib/java

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar:$CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar

PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin

export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH

#Start resin web server
exec /usr/local/resin/httpd.sh start
--------------------------------------------------------------------------------------------
Step 16 PhpMyAdmin install
1 安装phpMyAdmin
tar xvzf /home/src/phpMy*
cp /www/phpMyAdmin/* /home/mysql
chown –R mysql /home/mysql
chown –R mysql /home/mysql/*
chmod 701 /home/mysql
chmod 701 /home/mysql/*

2 添加身份验证
vi config.inc.php3

$cfgServers[1][host] = localhost; //主机
$cfgServers[1][port] = ;
$cfgServers[1][adv_auth] = 1; //是否需要身份验证
$cfgServers[1][stduser] = oot; //帐号
$cfgServers[1][stdpass] = your_password; //密码
$cfgServers[1][user] = oot;
$cfgServers[1][password] = your_password;
$cfgServers[1][only_db] = ;
$cfgServers[1][verbose] = ;

3 添加虚拟主机
vi /usr/local/apache/conf/httpd.conf

<VirtualHost mysql.yesgo.loc>
ServerAdmin [email protected]
DocumentRoot /www/mysql.yesgo.loc
ServerName mysql.yesgo.loc
ErrorLog logs/mysql.yesgo.loc-error_log
CustomLog logs/mysql.yesgo.loc-access_log common
</VirtualHost>

4 测试phpMyAdmin
apache restart
lynx http://mysql.yesgo.loc //建议使用客户端浏览器测试
--------------------------------------------------------------------------------------------

Step 17 Server Test
## 为什么不使用 1+1=<%=1+1%>或者<%out.print(“Hello World!”);%>这样的例子呢? 因为这样的例子只能测试Apache和Resin是否能够协同工作,而不能测试数据库连接、JDBC2.0是否支持,中文问题是否存在等等。下面给出四个例子,第一个例子可以测试上述的所有问题;第二个例子告诉你如何使用Resin的连接池;第三个例子告诉你如何调用组件,如何实现数据层和处理层的分离;第四个例子用来测试PHP。

例一:使用连接串连接数据库

1 创建数据库
## 数据库脚本如下,可存储为.sql文件,然后利用phpMyAdmin生成数据库
## 注意,后面的例子也将沿用该数据库。
create database yesgo
use yesgo;

create table prov
(
prov_id tinyint(2) not null primary key,
prov_name char(6) not null
);

insert into prov values (1,安徽);
insert into prov values (2,北京);
insert into prov values (3,重庆);
insert into prov values (4,福建);
insert into prov values (5,甘肃);
insert into prov values (6,广东);
insert into prov values (7,广西);
insert into prov values (8,贵州);
insert into prov values (9,海南);
insert into prov values (10,河北);
insert into prov values (11,黑龙江);
insert into prov values (12,河南);
insert into prov values (13,湖北);
insert into prov values (14,湖南);
insert into prov values (15,内蒙古);
insert into prov values (16,江苏);
insert into prov values (17,江西);
insert into prov values (18,吉林);
insert into prov values (19,辽宁);
insert into prov values (20,宁夏);
insert into prov values (21,青海);
insert into prov values (22,山西);
insert into prov values (23,陕西);
insert into prov values (24,山东);
insert into prov values (25,上海);
insert into prov values (26,四川);
insert into prov values (27,天津);
insert into prov values (28,西藏);
insert into prov values (29,新疆);
insert into prov values (30,云南);
insert into prov values (31,浙江);
insert into prov values (32,香港);
insert into prov values (33,澳门);
insert into prov values (34,台湾);

2 为数据库添加帐号
##按如下方式添加的帐户只对yesgo数据库具有权限,而且对它拥有全部权限,为什么要添加四次呢?主要是host的不同,需要注意的是,MySQL验证是一个连接是否正确,不仅取决于帐号和密码,还要看主机名和数据库名。
mysql –p
mysql> grant all privileges on yesgo.* to your_user_name@localhost identified by ‘your_password’ with grant option;
mysql> grant all privileges on yesgo.* to your_user_name@’ns.yesgo.loc’ identified by ‘your_password’ with grant option;
mysql> grant all privileges on yesgo.* to your_user_name@’192.168.1.2’ identified by ‘your_password’ with grant option;
mysql> grant all privileges on yesgo.* to your_user_name@’%’ identified by ‘your_password’ with grant option;
mysql>exit

3 创建JSP源文件
touch /home/www/cnmysql.jsp
chown –R www /home/www/cnmysql.jsp
chgrp –r root /home/www/cnmysql.jsp
chmod 771 /home/www/cnmsql.jsp

vi /home/www/cnmsql.jsp
## 源代码如下:

<%@ page language="java" import="java.sql.*"%>
<%
Class.forName ("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://host_name/db_name","user_name","password");
Statement stmt = conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from prov");
rs.next();
out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br>");
rs.last();
out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br>");
rs.close();
stmt.close();
conn.close();
%>
4 测试该程序
lynx http://www.yesgo.loc/cnmysql
##正确的结果应该是:

1 安徽
34 台湾

例二:用连接池连接数据库
1 建立数据源
vi /usr/local/resin/conf/resin.conf
<java compiler="internal" compiler-args="" work-dir=work/>

<dbpool.sql id="your_data_source_name">
<driver>org.gjt.mm.mysql.Driver</driver>
<url>jdbc:mysql://localhost/database_name</url>
<!-- <url> jdbc:mysql://localhost/database_name </url> -->
<user>user_name</user>
<password>password</password>
<max-connections>100</max-connections>
</dbpool.sql>

<!--
- Sample database pool configuration
- The JDBC name is java:comp/env/jdbc/test
-->

2 创建JSP源文件
touch /home/www/testpool.jsp
chown –R www /home/www/testpool.jsp
chgrp –r root /home/www/testpool.jsp
chmod 771 /home/www/testpool.jsp

vi /home/www/testpool.jsp
## 源代码如下:

<%@ page language="java" import="java.sql.*,com.caucho.sql.*;"%>
<%
DBPool pool=new DBPool();
Connection conn = pool.getPool("data_source_name ").getConnection();
Statement stmt = conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from prov");
rs.next();
out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br>");
rs.last();
out.print(rs.getString("prov_id")+" "+rs.getString("prov_name")+"<br>");
rs.close();
stmt.close();
conn.close();
%>

3 调试该程序
lynx http://www.yesgo.loc/testpool.jsp
##处理的结果跟例一是一样的:

1 安徽
34 台湾

例三:用处理层连接数据库
##本例告诉你如何使用组件
##其实你完全可以写一个bean来处理数据库,而不用象例二那么罗索。只用四条语句就可以取出数据库中的所有数据并显示出来,这样做实现了处理层和逻辑层的彻底分离,逻辑层发出指令处理层去响应相关处理,记录集也不会返回到逻辑层的jsp页面,而由处理层的bean处理,使得代码非常精简,效率也更高。至于如何书写组件不是本文档的重点,下面仅给出一个组件的例子并说明逻辑层的调用方法,你会发现逻辑层其实是个官僚,二处理层是下属,呵呵。

1 创建处理层组件
下面的组件是我为公司写的数据库处理组件的简化版本,考虑到篇幅的问题和可读性,这里我简化了它的功能(象分页、批量更新、获取字段数和字段名称,用set和get提高其扩展性、对其他连库方法的支持等都没有出现在下面的代码中),使之包含所有常用的功能并使之更加清晰和易于理解;其二,我将连库动作加到了构造函数中,这是个优点也是个缺点,优点是简化了连库动作,缺点是降低了通用性,我没有添加设置数据源等方法,从而每当变换一次数据库就需要改写组件中的连接池名称,这在做一个固定项目的时候是可以的,如果你需要set数据源,可以自行添加;
##使用组件的方法:
我这里说的是使用bean的通用方法,你建立自己的bean目录可以仿照该例子。在你的站点根目录下建立resin.conf中指定的存放bean的目录,我上面的举例是classes,那你就建立classes目录,那么classes就是你站点的class根目录。然后在下面依次建立comgledecityyesgosql,注意它们之间是父子关系,不是同级文件夹,然后将下面即将建立的DBBridge.java放到”站点根目录classescomgledecityyesgosql”目录下,然后将该文件上传到服务器端即可。上面的步骤在微软平台上使用UltraDev之类的开发工具即可完成,当然手工也可以。

源文件如下:

//------------------------------------------------------------------------------
// File: DBBridge.java
// Copyright (c) 2000-2001 Mr.Fengjun Zhao. All Rights Reserved.
// Author: 赵凤君@06/18/01
// Last Revision: 赵凤君@12/22/01
// Description: 数据库接口类。一个统一的数据库接口,实现了逻辑层和数据层的彻底分离,封装了常用的数据库操作。主要功能是:连接数据库、执行SQL语句、数据库取值操作、数据分页、清除数据、关闭数据库等。
// Version:简化版1.0
//------------------------------------------------------------------------------

//指定包目录
package com.gledecity.yesgo.sql;

//导入包
import java.sql.* ;
import com.caucho.sql.*;

public class DBBridge {
//声明属性
private DBPool connPool ;
private Connection conn ;
private ResultSet rs ;
private Statement stmt ;


// -------------------------------------- 构造函数---------------------------------
public DBBridge() {
connPool=null ;
conn=null ;
rs=null ;
stmt=null ;
try{open();}
catch(java.sql.SQLException ex){ex.toString();}
}
// ------------------------------------------------------------------------------------

//连接数据库的方法
public void open()
throws SQLException {
if( conn!=null && !conn.isClosed() )
throw new SQLException( "The connection has been established already." ) ;
clear () ;
DBPool pool=new DBPool();
conn = pool.getPool("your_data_source_name").getConnection();
}

//执行SQL语句的方法,将JDBC中的executeQuary()和executeUpdate()两个方法//合而为一,注意返回值为整形,
public int execSQL( String sqlStmt )
throws SQLException {
if( conn==null || conn.isClosed() )
throw new SQLException( "This connection has not been established yet." ) ;
if( sqlStmt==null )
throw new SQLException( "SQL-statement is null." ) ;
clear () ;
conn.setAutoCommit( true ) ;
stmt=conn.createStatement() ;
if( sqlStmt.toUpperCase().startsWith( "SELECT" ) ) {
rs=stmt.executeQuery( sqlStmt ) ;
return -1 ;
}
else {
int numRow=stmt.executeUpdate( sqlStmt ) ;
clear() ;
return numRow ;
}
}

//获取字段值,参数为整形——字段次序
public String getString( int fieldNo )
throws SQLException {
return rs.getString(fieldNo) ;
}

//获取字段值,参数为字符串——字段名
public String getString( String fieldName )
throws SQLException {
return rs.getString(fieldName) ;
}

//上移指针
public boolean previous()
throws SQLException {
if( rs==null )
throw new SQLException( "ResultSet is null." ) ;
return rs.previous() ;
}

//下移指针
public boolean next()
throws SQLException {
if( rs==null )
throw new SQLException( "ResultSet is null." ) ;
return rs.next() ;
}

//指针最上
public boolean first()
throws SQLException {
if( rs==null )
throw new SQLException( "ResultSet is null." ) ;
return rs.first() ;
}

//指针最下
public boolean last()
throws SQLException {
if( rs==null )
throw new SQLException( "ResultSet is null." ) ;
return rs.last() ;
}

//清除变量,当你仅需要清除变量而不关库时可调用此方法
private void clear () throws SQLException {
if( rs!=null ) rs.close() ;
rs=null ;
if( stmt!=null ) stmt.close() ;
stmt=null ;
}

//清除变量并关库
public void close() throws SQLException {
clear () ;
if( connPool!=null ) {
connPool=null ;
}
else {
if( conn==null )
throw new SQLException( "This connection has been closed already." ) ;
if( conn.isClosed() )
throw new SQLException( "This connection has been closed." ) ;
conn.close() ;
}
conn=null ;
}

}

2 编写逻辑层代码
##在客户端创建dbbridge.jsp,然后上传到服务器端即可:

##上级要来视察某官僚的工作,只见该官僚指挥若定:
##逻辑层对处理层说:小子,去跟我的后台联络一下。 //连库并初始化
<jsp:useBean id=”bridge” class=”com.gledecity.yesgo.sql.DBBridge” />
##逻辑层对处理层说:去帮我准备点书面材料,我只要结果。 //执行SQL语句
<%bridge.execSQL(“select * from prov”);
##逻辑层对处理层说:材料准备好了?干得好!上级一来看到一片数据。//循环显示
while(bridge.next())
{ out.print(bridge.getString("prov_id")+bridge.getString("prov_name")+"<br>");}
##逻辑层对处理层说:好了好了,政绩显示完毕,你们通通滚蛋吧。 //关闭所有变量
bridge.close();
%>
##上级看后非常满意,拍拍官僚的肩膀:“干得不错!”官僚一高兴,说:“哪里哪里,都是下属办事得力!”

3 测试该程序
lynx http://www.yesgo.loc/dbbridge.jsp
##当然你也可以在客户端浏览器测试,只是你需要将你服务器的IP添加到你网络设置中的DNS列表中。
##处理的结果是数据库中所有的数据:

1安徽
2北京
3重庆
4福建
5甘肃
6广东
7广西
8贵州
9海南
10河北
11黑龙江
12河南
13湖北
14湖南
15内蒙古
16江苏
17江西
18吉林
19辽宁
20宁夏
21青海
22山西
23陕西
24山东
25上海
26四川
27天津
28西藏
29新疆
30云南
31浙江
32香港
33澳门
34台湾

例四:测试PHP
1 创建源文件
touch /home/www/test.php
chmod 701 /home/www/test.php

2 编辑源文件
vi test.php
## 源代码如下:
<?
phpinfo();
?>

3 测试该程序
lynx http://www.yesgo.loc/test.php
//结果是大家熟知的服务器端变量列表。
--------------------------------------------------------------------------------------------
Step 18 Configuration debug

##调试过程可能的错误如下:

常见错误一:You don have permission
Forbidden
You don have permission to access / on this server.

Apache/1.3.22 Server at www.yesgo.loc Port 80

原因可能是:
1、 你没有为该目录或者该文件设置guest组权限;
2、 你没有将该文件名设置为默认页面,尤其是在仅用域名访问的情况下。
解决办法:
chmod 701 /home/www
chmod 701 /home/www/*

vi /usr/local/apache/conf/httpd.conf
DirectoryIndex index.html index.jsp index.xtp index.php index.php3

常见错误二:404 Not Found
404 Not Found
/index.jsp was not found on this server.

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)

原因可能是:
1、 你请求的文件名输入错误;
2、 你没有在resin.conf和httpd.conf中都建立相应的主机。
解决办法:
1、 检查文件名,尤其注意大小写问题;
2、 参照Resin install步骤中的配置支持JSP的虚拟主机部分。

常见错误三:java.lang.ClassNotFoundException
500 Servlet Exception
java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
at com.caucho.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:479)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at _cnmysql__jsp._jspService(/cnmysql.jsp:4)
at com.caucho.jsp.JavaPage.service(JavaPage.java:74)
at com.caucho.jsp.Page.subservice(Page.java:485)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:176)
at com.caucho.server.http.Invocation.service(Invocation.java:278)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:338)
at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:270)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:484)

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)

原因可能是:
1、你没有安装驱动程序;
2、驱动程序没有设置到系统CLASSPATH中。
解决办法:
参见 Classes Install and edit /etc/profile两部分

常见错误四:Invalid authorization specification
500 Servlet Exception
java.sql.SQLException: Invalid authorization specification: Access denied
for user: [email protected] (Using password: YES)
at org.gjt.mm.mysql.MysqlIO.init(MysqlIO.java:330)
at org.gjt.mm.mysql.Connection.connectionInit(Connection.java:261)
at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Connection.java:89)
at org.gjt.mm.mysql.Driver.connect(Driver.java:167)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at _cnmysql__jsp._jspService(/cnmysql.jsp:5)
at com.caucho.jsp.JavaPage.service(JavaPage.java:74)
at com.caucho.jsp.Page.subservice(Page.java:485)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:176)
at com.caucho.server.http.Invocation.service(Invocation.java:278)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:338)
at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:270)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:484)

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)
原因可能是:
1、 源代码中的主机名、数据库名、帐号或者密码输入错误;
2、 如果数据库名、帐号、密码均正确,那说明是主机名不匹配;
3、 如果使用数据源连库,检查数据源的设置和源代码中名称是否输入正确。
Solution:
1、 参见Resin install和Server test两部分;
2、 注意:数据库的连接不仅仅是帐号和密码决定的,而是由主机名、数据库名、用户名和密码四个参数决定的。

常见错误五:Invalid authorization specification
500 Servlet Exception
java.lang.AbstractMethodError
at _cnmysql__jsp._jspService(/cnmysql.jsp:11)
at com.caucho.jsp.JavaPage.service(JavaPage.java:74)
at com.caucho.jsp.Page.subservice(Page.java:485)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:176)
at com.caucho.server.http.Invocation.service(Invocation.java:278)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:338)
at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:270)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:484)

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)

原因可能是:
1、你安装的JDK版本太低以至于JDBC版本并不是2.0的;
3、 更大的可能性是你的驱动程序不支持JDBC2.0,JDBC只是提供了抽象类接口,它需要驱动程序作为其实体类来具体实现。
解决办法:
1、 升级JDK,我的建议是 is j2sdk-1_3_1_01-linux-i386.bin,参见Jvm install部分;
2、 替换数据库驱动,你很有可能使用的是mysql_comp.jar ,使用 mm.mysql-2.0.4-bin.jar.zip替代它。

常见错误六:中文乱码
可能的原因:
安装操作系统时候,你没有选择i18n的简体包也没有在源文件中加以处理
解决办法:
1、Html方式,添加如下一行到你的JSP源代码:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
2、JSP方式一:
<%@ page contentType = "text/html; charSet=gb2312" %>
3、JSP方式二:
一般说来使用Resin作为JSP引擎是不需要本方法的,我就从来都没用到,只有使用象Tomcat之类的东东才可能用到这个繁琐的方法,不过这个方法也有它的好处,就是提高了程序的可移植性,不至于换了系统或者引擎就乱码了。
<%
String chs=”这个方法肯定可以!”;
byte[] bchs=chs.getBytes();
out.print(new String(bchs,”8859_1”));
%>

Appendix
Appendix I : Thanks

人物:
我的很多知识来源于同事和朋友的指教,请允许我在这里占用一点篇幅向我的朋友表达我最真诚的感谢。
Mr. Jim Zhao 是我原先的一位同事,一个富有突破性的人才,狂热的Linux爱好者,他是我在UNIX和Linux方面的启蒙者,是他引导我进入这块美妙的天地并在我初学的路上给予诸多帮助,谢谢你,Jim。
很多未曾谋面的网友也对我教益量多,象Mr. Axman和Mr. popeye。Mr. Axman 是Linux和JAVA方面的高手,他出类拔萃的才能和侠肝义胆的古道热肠令我为之钦佩;Mr.popeye年龄很小却有优秀的技能,也曾指教我很多问题。像这样的朋友还有很多,恕不一一列出。

站点:
我也从很多站点和论坛上得到很多的知识和资源,向这些站点的所有者和参与者真诚感谢:
中国JSP网络 http://www.cnjsp.net
LinuxByte: http://www.linuxbyte.net
LinuxAid: http://www.linuxaid.com.cn
中国Linux论坛: http://www.linuxforum.net

谢谢你们!
Appendix II : Todo List
计划添加的内容:
1、 如何定制化安装操作系统;
2、 添加Qmail的配置方法和webmail开发思路;
3、 磁盘配额的实现;
4、 增强系统安全性的方法;
5、 负载均衡的实现办法;
6、 添加FAQ列表;

Appendix III: Revision log
1、 12/20/2001 首次发布。
语言:英文
版本:0.0.1
发布:
http://www.linuxbyte.net
标题:最新RedHat 7.2 WEB开发服务器配置文档
http://www.iuirc.com/cnjspbbs/
标题:最新的RedHat 7.2 WEB开发服务器配置文档(PDF格式)

2、 12/22/2001 第二次发布。
语言:简体中文;
版本: 0.0.2
发布:
http://www.linuxbyte.net
标题:RedHat Linux 网络服务器构架实务(chs_0.0.2_12-22-2001)
http://www.iuirc.com/cnjspbbs/
标题:RedHat Linux 网络服务器构架实务(chs_0.0.2_12-22-2001)
修改:

2 将语言换为简体中文;
2 添加了许多注释;
2 修改了几处文字错误;
2 添加了连接池的使用方法;
2 添加了组件的使用方法,并提供了一个数据库处理组件;
2 更新了目录结构;
2 修改了TODO列表;
[/code:1][/code]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-17 18:51 , Processed in 0.040099 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表