JSP高级编程 3
[作者]:菩提树下的杨过 [来源]:互联网 [收录时间]:2007-9-16 12:31:57
<P><BR>第3章JSP开发平台的建立:Tomcat<BR>自从J S P发布以后,推出了各式各样的J S P引擎。作为世界上用得最多的We b服务器软件—<BR>A p a c h e的Apache Group也在进行J S P的实用研究。最初的软件产品是在A p a c h e的Java Servlet引擎<BR>即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标准。另外<BR>还出现了一个被称为G S P的产品,是作为G N U体系的一个服务器端的S c r i p t语言实现的。<BR>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<BR>的J a v a语言源文件,然后经J a v a编译器编译后作为S e r v l e t执行,这样做的好处前面已经说明了。<BR>在完成G N U J S P 1 . 0的开发以后,开发组的成员开始考虑在S U N的J S W D K基础上开发一个可<BR>以直接提供We b服务的J S P服务器,当然同时也支持S e r v l e t。这样,J a k a r t a - To m c a t就诞生了。<BR>作为一个开放源代码的软件, J a k a r t a - To m c a t有着自己独特的优势:<BR>首先,它容易得到。事实上,任何人都可以从互联网上自由地这个软件。无论从<BR>h t t p : / / j a k a r t a . A p a c h e . o rg还是从其他网站。<BR>其次,对于开发人员,特别是J a v a开发人员,To m c a t提供了全部的源代码,包括S e r v l e t引擎、<BR>J S P引擎、H T T P服务器. . . . . .,无论是对哪一方面感兴趣的程序员,都可以从这些由世界顶尖的程<BR>序员书写的代码中获得收益。<BR>最后,由于源代码的开放及世界上许多程序员的卓有成效的工作, To m c a t已经可以和大部<BR>分的主流服务器一起工作,而且是以相当高的效率一起工作。如:以模块的形式被载入A p a c h e,<BR>以I S A P I的形式被载入I I S或P W S,以N S A P I的形式被载入Netscape Enterprise Server. . . . . .。<BR>接下来,读者可以看到:<BR>&#8226; 如何安装To m c a t,让它发挥作用。<BR>&#8226; 如何让To m c a t和A p a c h e、I I S等一起工作。<BR>&#8226; 如何配置To m c a t,让它符合自己的要求。<BR>下面,先来建立一个试验用的J S P页面,读者可以先将以下的代码存为H e l l o Wo r l d . j s p。<BR>&lt;HTML&gt;<BR>&lt;HEAD&gt;<BR>&lt;TITLE&gt;JSP测试页面---HelloWorld!&lt;/TITLE&gt;<BR>&lt;/HEAD&gt;<BR>&lt;BODY&gt;<BR>&lt;%<BR>out.println("&lt;h1&gt;Hello World!&lt;br&gt;世界,你好!&lt;/h1&gt;");<BR>%&gt;<BR>&lt;/BODY&gt;<BR>&lt;/HTML&gt;<BR>3.1 To m c a t的安装和直接使用<BR>在A p a c h e的j a k a r t a项目的主页上,可以看到有To m c a t的超连接,在这里可以找到各种版本<BR>的区域,包括当前的发布( R e l e a s e)版本、开发中的各种版本,其中又分为Wi n 3 2版本和<BR>L i n u x版本,其实对于完全由J a v a写成的To m c a t,Wi n 3 2版本和L i n u x版本没有多大区别,比如<BR>L i n u x版本,在S o l a r i s下也没有问题。这里,主要以Wi n 3 2版本作为示例。<BR>注意:在安装使用To m c a t之前,先安装J D K,最好是S u n的J D K 1 . 2 . 2或J D K 1 . 3。<BR>首先,j a k a r t a - t o m c a t . z i p包,解压缩到一个目录下,如:“c : \ t o m c a t”。这时,会得到如<BR>下的目录结构:<BR>t o m c a t<BR>- - - j a k a r t a - t o m c a t<BR>| - - - b i n To m c a t执行脚本目录<BR>| - - - c o n f To m c a t配置文件<BR>| - - - d o c To m c a t文档<BR>| - - - l i b To m c a t运行需要的库文件( J A R S)<BR>| - - - l o g s To m c a t执行时的L O G文件<BR>| - - - s r c To m c a t的源代码<BR>| - - - w e b a p p s To m c a t的主要We b发布目录<BR>| - - - w o r k To m c a t的工作目录,<BR>To m c a t将翻译J S P文件到的J a v a文件和c l a s s文件放在这里<BR>在B i n目录下,有一个名为s t a r t u p . b a t的脚本文件,执行这个脚本文件,就可以启动To m c a t服<BR>务器,不过,在启动服务器之前,还需要进行一些设置。<BR>首先,设置环境变量。<BR>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。<BR>在w i n n t / w i n 2 0 0 0里可以选择“我的电脑”,右键点出菜单,选择属性,弹出对话框“系统特<BR>性”,选择“高级”选项页,然后点按钮“环境变量”,可以编辑系统的环境变量。<BR>&#8226; TO M C AT _ H O M E值:c:\tomcat (用TO M C AT _ H O M E指示t o m c a t根目录。<BR>&#8226; JAVA _ H O M E值:c : \ j a v a \ j d k (用J AVA _ H O M E指示j d k 1 . 3安装目录)。<BR>&#8226; CLASSPAT H值:c : \ j a v a \ j d k \ l i b \ t o o l s . j a r。<BR>实际上,对于C L A S S PAT H也可以直接打开t o m c a t . b a t文件,在中间可以找到好几行s e t<BR>C L A S S PAT H . . . . . .,将自己希望加入的库文件加入到其中即可。<BR>另外,对于J D K 1 . 3,在中文系统上安装之后,系统注册表会有问题,请用r e g e d i t打开注册<BR>表查j a v a s o f t,位置为hkey_local_machine -&gt; software -&gt; javasoft -&gt; ,找到“ Java 运行时环境”<BR>把它导出到文件t e m p . r e g . . . .,然后用n o t e p a d编辑它,把“ Java 运行时环境”替换成“ J a v a<BR>Runtime Environment”,然后导入。<BR>同样,最好也把j a v a s o f t注册表项中的“Java 插件”另外复制一份为“ Java Plug-in”。<BR>接下来就可以执行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是否运行正常。<BR>运行We b浏览器,如Netscape Navigator 或Internet Explorer 。在浏览器的地址栏中键入:<BR>h t t p : / / 1 2 7 . 0 . 0 . 1 : 8 0 8 0。如果看到To m c a t的信息,那么就说明To m c a t已经安装成功了。然后测试<BR>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<BR>78第一部分JSP 入门</P> <P>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 /<BR>H e l l o Wo r l d . j s p,这时候应该可以看到如图3 - 1所示的画面:<BR>图3 - 1<BR>在启动To m c a t的过程中,可能会遇到一些问题,这里就常见问题进行一些说明。<BR>1) 启动To m c a t失败。出现这种情况时,可能有两种现象:<BR>第一种:执行s t a r t u p . b a t以后没有Ja v a窗口出现。<BR>第二种:有Ja v a窗口出现,但是接着自行退出。<BR>对于第一种情况,很可能是TO M C AT _ H O M E环境变量设置有问题,打开s t a r t u p . b a t文件,<BR>观察脚本的写法,一般可以发现问题。<BR>对于第二种情况,可能是当前系统中已经有一个服务器占用了8 0 8 0端口,这时需要把原先<BR>的服务器关闭,或者利用后面讲的To m c a t的配置方法修改To m c a t的服务端口。也可能是由于<BR>C L A S S PAT H设置有误,这时需要检查C L A S S PAT H是否设置正确。<BR>2) 启动To m c a t成功,可以看到首页,但是不能执行J S P脚本。<BR>这种情况一般是由于C L A S S PAT H设置有误或J AVA _ H O M E设置有误,经过试验发现,当使<BR>用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)时可能会出现这种问题。<BR>3.2 To m c a t和A p a c h e的配合<BR>作为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提供强有力的支持,在的<BR>第3章J S P开发平台的建立:To m c a t79 <BR>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文件,这个<BR>文件并不是To m c a t自己的配置文件,而是提供给A p a c h e用来使To m c a t能够和A p a c h e一起工作的。<BR>实际上,这个文件是在To m c a t的运行过程中自动生成的。<BR>但是,光有这个文件还不能使A p a c h e和To m c a t一起工作,还需要一个A p a c h e的动态载入库<BR>文件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得到,需要说明的<BR>是,对于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下的动态<BR>连链库文件。<BR>首先,要得到Apache HTTP服务器。A p a c h e是一个免费而且提供源代码的H T T P服务器,由<BR>于A p a c h e强大的性能和用户可以利用源代码构造自己的H T T P服务器的特性,A p a c h e及其衍生出<BR>来的产品已经成为世界上应用最多的H T T P服务器,甚至连著名的I B M公司为We b s p h e r e应用服<BR>务器提供的IBM HTTP Server也是由A p a c h e改造而来的。<BR>在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服务器的最新版本,本书写作的时候,最新的发<BR>行版已经到了A p a c h e 1 . 3 . 1 2,而A p a c h e 2 . 0 a 6也已经提供用于测试了。<BR>Wi n d o w s下的A p a c h e版本是一个安装文件,可以轻松地安装在计算机上。而如果在L i n u x下<BR>使用A p a c h e,那么最好使用源代码包自己进行编译,需要注意的是,编译时需使用选项e n a b l e -<BR>m o d u l e = s o。<BR>双击A p a c h e _ 1 _ 3 _ 1 2 _ Wi n 3 2 . e x e文件进行安装,缺省安装目录为C:\Program Files\Apache<BR>G r o u p \ A p a c h e,可以修改为自己喜欢的目录。<BR>如果需要修改A p a c h e服务器工作的端口号以及H T M L发布目录或者其他A p a c h e的参数,那<BR>么可以修改A p a c h e安装目录\ c o n f \ h t t p d . c o n f,一般可以修改H T M L发布目录为自己喜欢的目录。<BR>至于端口号,当计算机上还运行有其他We b服务器时可以修改之,一般Wi n d o w s 9 x的机器上如果<BR>装有P W S就需要修改,而Wi n d o w s N T和Windows 2000的机器上如果装有I I S,也需要修改。对于<BR>没有连接到网络的机器,有时需要设置一下S e r v e r N a m e。A p a c h e服务器的具体配置请见相关书<BR>籍,这里就不讲了。<BR>另外最好将A p a c h e作为一个服务安装在运行Wi n d o w s N T和Windows 2000的电脑上。这只需<BR>要执行开始→程序→ Apache Web Server→Install Apache as a service即可。<BR>打开浏览器,在地址栏中键入h t t p : / / 1 2 7 . 0 . 0 . 1 : A p a c h e运行的端口号,如果能够见到A p a c h e的<BR>欢迎页面,或者是一大堆文件让你选择,就可以认为A p a c h e服务器已经开始工作了。<BR>Apache HTTP 服务器配置成功以后,就可以着手让To m c a t和A p a c h e一起工作。首先,将得<BR>到的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的用户将<BR>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安装目录下的<BR>h t t p d . c o n f文件用文本编辑器打开,在最后面加入下面的指令:<BR>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用户。<BR>或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用户。<BR>上面的To m c a t _ H o m e指的是To m c a t的安装目录。<BR>最后,在h t t p d . c o n f文件中加上一行: LoadModule jserv_module modules/ApacheModuleJServ.<BR>d l l。<BR>80第一部分JSP 入门</P> <P>对于L i n u x下的用户,一般不需要手动加上LoadModule jserv_module libexec/mod_jserv. s o这<BR>一行,t o m c a t - A p a c h e . c o n f文件已经缺省加上了,如果没加,自行加上即可。<BR>一切就绪以后,重新启动A p a c h e服务器和To m c a t,在浏览器的地址栏中键入: h t t p : / /<BR>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示例列表,就说明<BR>To m c a t已经和A p a c h e一起工作了。<BR>3.3 To m c a t和I I S的配合<BR>Wi n d o w s平台下最常用的We b服务器无疑是I I S(包括P W S),对于I I S,To m c a t也提供了配合<BR>工作的方法,使用这种方法,可以为本来不具有Java Servlet和J S P功能的I I S增加处理J S P和J a v a<BR>S e r v l e t的功能。<BR>为了使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),<BR>可以从h t t p : / / j a k a r t a . A p a c h e . o rg /直接编译好的版本,也可以自己使用Visual C++编译得到。<BR>得到以后,放到一个自己喜欢的目录,例如c:\tomcat\Jakarta-tomcat\bin\iis\i386\ 目录下。<BR>另外,在使I I S和To m c a t配合的过程中,还需要用到另外两个To m c a t的配置文件,一个是<BR>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目录中<BR>有一个示范性的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<BR>目录和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<BR>文件。<BR>首先,配置i s a p i _ r e d i r e c t . d l l。<BR>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<BR>Software Foundation\Jakarta Isapi Redirector\1.0。<BR>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。<BR>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。<BR>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中的一个。<BR>5) 添加一个名为w o r k e r _ f i l e的字符串值为<BR>6) c:\tomcat\jakarta-tomcat\conf\workers.properties。<BR>7) 添加一个名为w o r k e r _ m o u n t _ f i l e的字符串值为<BR>8) c:\tomcat\jakarta-tomcat\conf\ uriworkermap.properties。<BR>然后,打开I I S的管理控制台,在需要使用To m c a t提供附加的J S P和Java Servlet服务的We b站点<BR>中添加一个虚拟目录。注意,一定要使用“ j a k a r t a”作为虚拟目录的名称,这个虚拟目录的实际<BR>物理位置应当是包含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。<BR>在设定虚拟目录时注意要设此虚拟目录为可执行。如果是在P W S中,一样处理。<BR>接着,在I I S的控制台中为此We b站点添加一个I S A P I过滤器(在此We b站点上点击鼠标右键,<BR>选择属性)。名称随意,但过滤器要设定为i s a p i _ r e d i r e c t . d l l这个文件。如果使用的是P W S就比较<BR>麻烦了。需要使用注册表编辑器,在键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<BR>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,<BR>注意要包含完整的路径。<BR>第3章J S P开发平台的建立:To m c a t81 <BR>最后,重新启动I I S或P W S,最好是能够重新启动计算机。<BR>启动To m c a t以后,打开浏览器,在地址栏中键入h t t p : / / 1 2 7 . 0 . 0 . 1 / e x a m p l e s /,如果能够看到<BR>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目<BR>录下的例子做试验。<BR>3.4 To m c a t的配置和常见问题<BR>To m c a t为用户提供了一系列的配置文件来帮助用户配置自己的To m c a t,和Apache HTTP不<BR>同,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<BR>和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的主要配<BR>置文件以及如何? <script language="JavaScript"> document.clear (); </script><html> <head> <title>一流信息监控拦截系统(IMB System)</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style type="text/css"><!--p,body { font-size: 9pt}--></style></head><body bgcolor="#FFFFFF" text="#000000"><div align="center"><br> <br><br><br><br><br><br><br><script language="JavaScript"> alert("信息监控系统检测到不允许的词 监听器"); var infosafekey="监听器"; </script><a href=http://>信息监控系统提醒您:很抱歉,由于您提交的内容中或访问的内容中含有系统不允许的关键词或者您的IP受到了访问限制,本次操作无效,系统已记录您的IP及您提交的所有数据。请注意,不要提交任何违反国家规定的内容!本次拦截的相关信息为:监听器</a></div><script language="JavaScript">close(); document.clear (); document.writeln ("由于页面存在不良信息此页已被关闭"); location.href='about:blank'; </script></body></html>uestInterceptors(C o n t e x t M a n a g e的事件监听器),<BR>C o n t e x t s(We b应用程序的上下文目录)和它们的C o n n e c t o r s(连接<BR>器)的结构和配置。<BR>是C o n t e x t M a n a g e r包含如下一些属性:<BR>是1) debug。记录日志记录调试信息的等级。<BR>是2) home。w e b a p p s /、c o n f /、l o g s /和所有C o n t e x t的根目录信息。这<BR>个属性的作用是从一个不同于TO M C AT _ H O M E的目录启动To m c a t。<BR>3) workDir。To m c a t工作目录。<BR>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<BR>监听To m c a t的启动和结束事件信息。而R e q u e s t I n t e r c e p t o r监听用户对服<BR>务器发出的请求信息。一般用户无需关心这些拦截器,对于开发人员,<BR>需要了解这就是全局性的操作得以实现的方法<BR>C o n n e c t o r 是C o n n e c t o r(连接器)对象描述了一个到用户的连接,不管是直接<BR>由To m c a t到用户的浏览器还是通过一个We b服务器。To m c a t的工作进<BR>程和由不同的用户建立的连接传来的读/写信息和请求/答复信息都是<BR>由连接器对象管理的。对连接器对象的配置中应当包含管理类、<BR>T C P / I P端口等内容<BR>82第一部分JSP 入门</P> <P>(续)<BR>元素描述<BR>C o n t e x t 是每一个C o n t e x t都描述了一个To m c a t的We b应用程序的目录。这个<BR>对象包含以下属性:<BR>是1) docBase。这是C o n t e x t的目录。可以是绝对目录也可以是基于<BR>C o n t e x t M a n a g e的根目录的相对目录。<BR>是2) path。这是C o n t e x t在We b服务时的虚拟目录位置和目录名。<BR>是3) debug。日志记录的调试信息记录等级。<BR>是4) reloadable。这是为了方便S e r v l e t的开发人员而设置的,当这个<BR>属性开关打开的时候,To m c a t将检查S e r v l e t是否被更新而决定是否自<BR>动重新载入它<BR>1. 加入自己的日志文件<BR>添加L o g g e r对象就可以加入自己的日志文件,添加工作相当简单,只需要将作为示例的<BR>L o g g e r对象复制一份,然后修改一下前面介绍的几个属性就可以了。在设定了L o g g e r以后,就<BR>可以在自己的S e r v l e t中使用S e r v l e t C o n t e x t . l o g ( )方法来建立自己的日志文件。<BR>2. 设定新的J S P目录<BR>设立新的J S P工作目录是比较简单的,只需要添加一个C o n t e x t对象就可以了。如,要在<BR>c : \ j s p目录下开发J S P项目,并且让用户可以使用/ m y b o o k /虚拟目录访问,则:<BR>&lt;Context path="/mybook" docBase="c:\jsp" debug="0" reloadable="true" &gt;<BR>&lt;/Context&gt;<BR>一般来说,这样就可以直接执行J S P文件了,如果进一步想要在这下面建立We b应用程序,<BR>那么还需要进一步的配置,具体方法在后面论述。<BR>3.4.2 Wi n d o w s下代码保护的问题<BR>在Wi n d o w s下使用To m c a t时有一个问题需要注意,可以做一个试验,启动To m c a t后,在浏<BR>览器的地址栏中键入: <A href="http://127.0.0.1:8080/examples/jsp/">http://127.0.0.1:8080/examples/jsp/</A> HelloWo r l d . J S P(注意后缀要大写)。<BR>就会发现奇怪的现象,浏览器的窗口中什么都没有,查看H T M L源文件就会发现,这个J S P文件<BR>的源代码被To m c a t完全输出到了浏览器!如果是这样,岂不是服务器端的任何源代码都会被暴<BR>露在互联网上。<BR>实际上,解决方法很简单,把各种后缀的组合全部写到To m c a t _ H o m e \ c o n f \ w e b . x m l里就可<BR>以了,这样t o m c a t会将不同后缀名的j s p分开对待,就不会泄露代码了。<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>jsp<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.jsp<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>第3章J S P开发平台的建立:To m c a t83 <BR>&lt;servlet-name&gt;<BR>Jsp<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.Jsp<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>JSp<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.JSp<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>JsP<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.JsP<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>JSP<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.JSP<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>jSp<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.jSp<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;<BR>jSP<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.jSP<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>84第一部分JSP 入门</P> <P>&lt;servlet-name&gt;<BR>jsP<BR>&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;<BR>*.jsP<BR>&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>3.4.3 Apache、I I S和To m c a t协作时工作目录的添加<BR>1. Apache<BR>由于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服务器添<BR>加工作目录时只需要修改To m c a t - A p a c h e . c o n f文件就可以了。也许读者会觉得奇怪, To m c a t -<BR>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 -<BR>A p a c h e . c o n f文件仅仅是To m c a t提供的一个缺省配置文件而已,如果需要,可以修改,然后存放<BR>在另外的目录中,或是更名,再在h t t p d . c o n f文件中将这个新的文件包含进来就可以了。<BR>为什么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的<BR>确修改了To m c a t - A p a c h e . c o n f文件,但是修改的结果显然是不正确的。如,前面在s e r v e r. x m l中<BR>添加了工作目录/ m y b o o k - - &gt; c : \ j s p后,To m c a t修改To m c a t - A p a c h e . c o n f文件,添加了这么几行:<BR>Alias /mybook C:\tomcat\jakarta-tomcat\webapps\mybook<BR>&lt;Directory "C:\tomcat\jakarta-tomcat\webapps\mybook"&gt;<BR>Options Indexes FollowSymLinks<BR>&lt;/Directory&gt;<BR>ApJServMount /mybook/servlet /mybook<BR>&lt;Location /mybook/Web-INF/ &gt;<BR>AllowOverride Non<BR>deny from all<BR>&lt;/Location&gt;<BR>这显然是有问题的,尽管虚拟目录是/ m y b o o k,但是实际的目录并不是C : \ t o m c a t \ j a k a r t a -<BR>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 \<BR>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文件的时候,简单地在虚拟<BR>目录前面加上原先To m c a t的缺省w e b a p p目录作为新的工作目录:<BR>pw.println("Alias " + path + " " +<BR>FileUtil.patch(tomcatHome + "/webapps" + path));<BR>pw.println("&lt;Directory \"" +<BR>FileUtil.patch(tomcatHome + "/webapps" + path) +<BR>"\"&gt;");<BR>pw.println(" Options Indexes FollowSymLinks");<BR>pw.println("&lt;/Directory&gt;");<BR>那么如何解决这个问题呢?修改To m c a t的源代码也可以,不过,对于一般的用户,如前所<BR>述直接修改To m c a t - A p a c h e . c o n f文件更现实一些。修改的方法举例如下:<BR>Alias /mybook C:\jsp<BR>第3章J S P开发平台的建立:To m c a t85 <BR>&lt;Directory "C:\jsp"&gt;<BR>Options Indexes FollowSymLinks<BR>&lt;/Directory&gt;<BR>ApJServMount /mybook/servlet /mybook<BR>&lt;Location /mybook/Web-INF/ &gt;<BR>AllowOverride None<BR>deny from all<BR>&lt;/Location&gt;<BR>也就是简单地将原先错误的实际目录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<BR>就可以了。<BR>修改完文件后,一定要存为另一个文件并修改h t t p d . c o n f文件将这个文件包含进来,否则,<BR>重新启动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 -<BR>A p a c h e . c o n f文件覆盖掉。最后,重启A p a c h e和To m c a t就可以了。<BR>2. IIS<BR>与A p a c h e和To m c a t几乎无缝的配合不一样, I I S和To m c a t的配合多少有些复杂,需要向<BR>ISAPI Redirect添加新的内容。不过还好, To m c a t的u n i w o r k e r m a p . c o n f文件将这个过程简单化<BR>了。<BR>需要做的事情共分两步:<BR>1) 向To m c a t中添加一个工作目录。前面已经讲述了如何实现,这里依然使用/ m y b o o k - -<BR>&gt; c : \ j s p这个例子。<BR>2) 向ISAPI Redirect添加工作目录。使用文本编辑器打开文件u n i w o r k e r m a p . c o n f,添加一<BR>行:<BR>/mybook/*=ajp12<BR>然后重新启动I I S和To m c a t就可以了。<BR>3.4.4 设定To m c a t作为Wi n d o w s的服务而启动<BR>手工启动To m c a t显然不是一个合适的使用To m c a t作为We b服务的方法,在L i n u x下可以通过<BR>修改启动脚本自动启动To m c a t,在Wi n d o w s下则可以设定To m c a t作为Wi n d o w s的服务而启动。<BR>To m c a t作为Windows NT/2000的一个服务是需要借助工具的<BR>1) 工具,这里作为例子的是gservany ----将N T下的一般应用程序作为服务运行的工具。<BR>网址为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放入<BR>w i n n t \ s y s t e m 3 2目录下,(以防以后被误删)。<BR>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”<BR>“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”。<BR>3) 启动s e r v i c e管理器,会看到tomcat service被装上,加些注释说明这个s e r v i c e实际干什么,<BR>再修改启动类型为“自动”。然后再启动它。<BR>这样,就成功地将To m c a t作为S e r v i c e安装在N T下了。<BR>其实,将N T下的应用程序作为服务安装在N T中的工具还有很多,任何一种都应该可以将<BR>86第一部分JSP 入门</P> <P>To m c a t加入到N T的服务中。<BR>3.4.5 在To m c a t中建立新的We b应用程序<BR>J S P主要是为建立We b网站而开发的技术,这种技术由We b应用程序的一整套We b文件(j s p,<BR>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应用程序的建立提供了一系列的帮助,<BR>下面分步骤描述。<BR>1. 应用程序的目录和结构<BR>按照To m c a t的规范,从/ e x a m p l e例子目录来看, To m c a t的We b应用程序应该由如表3 - 2所示<BR>目录组成的。<BR>表3 - 2<BR>*.html, *.jsp, etc. 这这里可以有许多目录,由用户的网站结构而定,实现的功能应该是网站的界面,也就<BR>是用户主要的可见部分。除了H T M L文件、J S P文件外,还有j s(J a v a S c r i p t)文件和c s s<BR>(样式表)文件以及其他多媒体文件等等<BR>We b - I N F / w e b . x m l 这这是一个We b应用程序的描述文件。这个文件是一个X M L文件,描述了S e r v l e t和这个<BR>We b应用程序的其他组件信息,此外还包括一些初始化信息和安全约束等等<BR>We b - I N F / c l a s s e s / 这这个目录及其下的子目录应该包括这个We b应用程序的所有S e r v l e t文件,以及没有被<BR>压缩打入J A R包的其他c l a s s文件和相关资源。注意,在这个目录下的J a v a类应该按照其所<BR>属的包组织目录<BR>We b - I N F / l i b / 这这个目录下包含了所有压缩到J A R文件中的类文件和相关文件。比如:第三方提供的<BR>J a v a库文件、J D B C驱动程序等等. . . . . .<BR>2. web.xml文件<BR>w e b . x m l文件包含了描述整个We b应用程序的信息。下面以一个w e b . x m l文件为例,讲解里<BR>面的各个对象。<BR>web.xml:<BR>&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"<BR>"<A href=&acute;http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"&acute;>http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"</A>&gt;<BR>&lt;web-app&gt;<BR>&lt;!-<BR>Web应用程序的主要描述<BR>--&gt;<BR>&lt;display-name&gt;My Web Application&lt;/display-name&gt;<BR>&lt;description&gt;<BR>在这里加入Web应用程序的描述信息<BR>&lt;/description&gt;<BR>&lt;!-<BR>下面定义了Web应用程序的初始化参数,<BR>在JSP或Servlet文件中使用下面的语句<BR>来得到初始化参数<BR>String value =<BR>getServletContext().getInitParameter("name");<BR>这里可以定义任意多的初始化参数<BR>--&gt;<BR>第3章J S P开发平台的建立:To m c a t87 <BR>&lt;context-param&gt;<BR>&lt;param-name&gt;webmaster&lt;/param-name&gt;<BR>&lt;param-value&gt;<A href="mailto:myaddress@mycompany.com">myaddress@mycompany.com</A>&lt;/param-value&gt;<BR>&lt;description&gt;<BR>这里包含了初始化参数的描述<BR>&lt;/description&gt;<BR>&lt;/context-param&gt;<BR>&lt;!-<BR>下面的定义描述了组成这个Web应用程序的<BR>Servlet,还包含初始化参数。在Tomcat中,也<BR>可以将放在Web-INF/classes中的Servlet直接以<BR>servlet/Servlet名访问,但是一般来说,不推荐这<BR>样使用。而且这样的使用方法还会导致Servlet的<BR>相关资源组织的复杂性。所以一般来说推荐将所<BR>有的Servlet在这里定义出来。初始化参数可以在<BR>Servlet中一这种语句的到:<BR>String value =<BR>getServletConfig().getInitParameter("name");<BR>--&gt;<BR>&lt;servlet&gt;<BR>&lt;servlet-name&gt;controller&lt;/servlet-name&gt;<BR>&lt;description&gt;<BR>这里加入这个Servlet的描述<BR>&lt;/description&gt;<BR>&lt;servlet-class&gt;com.mycompany.mypackage.ControllerServlet&lt;/servlet-class&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;listOrders&lt;/paramName&gt;<BR>&lt;param-value&gt;com.mycompany.myactions.ListOrdersAction&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;saveCustomer&lt;/paramName&gt;<BR>&lt;param-value&gt;com.mycompany.myactions.SaveCustomerAction&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;!-<BR>服务器启动后这个Servlet加载的时间<BR>--&gt;<BR>&lt;load-on-startup&gt;5&lt;/load-on-startup&gt;<BR>&lt;/servlet&gt;<BR>&lt;servlet&gt;<BR>&lt;servlet-name&gt;graph&lt;/servlet-name&gt;<BR>&lt;description&gt;<BR>这个Servlet的描述<BR>&lt;/description&gt;<BR>&lt;/servlet&gt;<BR>&lt;!-<BR>Servlet映射对应了一个特殊的URI请求<BR>到一个特殊的Servlet的关系<BR>--&gt;<BR>88第一部分JSP 入门</P> <P>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;controller&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;graph&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;/graph&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!-<BR>设定缺省的Session过期时间<BR>--&gt;<BR>&lt;session-config&gt;<BR>&lt;session-timeout&gt;30&lt;/session-timeout&gt; &lt;!-- 30 minutes --&gt;<BR>&lt;/session-config&gt;<BR>&lt;/web-app&gt;<BR>3. 将应用程序打包为WA R文件<BR>WA R文件是包装We b应用程序的一种方法,使用WA R文件,既方便了管理各种相关文件,<BR>又减小了整个应用程序的体积。<BR>下面先来看一看将We b应用程序打包为WA R文件的语法:<BR>packager -webArchive[-classpath servletorjspbean/classes [ -<BR>classFiles package/MyClass1.class: package/MyClass2.class ] ]<BR>&lt;content-root&gt; [-contentFiles login.jsp:index.html:images/me.gif]<BR>web.xml myWebApp.war<BR>下面是一个简单的应用示例,将m y We b P a g e . x m l的配置和m y We b P a g e D i r /下的文件打入包<BR>m y We b P a g e . w a r中:<BR>packager -webArchive myWebPageDir myWebPage.xml myWebPage.war<BR>使用-contentFiles 标志可以添加个别的目录文件<BR>packager -webArchive myWebPageDir -contentFiles Hello.jsp<BR>myWebPage.xml myWebPage.war<BR>packager -webArchive myWebPageDir -contentFiles Hello.jsp:Hello.html<BR>myWebPage.xml myWebPage.war<BR>假定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文件:<BR>packager -webArchive -classpath classes myWebPageDir -contentFiles<BR>Hello.jsp myWebPage.xml myWebPage.war.<BR>下面示例如何仅仅包含package/Servlet1.class 和packageB/Servlet.class 两个文件到WA R文<BR>件中:<BR>packager -webArchive -classpath classes -classFiles package/<BR>Servlet1.class:packageB/Servlet.class myWebPageDir -contentFiles<BR>Hello.jsp myWebPage.xml myWebPage.war<BR>最后,需要说明的是,每个. w a r文件前面的. x m l文件就是前面讲过的w e b . x m l文件。生成的<BR>WA R文件可以直接放在包含We b应用程序的目录下使用。<BR>第3章J S P开发平台的建立:To m c a t89 <BR></P> <br />