分享
 
 
 

JSP高级编程 3

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

第3章JSP开发平台的建立:Tomcat

自从J S P发布以后,推出了各式各样的J S P引擎。作为世界上用得最多的We b服务器软件—

A p a c h e的Apache Group也在进行J S P的实用研究。最初的软件产品是在A p a c h e的Java Servlet引擎

即A p a c h e J S e r v的基础上实现的G N U J S P,一直到G N U J S P 1 . 0,基本上实现了JSP 1.0标准。另外

还出现了一个被称为G S P的产品,是作为G N U体系的一个服务器端的S c r i p t语言实现的。

G N U J S P基本上是一个A p a c h e J S e r v的附属,它主要是利用S e r v l e t将J S P源文件翻译为一个S e r v l e t

的J a v a语言源文件,然后经J a v a编译器编译后作为S e r v l e t执行,这样做的好处前面已经说明了。

在完成G N U J S P 1 . 0的开发以后,开发组的成员开始考虑在S U N的J S W D K基础上开发一个可

以直接提供We b服务的J S P服务器,当然同时也支持S e r v l e t。这样,J a k a r t a - To m c a t就诞生了。

作为一个开放源代码的软件, J a k a r t a - To m c a t有着自己独特的优势:

首先,它容易得到。事实上,任何人都可以从互联网上自由地这个软件。无论从

h t t p : / / j a k a r t a . A p a c h e . o rg还是从其他网站。

其次,对于开发人员,特别是J a v a开发人员,To m c a t提供了全部的源代码,包括S e r v l e t引擎、

J S P引擎、H T T P服务器. . . . . .,无论是对哪一方面感兴趣的程序员,都可以从这些由世界顶尖的程

序员书写的代码中获得收益。

最后,由于源代码的开放及世界上许多程序员的卓有成效的工作, To m c a t已经可以和大部

分的主流服务器一起工作,而且是以相当高的效率一起工作。如:以模块的形式被载入A p a c h e,

以I S A P I的形式被载入I I S或P W S,以N S A P I的形式被载入Netscape Enterprise Server. . . . . .。

接下来,读者可以看到:

• 如何安装To m c a t,让它发挥作用。

• 如何让To m c a t和A p a c h e、I I S等一起工作。

• 如何配置To m c a t,让它符合自己的要求。

下面,先来建立一个试验用的J S P页面,读者可以先将以下的代码存为H e l l o Wo r l d . j s p。

<HTML>

<HEAD>

<TITLE>JSP测试页面---HelloWorld!</TITLE>

</HEAD>

<BODY>

<%

out.println("<h1>Hello World!<br>世界,你好!</h1>");

%>

</BODY>

</HTML>

3.1 To m c a t的安装和直接使用

在A p a c h e的j a k a r t a项目的主页上,可以看到有To m c a t的超连接,在这里可以找到各种版本

的区域,包括当前的发布( R e l e a s e)版本、开发中的各种版本,其中又分为Wi n 3 2版本和

L i n u x版本,其实对于完全由J a v a写成的To m c a t,Wi n 3 2版本和L i n u x版本没有多大区别,比如

L i n u x版本,在S o l a r i s下也没有问题。这里,主要以Wi n 3 2版本作为示例。

注意:在安装使用To m c a t之前,先安装J D K,最好是S u n的J D K 1 . 2 . 2或J D K 1 . 3。

首先,j a k a r t a - t o m c a t . z i p包,解压缩到一个目录下,如:“c : \ t o m c a t”。这时,会得到如

下的目录结构:

t o m c a t

- - - j a k a r t a - t o m c a t

| - - - b i n To m c a t执行脚本目录

| - - - c o n f To m c a t配置文件

| - - - d o c To m c a t文档

| - - - l i b To m c a t运行需要的库文件( J A R S)

| - - - l o g s To m c a t执行时的L O G文件

| - - - s r c To m c a t的源代码

| - - - w e b a p p s To m c a t的主要We b发布目录

| - - - w o r k To m c a t的工作目录,

To m c a t将翻译J S P文件到的J a v a文件和c l a s s文件放在这里

在B i n目录下,有一个名为s t a r t u p . b a t的脚本文件,执行这个脚本文件,就可以启动To m c a t服

务器,不过,在启动服务器之前,还需要进行一些设置。

首先,设置环境变量。

Wi n 9 x在a u t o e x e c . b a t里用set 语句来设定环境变量,如: set T O M C AT_HOME = c:\tomcat。

在w i n n t / w i n 2 0 0 0里可以选择“我的电脑”,右键点出菜单,选择属性,弹出对话框“系统特

性”,选择“高级”选项页,然后点按钮“环境变量”,可以编辑系统的环境变量。

• TO M C AT _ H O M E值:c:\tomcat (用TO M C AT _ H O M E指示t o m c a t根目录。

• JAVA _ H O M E值:c : \ j a v a \ j d k (用J AVA _ H O M E指示j d k 1 . 3安装目录)。

• CLASSPAT H值:c : \ j a v a \ j d k \ l i b \ t o o l s . j a r。

实际上,对于C L A S S PAT H也可以直接打开t o m c a t . b a t文件,在中间可以找到好几行s e t

C L A S S PAT H . . . . . .,将自己希望加入的库文件加入到其中即可。

另外,对于J D K 1 . 3,在中文系统上安装之后,系统注册表会有问题,请用r e g e d i t打开注册

表查j a v a s o f t,位置为hkey_local_machine -> software -> javasoft -> ,找到“ Java 运行时环境”

把它导出到文件t e m p . r e g . . . .,然后用n o t e p a d编辑它,把“ Java 运行时环境”替换成“ J a v a

Runtime Environment”,然后导入。

同样,最好也把j a v a s o f t注册表项中的“Java 插件”另外复制一份为“ Java Plug-in”。

接下来就可以执行TO M C AT _ H O M E\ b i n \ s t a r t u p . b a t,测试一下To m c a t是否运行正常。

运行We b浏览器,如Netscape Navigator 或Internet Explorer 。在浏览器的地址栏中键入:

h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0。如果看到To m c a t的信息,那么就说明To m c a t已经安装成功了。然后测试

To m c a t的J S P引擎是否正常工作,即将前面建立的H e l l o Wo r l d . j s p文件拷贝到TO M C AT _ H O M E\ w

78第一部分JSP 入门

e b a p p s \ e x a m p l e s \ j s p目录下,然后在浏览器的地址栏中键入: h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0 / e x a m p l e s / j s p /

H e l l o Wo r l d . j s p,这时候应该可以看到如图3 - 1所示的画面:

图3 - 1

在启动To m c a t的过程中,可能会遇到一些问题,这里就常见问题进行一些说明。

1) 启动To m c a t失败。出现这种情况时,可能有两种现象:

第一种:执行s t a r t u p . b a t以后没有Ja v a窗口出现。

第二种:有Ja v a窗口出现,但是接着自行退出。

对于第一种情况,很可能是TO M C AT _ H O M E环境变量设置有问题,打开s t a r t u p . b a t文件,

观察脚本的写法,一般可以发现问题。

对于第二种情况,可能是当前系统中已经有一个服务器占用了8 0 8 0端口,这时需要把原先

的服务器关闭,或者利用后面讲的To m c a t的配置方法修改To m c a t的服务端口。也可能是由于

C L A S S PAT H设置有误,这时需要检查C L A S S PAT H是否设置正确。

2) 启动To m c a t成功,可以看到首页,但是不能执行J S P脚本。

这种情况一般是由于C L A S S PAT H设置有误或J AVA _ H O M E设置有误,经过试验发现,当使

用Wi n d o w s自带的j a v a . e x e(c : \ w i n n t \ s y s t e m 3 2或c : \ w i n d o w s \ s y s t e m)时可能会出现这种问题。

3.2 To m c a t和A p a c h e的配合

作为A p a c h e的一个子项目j a k a r t a - t o m c a t当然要对A p a c h e提供强有力的支持,在的

第3章J S P开发平台的建立:To m c a t79

To m c a t压缩包解开后,在TO M C A G T _ H O M E\ c o n f目录下有一个t o m c a t - A p a c h e . c o n f文件,这个

文件并不是To m c a t自己的配置文件,而是提供给A p a c h e用来使To m c a t能够和A p a c h e一起工作的。

实际上,这个文件是在To m c a t的运行过程中自动生成的。

但是,光有这个文件还不能使A p a c h e和To m c a t一起工作,还需要一个A p a c h e的动态载入库

文件A p a c h e M o d u l e J S e r v. d l l,这个文件也可以在网站h t t p : / / j a k a r t a . A p a c h e . o rg得到,需要说明的

是,对于L i n u x版本的t o m c a t,需要的是m o d _ j s e r v. s o文件,w s 5 0为后缀的文件是L i n u x下的动态

连链库文件。

首先,要得到Apache HTTP服务器。A p a c h e是一个免费而且提供源代码的H T T P服务器,由

于A p a c h e强大的性能和用户可以利用源代码构造自己的H T T P服务器的特性,A p a c h e及其衍生出

来的产品已经成为世界上应用最多的H T T P服务器,甚至连著名的I B M公司为We b s p h e r e应用服

务器提供的IBM HTTP Server也是由A p a c h e改造而来的。

在h t t p : / / j a k a r t a . A p a c h e . o rg可以得到A p a c h e服务器的最新版本,本书写作的时候,最新的发

行版已经到了A p a c h e 1 . 3 . 1 2,而A p a c h e 2 . 0 a 6也已经提供用于测试了。

Wi n d o w s下的A p a c h e版本是一个安装文件,可以轻松地安装在计算机上。而如果在L i n u x下

使用A p a c h e,那么最好使用源代码包自己进行编译,需要注意的是,编译时需使用选项e n a b l e -

m o d u l e = s o。

双击A p a c h e _ 1 _ 3 _ 1 2 _ Wi n 3 2 . e x e文件进行安装,缺省安装目录为C:\Program Files\Apache

G r o u p \ A p a c h e,可以修改为自己喜欢的目录。

如果需要修改A p a c h e服务器工作的端口号以及H T M L发布目录或者其他A p a c h e的参数,那

么可以修改A p a c h e安装目录\ c o n f \ h t t p d . c o n f,一般可以修改H T M L发布目录为自己喜欢的目录。

至于端口号,当计算机上还运行有其他We b服务器时可以修改之,一般Wi n d o w s 9 x的机器上如果

装有P W S就需要修改,而Wi n d o w s N T和Windows 2000的机器上如果装有I I S,也需要修改。对于

没有连接到网络的机器,有时需要设置一下S e r v e r N a m e。A p a c h e服务器的具体配置请见相关书

籍,这里就不讲了。

另外最好将A p a c h e作为一个服务安装在运行Wi n d o w s N T和Windows 2000的电脑上。这只需

要执行开始→程序→ Apache Web Server→Install Apache as a service即可。

打开浏览器,在地址栏中键入h t t p : / / 1 2 7 . 0 . 0 . 1 : A p a c h e运行的端口号,如果能够见到A p a c h e的

欢迎页面,或者是一大堆文件让你选择,就可以认为A p a c h e服务器已经开始工作了。

Apache HTTP 服务器配置成功以后,就可以着手让To m c a t和A p a c h e一起工作。首先,将得

到的A p a c h e M o d u l e J S e r v. d l l文件拷贝到A p a c h e安装目录下的m o d u l e s子目录下, L i n u x的用户将

m o d _ j s e r v. s o文件拷贝到A p a c h e安装目录的l i b e x e c目录下,然后将A p a c h e安装目录下的

h t t p d . c o n f文件用文本编辑器打开,在最后面加入下面的指令:

INCLUDE To m c a t _ H o m e \ c o n f \ t o m c a t . c o n f —对于Wi n d o w s用户。

或INCLUDE To m c a t _ H o m e / c o n f / t o m c a t . c o n f —对于L i n u用户。

上面的To m c a t _ H o m e指的是To m c a t的安装目录。

最后,在h t t p d . c o n f文件中加上一行: LoadModule jserv_module modules/ApacheModuleJServ.

d l l。

80第一部分JSP 入门

对于L i n u x下的用户,一般不需要手动加上LoadModule jserv_module libexec/mod_jserv. s o这

一行,t o m c a t - A p a c h e . c o n f文件已经缺省加上了,如果没加,自行加上即可。

一切就绪以后,重新启动A p a c h e服务器和To m c a t,在浏览器的地址栏中键入: h t t p : / /

1 2 7 . 0 . 0 . 1 : A p a c h e运行的端口号/ e x a m p l e s / j s p /,如果能够看到To m c a t的J S P示例列表,就说明

To m c a t已经和A p a c h e一起工作了。

3.3 To m c a t和I I S的配合

Wi n d o w s平台下最常用的We b服务器无疑是I I S(包括P W S),对于I I S,To m c a t也提供了配合

工作的方法,使用这种方法,可以为本来不具有Java Servlet和J S P功能的I I S增加处理J S P和J a v a

S e r v l e t的功能。

为了使To m c a t和I I S一起工作,首先要得到i s a p i _ r e d i r e c t . d l l,这是一个I I S的插件( P l u g - i n),

可以从h t t p : / / j a k a r t a . A p a c h e . o rg /直接编译好的版本,也可以自己使用Visual C++编译得到。

得到以后,放到一个自己喜欢的目录,例如c:\tomcat\Jakarta-tomcat\bin\iis\i386\ 目录下。

另外,在使I I S和To m c a t配合的过程中,还需要用到另外两个To m c a t的配置文件,一个是

w o r k e r s . p r o p e r t i e s,这个文件定义了To m c a t的工作进程使用的主机和端口。在To m c a t的c o n f目录中

有一个示范性的w o r k e r s . p r o p e r t i e s文件。另一个是u r i w o r k e r m a p . p r o p e r t i e s,这个文件是映射U R L

目录和To m c a t工作进程的。同样,在To m c a t的c o n f目录中有一个示范性的u r i w o r k e r m a p . p r o p e r t i e s

文件。

首先,配置i s a p i _ r e d i r e c t . d l l。

1) 在系统注册表中建立一个新的键值: H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E \ A p a c h e

Software Foundation\Jakarta Isapi Redirector\1.0。

2) 添加一个名为e x t e n s i o n _ u r i的字符串值为/ j a k a r t a / i s a p i _ r e d i r e c t . d l l。

3) 添加一个名为l o g _ f i l e的字符串值为c : \ t o m c a t \ J a k a r t a - t o m c a t \ l o g s \ i s a p i . l o g。

4) 添加一个名为l o g _ l e v e l的字符串值为d e b u g、i n f o r m、e r r o r、e m e rg中的一个。

5) 添加一个名为w o r k e r _ f i l e的字符串值为

6) c:\tomcat\jakarta-tomcat\conf\workers.properties。

7) 添加一个名为w o r k e r _ m o u n t _ f i l e的字符串值为

8) c:\tomcat\jakarta-tomcat\conf\ uriworkermap.properties。

然后,打开I I S的管理控制台,在需要使用To m c a t提供附加的J S P和Java Servlet服务的We b站点

中添加一个虚拟目录。注意,一定要使用“ j a k a r t a”作为虚拟目录的名称,这个虚拟目录的实际

物理位置应当是包含i s a p i _ r e d i r e c t . d l l文件的目录,这里假设为c : \ t o m c a t \ J a k a r t a - t o m c a t \ b i n \ i i s \ i 3 8 6。

在设定虚拟目录时注意要设此虚拟目录为可执行。如果是在P W S中,一样处理。

接着,在I I S的控制台中为此We b站点添加一个I S A P I过滤器(在此We b站点上点击鼠标右键,

选择属性)。名称随意,但过滤器要设定为i s a p i _ r e d i r e c t . d l l这个文件。如果使用的是P W S就比较

麻烦了。需要使用注册表编辑器,在键H K E Y _ L O C A L _ M A C H I N E \ S y s t e m \ C u r r e n t C o n t r o l S e t \ S e

r v i c e s \ W 3 S V C \ P a r a m e t e r s中,有一个名为Filter Dlls的键值,在这个键值中添加i s a p i _ r e d i r e c t . d l l,

注意要包含完整的路径。

第3章J S P开发平台的建立:To m c a t81

最后,重新启动I I S或P W S,最好是能够重新启动计算机。

启动To m c a t以后,打开浏览器,在地址栏中键入h t t p : / / 1 2 7 . 0 . 0 . 1 / e x a m p l e s /,如果能够看到

j s p和s e r v l e t两个目录,就说明利用i s a p i _ r e d i r e c t . d l l所作的重定向已经成功,可以执行一下j s p目

录下的例子做试验。

3.4 To m c a t的配置和常见问题

To m c a t为用户提供了一系列的配置文件来帮助用户配置自己的To m c a t,和Apache HTTP不

同,To m c a t的配置文件主要是基于X M L的;如s e r v e r. x m l、w e b . x m l . . . . . .,只有w o r k e r s . p r o p e r t i e s

和u r i w o r k e r m a p . p r o p e r t i e s等少数几个文件是传统的配置文件。本节将详细讨论To m c a t的主要配

置文件以及如何利用这些配置文件解决常见问题。

3.4.1 To m c a t的主配置文件:s e r v e r. x m l

观察s e r v e r. x m l,可以发现其中有如表0一些元素。

表3 - 1

元素描述

S e r v e r 是S e r v e r元素是s e r v e r. x m l文件的最高级别的元素, S e r v e r元素描述一

个To m c a t服务器,一般来说用户不用关心这个元素。一个S e r v e r元素

是一般会包括L o g g e r和C o n t e x t M a n a g e r两个元素

L o g g e r 是L o g g e r元素定义了一个日志对象,一个日志对象包含有如下属性:

是1) name 。表示这个日志对象的名称。

是2) path。表示这个日志对象包含的日志内容要输出到哪一个日志文件。

是3) v e r b o s i t y L e v e l。表示这个日志文件记录的日志的级别。

是一般来说, L o g g e r对象是对Java Servlet、J S P和To m c a t运行期事件

的记录

C o n t e x t M a n a g e r 是C o n t e x t M a n a g e r定义了一组C o n t e x t I n t e r c e p t o r s(C o n t e x t M a n a g e的

事件监听器) , RequestInterceptors(C o n t e x t M a n a g e的事件监听器),

C o n t e x t s(We b应用程序的上下文目录)和它们的C o n n e c t o r s(连接

器)的结构和配置。

是C o n t e x t M a n a g e r包含如下一些属性:

是1) debug。记录日志记录调试信息的等级。

是2) home。w e b a p p s /、c o n f /、l o g s /和所有C o n t e x t的根目录信息。这

个属性的作用是从一个不同于TO M C AT _ H O M E的目录启动To m c a t。

3) workDir。To m c a t工作目录。

ContextInterceptor 和R e q u e s t I n t e r c e p t o r 是两者都是监听C o n t e x t M a n a g e r的特定事件的拦截器。C o n t e x t I n t e r c e p t o r

监听To m c a t的启动和结束事件信息。而R e q u e s t I n t e r c e p t o r监听用户对服

务器发出的请求信息。一般用户无需关心这些拦截器,对于开发人员,

需要了解这就是全局性的操作得以实现的方法

C o n n e c t o r 是C o n n e c t o r(连接器)对象描述了一个到用户的连接,不管是直接

由To m c a t到用户的浏览器还是通过一个We b服务器。To m c a t的工作进

程和由不同的用户建立的连接传来的读/写信息和请求/答复信息都是

由连接器对象管理的。对连接器对象的配置中应当包含管理类、

T C P / I P端口等内容

82第一部分JSP 入门

(续)

元素描述

C o n t e x t 是每一个C o n t e x t都描述了一个To m c a t的We b应用程序的目录。这个

对象包含以下属性:

是1) docBase。这是C o n t e x t的目录。可以是绝对目录也可以是基于

C o n t e x t M a n a g e的根目录的相对目录。

是2) path。这是C o n t e x t在We b服务时的虚拟目录位置和目录名。

是3) debug。日志记录的调试信息记录等级。

是4) reloadable。这是为了方便S e r v l e t的开发人员而设置的,当这个

属性开关打开的时候,To m c a t将检查S e r v l e t是否被更新而决定是否自

动重新载入它

1. 加入自己的日志文件

添加L o g g e r对象就可以加入自己的日志文件,添加工作相当简单,只需要将作为示例的

L o g g e r对象复制一份,然后修改一下前面介绍的几个属性就可以了。在设定了L o g g e r以后,就

可以在自己的S e r v l e t中使用S e r v l e t C o n t e x t . l o g ( )方法来建立自己的日志文件。

2. 设定新的J S P目录

设立新的J S P工作目录是比较简单的,只需要添加一个C o n t e x t对象就可以了。如,要在

c : \ j s p目录下开发J S P项目,并且让用户可以使用/ m y b o o k /虚拟目录访问,则:

<Context path="/mybook" docBase="c:\jsp" debug="0" reloadable="true" >

</Context>

一般来说,这样就可以直接执行J S P文件了,如果进一步想要在这下面建立We b应用程序,

那么还需要进一步的配置,具体方法在后面论述。

3.4.2 Wi n d o w s下代码保护的问题

在Wi n d o w s下使用To m c a t时有一个问题需要注意,可以做一个试验,启动To m c a t后,在浏

览器的地址栏中键入: http://127.0.0.1:8080/examples/jsp/ HelloWo r l d . J S P(注意后缀要大写)。

就会发现奇怪的现象,浏览器的窗口中什么都没有,查看H T M L源文件就会发现,这个J S P文件

的源代码被To m c a t完全输出到了浏览器!如果是这样,岂不是服务器端的任何源代码都会被暴

露在互联网上。

实际上,解决方法很简单,把各种后缀的组合全部写到To m c a t _ H o m e \ c o n f \ w e b . x m l里就可

以了,这样t o m c a t会将不同后缀名的j s p分开对待,就不会泄露代码了。

<servlet-mapping>

<servlet-name>

jsp

</servlet-name>

<url-pattern>

*.jsp

</url-pattern>

</servlet-mapping>

<servlet-mapping>

第3章J S P开发平台的建立:To m c a t83

<servlet-name>

Jsp

</servlet-name>

<url-pattern>

*.Jsp

</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>

JSp

</servlet-name>

<url-pattern>

*.JSp

</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>

JsP

</servlet-name>

<url-pattern>

*.JsP

</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>

JSP

</servlet-name>

<url-pattern>

*.JSP

</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>

jSp

</servlet-name>

<url-pattern>

*.jSp

</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>

jSP

</servlet-name>

<url-pattern>

*.jSP

</url-pattern>

</servlet-mapping>

<servlet-mapping>

84第一部分JSP 入门

<servlet-name>

jsP

</servlet-name>

<url-pattern>

*.jsP

</url-pattern>

</servlet-mapping>

3.4.3 Apache、I I S和To m c a t协作时工作目录的添加

1. Apache

由于J a k a r t a - To m c a t项目是A p a c h e的一个子项目,所以向To m c a t - A p a c h e协作的We b服务器添

加工作目录时只需要修改To m c a t - A p a c h e . c o n f文件就可以了。也许读者会觉得奇怪, To m c a t -

A p a c h e . c o n f文件不是在To m c a t启动时自动生成的吗?的确如此,但是To m c a t自动生成的To m c a t -

A p a c h e . c o n f文件仅仅是To m c a t提供的一个缺省配置文件而已,如果需要,可以修改,然后存放

在另外的目录中,或是更名,再在h t t p d . c o n f文件中将这个新的文件包含进来就可以了。

为什么To m c a t不自动修改To m c a t - A p a c h e . c o n f文件以适应工作目录添加的需要呢? To m c a t的

确修改了To m c a t - A p a c h e . c o n f文件,但是修改的结果显然是不正确的。如,前面在s e r v e r. x m l中

添加了工作目录/ m y b o o k - - > c : \ j s p后,To m c a t修改To m c a t - A p a c h e . c o n f文件,添加了这么几行:

Alias /mybook C:\tomcat\jakarta-tomcat\webapps\mybook

<Directory "C:\tomcat\jakarta-tomcat\webapps\mybook">

Options Indexes FollowSymLinks

</Directory>

ApJServMount /mybook/servlet /mybook

<Location /mybook/Web-INF/ >

AllowOverride Non

deny from all

</Location>

这显然是有问题的,尽管虚拟目录是/ m y b o o k,但是实际的目录并不是C : \ t o m c a t \ j a k a r t a -

t o m c a t \ w e b a p p s \ m y b o o k。查看To m c a t的源代码C : \ t o m c a t \ j a k a r t a - t o m c a t \ s r c \ o rg \ A p a c h e \ t o m c a t \ t a s k A p a c h e C o n f i g . j a v a文件可以发现,To m c a t在生成To m c a t - A p a c h e . c o n f文件的时候,简单地在虚拟

目录前面加上原先To m c a t的缺省w e b a p p目录作为新的工作目录:

pw.println("Alias " + path + " " +

FileUtil.patch(tomcatHome + "/webapps" + path));

pw.println("<Directory \"" +

FileUtil.patch(tomcatHome + "/webapps" + path) +

"\">");

pw.println(" Options Indexes FollowSymLinks");

pw.println("</Directory>");

那么如何解决这个问题呢?修改To m c a t的源代码也可以,不过,对于一般的用户,如前所

述直接修改To m c a t - A p a c h e . c o n f文件更现实一些。修改的方法举例如下:

Alias /mybook C:\jsp

第3章J S P开发平台的建立:To m c a t85

<Directory "C:\jsp">

Options Indexes FollowSymLinks

</Directory>

ApJServMount /mybook/servlet /mybook

<Location /mybook/Web-INF/ >

AllowOverride None

deny from all

</Location>

也就是简单地将原先错误的实际目录C : \ t o m c a t \ j a k a r t a - t o m c a t \ w e b a p p s \ m y b o o k修改为c : \ j s p

就可以了。

修改完文件后,一定要存为另一个文件并修改h t t p d . c o n f文件将这个文件包含进来,否则,

重新启动To m c a t后,这个正确的To m c a t - A p a c h e . c o n f文件会被To m c a t重新生成的To m c a t -

A p a c h e . c o n f文件覆盖掉。最后,重启A p a c h e和To m c a t就可以了。

2. IIS

与A p a c h e和To m c a t几乎无缝的配合不一样, I I S和To m c a t的配合多少有些复杂,需要向

ISAPI Redirect添加新的内容。不过还好, To m c a t的u n i w o r k e r m a p . c o n f文件将这个过程简单化

了。

需要做的事情共分两步:

1) 向To m c a t中添加一个工作目录。前面已经讲述了如何实现,这里依然使用/ m y b o o k - -

> c : \ j s p这个例子。

2) 向ISAPI Redirect添加工作目录。使用文本编辑器打开文件u n i w o r k e r m a p . c o n f,添加一

行:

/mybook/*=ajp12

然后重新启动I I S和To m c a t就可以了。

3.4.4 设定To m c a t作为Wi n d o w s的服务而启动

手工启动To m c a t显然不是一个合适的使用To m c a t作为We b服务的方法,在L i n u x下可以通过

修改启动脚本自动启动To m c a t,在Wi n d o w s下则可以设定To m c a t作为Wi n d o w s的服务而启动。

To m c a t作为Windows NT/2000的一个服务是需要借助工具的

1) 工具,这里作为例子的是gservany ----将N T下的一般应用程序作为服务运行的工具。

网址为h t t p : / / w w w. a d v o k . c o m / g s e r v a n y. h t m l。将z i p文件解压缩,将g s e r v a n y. e x e放入

w i n n t \ s y s t e m 3 2目录下,(以防以后被误删)。

2) 在N T的C o m m a n d(命令行模式)下输入: gservany -i tomcat “C : \ j a k a r t a - t o m c a t \ b i n”

“s t a r t u p . b a t”“C : \ j a k a r t a - t o m c a t \ b i n” “s h u t d o w n . b a t”。

3) 启动s e r v i c e管理器,会看到tomcat service被装上,加些注释说明这个s e r v i c e实际干什么,

再修改启动类型为“自动”。然后再启动它。

这样,就成功地将To m c a t作为S e r v i c e安装在N T下了。

其实,将N T下的应用程序作为服务安装在N T中的工具还有很多,任何一种都应该可以将

86第一部分JSP 入门

To m c a t加入到N T的服务中。

3.4.5 在To m c a t中建立新的We b应用程序

J S P主要是为建立We b网站而开发的技术,这种技术由We b应用程序的一整套We b文件(j s p,

s e r v l e t,h t m l,j p g,g i f,c l a s s . . . . . .)所组成。To m c a t为We b应用程序的建立提供了一系列的帮助,

下面分步骤描述。

1. 应用程序的目录和结构

按照To m c a t的规范,从/ e x a m p l e例子目录来看, To m c a t的We b应用程序应该由如表3 - 2所示

目录组成的。

表3 - 2

*.html, *.jsp, etc. 这这里可以有许多目录,由用户的网站结构而定,实现的功能应该是网站的界面,也就

是用户主要的可见部分。除了H T M L文件、J S P文件外,还有j s(J a v a S c r i p t)文件和c s s

(样式表)文件以及其他多媒体文件等等

We b - I N F / w e b . x m l 这这是一个We b应用程序的描述文件。这个文件是一个X M L文件,描述了S e r v l e t和这个

We b应用程序的其他组件信息,此外还包括一些初始化信息和安全约束等等

We b - I N F / c l a s s e s / 这这个目录及其下的子目录应该包括这个We b应用程序的所有S e r v l e t文件,以及没有被

压缩打入J A R包的其他c l a s s文件和相关资源。注意,在这个目录下的J a v a类应该按照其所

属的包组织目录

We b - I N F / l i b / 这这个目录下包含了所有压缩到J A R文件中的类文件和相关文件。比如:第三方提供的

J a v a库文件、J D B C驱动程序等等. . . . . .

2. web.xml文件

w e b . x m l文件包含了描述整个We b应用程序的信息。下面以一个w e b . x m l文件为例,讲解里

面的各个对象。

web.xml:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<!-

Web应用程序的主要描述

-->

<display-name>My Web Application</display-name>

<description>

在这里加入Web应用程序的描述信息

</description>

<!-

下面定义了Web应用程序的初始化参数,

在JSP或Servlet文件中使用下面的语句

来得到初始化参数

String value =

getServletContext().getInitParameter("name");

这里可以定义任意多的初始化参数

-->

第3章J S P开发平台的建立:To m c a t87

<context-param>

<param-name>webmaster</param-name>

<param-value>myaddress@mycompany.com</param-value>

<description>

这里包含了初始化参数的描述

</description>

</context-param>

<!-

下面的定义描述了组成这个Web应用程序的

Servlet,还包含初始化参数。在Tomcat中,也

可以将放在Web-INF/classes中的Servlet直接以

servlet/Servlet名访问,但是一般来说,不推荐这

样使用。而且这样的使用方法还会导致Servlet的

相关资源组织的复杂性。所以一般来说推荐将所

有的Servlet在这里定义出来。初始化参数可以在

Servlet中一这种语句的到:

String value =

getServletConfig().getInitParameter("name");

-->

<servlet>

<servlet-name>controller</servlet-name>

<description>

这里加入这个Servlet的描述

</description>

<servlet-class>com.mycompany.mypackage.ControllerServlet</servlet-class>

<init-param>

<param-name>listOrders</paramName>

<param-value>com.mycompany.myactions.ListOrdersAction</param-value>

</init-param>

<init-param>

<param-name>saveCustomer</paramName>

<param-value>com.mycompany.myactions.SaveCustomerAction</param-value>

</init-param>

<!-

服务器启动后这个Servlet加载的时间

-->

<load-on-startup>5</load-on-startup>

</servlet>

<servlet>

<servlet-name>graph</servlet-name>

<description>

这个Servlet的描述

</description>

</servlet>

<!-

Servlet映射对应了一个特殊的URI请求

到一个特殊的Servlet的关系

-->

88第一部分JSP 入门

<servlet-mapping>

<servlet-name>controller</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>graph</servlet-name>

<url-pattern>/graph</url-pattern>

</servlet-mapping>

<!-

设定缺省的Session过期时间

-->

<session-config>

<session-timeout>30</session-timeout> <!-- 30 minutes -->

</session-config>

</web-app>

3. 将应用程序打包为WA R文件

WA R文件是包装We b应用程序的一种方法,使用WA R文件,既方便了管理各种相关文件,

又减小了整个应用程序的体积。

下面先来看一看将We b应用程序打包为WA R文件的语法:

packager -webArchive[-classpath servletorjspbean/classes [ -

classFiles package/MyClass1.class: package/MyClass2.class ] ]

<content-root> [-contentFiles login.jsp:index.html:images/me.gif]

web.xml myWebApp.war

下面是一个简单的应用示例,将m y We b P a g e . x m l的配置和m y We b P a g e D i r /下的文件打入包

m y We b P a g e . w a r中:

packager -webArchive myWebPageDir myWebPage.xml myWebPage.war

使用-contentFiles 标志可以添加个别的目录文件

packager -webArchive myWebPageDir -contentFiles Hello.jsp

myWebPage.xml myWebPage.war

packager -webArchive myWebPageDir -contentFiles Hello.jsp:Hello.html

myWebPage.xml myWebPage.war

假定S e r v l e t文件在c l a s s e s / p a c k a g e / S e r v l e t 1 . c l a s s,指定S e r v l e t和J S P文件:

packager -webArchive -classpath classes myWebPageDir -contentFiles

Hello.jsp myWebPage.xml myWebPage.war.

下面示例如何仅仅包含package/Servlet1.class 和packageB/Servlet.class 两个文件到WA R文

件中:

packager -webArchive -classpath classes -classFiles package/

Servlet1.class:packageB/Servlet.class myWebPageDir -contentFiles

Hello.jsp myWebPage.xml myWebPage.war

最后,需要说明的是,每个. w a r文件前面的. x m l文件就是前面讲过的w e b . x m l文件。生成的

WA R文件可以直接放在包含We b应用程序的目录下使用。

第3章J S P开发平台的建立:To m c a t89

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有