[系列.原创]Linux不完全攻略_10
回复贴到 http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=91508 。不要回复本贴。10 搭建JSP服务器
版本:2004-11-05-02
JSP是一项很有前途的站点动态网页技术,如果把握得当,也很有钱途。Tomcat是Apache基金Jakart项目的产品,曾经被SUN推荐来做JSP容器,搭建JSP服务器的首选。
Tomcat可以充当Apache的JSP扩展插件,也可以独立运行,充当Web服务器。如果你的站点访问量比较小,你甚至可以不装Apache。
10.1 准备工作
Tomcat运行需要J2SDK支持。如果没有安装J2SDK,请先安装J2SDK。
去http://www.apache.org,在那里找一个叫jakart-tomcat的东东下载。Tomcat是用Java写的,这类Java大玩意儿从源代码编译比较麻烦,就不要source的了,直接找binary的吧。
最新配置好了Tomcat5.5.2,它需要JDK1.5支持,主要用以前的稳定版本4.1.30做例子,5.5.2顺带讲。
4.1.30版本对应的下载文件是“jakart-tomcat-4.1.30.tar.gz”。还有一个很小的验证码文件,“jakart-tomcat-4.1.30.tar.gz.md5”,一起下回来。
我把下载回的文件保存在“/opt/prog/tmp”。开终端,进这个目录,检查一下:
[root@TFW-RFL40 tmp]# md5sum jakart-tomcat-4.1.30.tar.gz
看看得出的字符串是否和“jakart-tomcat-4.1.30.tar.gz.md5”里的一致,不一致请重新下载。“jakart-tomcat-4.1.30.tar.gz.md5”里的字母可能是大写的,这无所谓。要注意的是,这个文件里的字符串很可能是以两位一组分开的,忽略那些可能的空格。
10.2 安装
前面经历过几次安装,我知道Tomcat是那种说挪就能挪的软件。我把“Tomcat”安装到“/opt/prog/m”里。进要安装软件的目录:
[root@TFW-RFL40 tmp]# cd /opt/prog/m
[root@TFW-RFL40 m]#
解压缩:
[root@TFW-RFL40 m]# tar zxvf /opt/prog/tmp/jakart-tomcat-4.1.30.tar.gz
……
……
……
[root@TFW-RFL40 m]#
做一个没有版本号的链接,这样Tomcat的内容也可以被看成安装在“/opt/prog/m/tomcat”里,以后升级方便:
[root@TFW-RFL40 m]# ln -s jakart-tomcat-4.1.30 Tomcat
[root@TFW-RFL40 m]#
新装主要安装完成。后来新装了Tomcat5.5.2,删除并重建了这个链接,指向“jakart-tomcat-5.5.2”,别的东西都没再改。
修改环境变量文件。我改的是“/etc/profile”。在文件的末尾添加如下9行内容:
########################################
#v3 Jakarta-tomcat 4.1.30/5.0.28/5.5.2
# Non-Compiled
# Moveable
CATALINA_BASE="/opt/prog/m/Tomcat"
CATALINA_HOME="/opt/prog/m/Tomcat"
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HOME/bin:$CATALINA_HOME/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CLASSPATH CATALINA_BASE CATALINA_HOME
########################################
由于我有一个不带版本号的链接,我用4.1.30替换旧的4.1.27时只是删除旧链接和重做一个链接,不必改环境变量文件。
10.3 运行
启动:
[root@TFW-RFL40 m]# startup.sh
Using CATALINA_BASE: /opt/prog/m/Tomcat
Using CATALINA_HOME: /opt/prog/m/Tomcat
Using CATALINA_TMPDIR: /opt/prog/m/Tomcat/temp
Using JAVA_HOME: /opt/prog/m/Java/J2SDK
[root@TFW-RFL40 m]#
开浏览器,访问url“localhost:8080”。如果你的计算机已经接入以太网,你可以在另外一台计算机的浏览器里用IP地址访问你自己的计算机。由物理主机和VMware虚拟机构成的以太网环境同样适合。此时应该能看到画着一只黄猫的Tomcat测试页。再访问“localhost:8080/examples/jsp/”,看里面的动态网页,如果能正常工作,即告成功。一般情况下,在一般配置的PC机上,20秒内Tomcat能启动完毕。
关闭:
[root@TFW-RFL40 m]# shutdown.sh
Using CATALINA_BASE: /opt/prog/m/Tomcat
Using CATALINA_HOME: /opt/prog/m/Tomcat
Using CATALINA_TMPDIR: /opt/prog/m/Tomcat/temp
Using JAVA_HOME: /opt/prog/m/Java/J2SDK
[root@TFW-RFL40 m]#
10.4 Tomcat应用管理器
10.4.1 设置
启动Tomcat。估计启动完成后,开浏览器,访问url“http://localhost:8080”,等默认的页面出来。
页面左边“Administration”栏目中有一项“Tomcat Manager”的,这就是Tomcat附带的应用管理器,直接点进去或者用浏览器浏览“http://localhost:8080/managet/html”均可;其下面一项为“Tomcat Administration”,设计功能与此有所重叠,但更为强大,用来设置更多的东西。不过这个版本的“Tomcat Administration”有问题,不用也罢。
Tomcat5.5.2的“Tomcat Administration”需要单独下载、安装,官方站点说这是出于安全考虑。
“Tomcat Manager”和“Tomcat Administration”使用时都需要帐号(用户名)和口令(密码),而为安全起见,Tomcat默认没有相关的帐号,需要进Tomcat的安装目录“CATALINA_HOME”,找到其中的文件“conf/tomcat-users.xml”,手动添加。对照其他行的格式,在适当的位置添加一行:
<user uname="AAA" password="BBB" roles="admin,manager"/>
重新启动Tomcat,“Tomcat Manager”和“Tomcat Administration”即可使用,帐号“AAA”,口令“BBB”。帐号和口令随便设,甭忘了就OK。
10.4.2 试用
用你设置好的帐号和口令进Tomcat应用管理器。看“Application”那项,里面从上到下依次列出各个“Web应用”状况,每行都列出了该“Web应用”的Path(虚拟路径)、Display name(应用的名称,可以为空)、Running(是否在运行)、Session(会话,访问记忆标记)、Commands(对这个“Web应用”的操作项)之类的内容。
找到一个“Running”数值为1的“Web应用”,鼠标左键点它的Path,即可访问这个“Web应用”——呵呵,别在这里和我较真,如果你把鼠标设置改了,或者你的浏览器是Lynx,或者……,相信你知道该怎么做。
对比一下这个Path和浏览器地址栏里的东东,看看有什么关联。
回到“Tomcat Manager”这页,去这个“Web应用”所在行的“Commands”栏找到“Stop”,鼠标点一下,等页面不在变化时看看这个“Web应用”的“Running”数值,已经变成了0,这个“Web应用”被停掉了。试试看,这个“Web应用”还能访问吗?
点右边的“Start”能重新开启这个应用。
注意,不要点“Remove”或“Undeploy”,这样很可能造成不可挽回的损失。
10.5 初步了解“Web应用”
前面讲了一堆的“Web应用”,究竟是嘛玩意儿?好象没什么办法严格定义它是什么东西,我只能就我的理解做个描述性的解释。一般说来,一组能够实现一些网站功能的文件往往被集中放置在一个目录里,前面说的“Web应用”大致就指这类目录。有时,不常更改的“Web应用”可以被压缩打包成“*.war”文件以减少磁盘空间占用,除了启动加载稍慢,效果不变。
对于Tomcat,一个“Web应用”目录往往具有如下特征:
可能直接包含或在子目录里包含一些以“.htm”或“.html”结尾的文件,这些内容固定的网页用作用户界面;
可能直接包含或在子目录里包含一些以“.jsp”结尾的文件,用来产生内容会变化的网页作为用户界面;
可能直接包含一个“WEB-INF”目录。
其中“WEB-INF”也是一个结构比较复杂的目录,如果“Web应用”里有这个目录,其主要特征为:
可能直接包含一个用于对Tomcat描述该“Web应用”的文件“web.xml”;
可能直接包含一个目录“classes”,这个目录又会直接或在子目录里包含一些执行后台操作或控制前台“*.jsp”文件显示内容的“*.class”文件;
可能直接包含一个目录“lib”,这个目录中存放一些打包成“*.jar”文件的类,作用类似目录“classes”。
目录“$CATALINA_HOME/webapps”是Tomcat自身启动后首先来找的地方,Tomcat自带的某些“Web应用”会被放置在这里。但是不管升级还是维护,出于方便和可靠性考虑,在这里放置你自己的“Web应用”不是个好主意。可以在这个目录里放置一个XML格式的容器描述片段文件,让Tomcat根据这个文件找到和加载你的“Web应用”。一个最基本的容器描述片段文件内容如下:
<Context path="XXX" docBase="YYY"
debug="0" privileged="true">
</Context>
这些内容可以插在“$CATALINA_HOME/conf/server.xml”中适当的位置,但是还是建议把它独立写在一个文件里。
这个文件中,“path”后面的内容即为你希望通过什么样的名称来访问这个“Web应用”,它跟在主机名和端口名后面。假定你希望用“http://主机名/ABC”来访问这个“Web应用”,就把path设为“/ABC”。
“docBase”是这个“Web应用”在你的计算机上的实际路径。
这个文件,最好按照“path”命名为“XXX.xml”,否则可能出些莫名其妙的问题。
如果是Tomcat5.5.2,这个片段文件得放置在“$CATALINA_HOME/conf/Catalina/localhost”里。
10.6 独立运行
如果希望直接用Tomcat充当Web服务器,“http://主机名:8080XXX”不太好。打开“server.xml”,找到下面一段:
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
这段将8080端口定义为Tomcat默认的HTTP端口。将“8080”修改为“80”即可以“http://主机名/XXX”方式访问各Web应用。
10.7 数据库相关
10.7.1 安置驱动
找到所需的JDBC驱动。如果是“*.jar”格式的,复制或链接到“$CATALINA_HOME/common/lib”中;如果已经解压,复制或链接到“$CATALINA_HOME/common/classes”。复制或链接完成后,需要重新启动Tomcat。此后,各“Web应用”的JSP或后台组件都可以直接连接和使用相关的数据库管理系统。
当然,如果只想把这个数据库管理系统给特定的“Web应用”使用,也可以把驱动复制或链接到该“Web应用/WEB-INF”下的特定目录里。这样一般情况下不必(如果不能生效,属于二般情况^o^)重启整个Tomcat,只需要从Tomcat应用管理器里重新启动这个“Web应用”即可。
10.7.2 使用连接池
如果你需要看这节,你有多少已经对连接池或对象池的必要性有一些了解,相关话题不再赘述。
安置好驱动后,找到需要使用连接池的“Web应用”。
到文件“$CATALINA_HOMEconf/server.xml”或目录“$CATALINA_HOMEwebapps”里找到出该“Web应用”的容器描述。在“<Context/>”前面添加一些内容。
以我的使用情况为例,我用PostgreSQL创建了数据库“test_d_1”,令为“test_p_1”的数据库用户“test_u_1”能够访问它。要让程序能够通过连接池访问它,Tomcat4.1.30需要添加如下内容:
<!-- 所有带有本行首位标记的皆为注释,可不添加 -->
<Resource name="jdbc/TestPool" type="javax.sql.DataSource"/>
<!-- 定义了一处类型为数据源的资源“jdbc/TestPool” -->
<ResourceParams name="jdbc/TestPool">
<!-- 资源名为“jdbc/TestPool”的资源的参数 -->
<parameter>
<name>driverClassName</name>
<value>org.postgresql.Driver</value>
</parameter>
<!-- JDBC驱动类名 -->
<parameter>
<name>url</name>
<value>jdbc:postgresql://127.0.0.1:5432/test_d_1</value>
</parameter>
<!-- 要连接的数据库 -->
<parameter>
<name>username</name>
<value>test_u_1</value>
</parameter>
<!-- 连接这个数据库的帐号 -->
<parameter>
<name>password</name>
<value>test_p_1</value>
</parameter>
<!-- 这个帐号对应的口令 -->
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<!-- 最大连接数 -->
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<!-- 最大空闲连接数 -->
</ResourceParams>
<!-- 资源的参数定义完成 -->
Tomcat5.5.2则应当按照如下格式添加:
<Resource name="jdbc/TestPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/test_d_1"
uname="test_u_1"
password="test_p_1"
maxActive="4"
maxIdle="2"/>
按照同样的格式可以添加不止一处数据源,跟在第一处数据源后面,但资源名必须也以“jdbc/”开头,且不能重名,也必须在“<Context/>”之前。
找到文件“Web应用/WEB-INF/web.xml”,修改其内容。没有就新创建一个。其基本格式如下:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>这个“Web应用”的名字</display-name>
<description>对这个“Web应用”的文字描述</description>
</web-app>
在“</web-app>”前放置如下格式的内容:
<resource-ref>
<description>
DataSource test.
</description>
<!-- 对这处资源的文字描述 -->
<res-ref-name>
jdbc/TestPool
</res-ref-name>
<!-- 要引用的资源 -->
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
既然容器描述里可以定义多个资源,这里也可以引用多个资源。把需要引用的资源都放在“</web-app>”即可。
这些事情做完,用Tomcat应用管理器重新启动这个“Web应用”。
10.8 一点经验
如果发现对某“Web应用”所做的更改不起作用,可以先清空目录“$CATALINA_HOME/work/Standalone/localhost”下对应的目录,关闭该“Web应用”,稍后再启动该“Web应用”。
如果发现对Tomcat所做的更改不起作用,可以先关闭Tomcat,删空目录“$CATALINA_HOME/work/Standalone/localhost”,稍后再启动Tomcat。
以上两者在Tomcat5.5.2中对应的目录为“$CATALINA_HOME/work/Catalina/localhost”.
如果发现Tomcat在关闭时出错,可以用命令“ps -A|grep java”查查Tomcat是否关掉了。没正常关闭的Tomcat往往会带来许多麻烦。如果Tomcat正常关闭,并且没有其他Java程序在运行,这个命令不会有结果;如果有结果,一定是Tomcat,找出它的进程号,用“kill 进程号”或“killall java”杀掉。
由于软件设计的BUG,Tomcat5.5.2不直接支持中文,网页中的中文全部乱码,必须先做修改。进Tomcat的安装目录“CATALINA_HOME”,找到其中的文件“conf/web.xml”。找这样一段:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
加点内容,变成:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>javaEncoding</param-name>
<param-value>GB18030</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
关闭Tomcat,删空目录“$CATALINA_HOME/work/Catalina/localhost”,稍后再启动Tomcat即可。
Tomcat5.5.2可以以非“root”身份运行,运行前需要把“$CATALINA_HOME”以及其中一切文件的组和所有者更改为要运行的组和用户。
回复贴到 http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=91508 。不要回复本贴。
页:
[1]