当前位置:Linux教程 - Linux - JSP的环境引擎--Tomcat

JSP的环境引擎--Tomcat

JSP的环境引擎--Tomcat



所谓的JSP环境引擎指的就是JSP的运行环境,就象ASP的运行环境是IIS而PHP的运行环境可以是APACHE+PHP,前面我们已经提到过JSP的一大特点是他支持多平台,不仅支持Windows同样也支持Linux/Unix,现在流行的JSP引擎主要有Tomcat、JSWDK、Resin、JRun、Servletexec、Websphere、Weblogic、GNUJSP,Enhydra等几种,下面我们将重点介绍几个常用的环境引擎。

TomCat

TomCat特点

Tomcat是apache上实现jsp+javabean环境的接口程序,集成了jsp和servlet。他提供一个单独的mod_jserv.so模块,利用apache的DSO动态载入,与早先的Jserver不同,Tomcat必须作为一个单独的程序运行,所有提交给apache的java请求将通过Tomcat自带的jserv模块提交给Tomcat进一步处理。就是说,必须先运行Tomcat,再运行apache才能解释jsp/servlet程序。

Tomcat很可能成为下一代Java Web Server的主流。因为Tomcat受到Sun公司的全力支持,并由非常强大的开发组织apache来进行发展,这一工程被称为Jakarta计划。从战略上看,Sun 现在正借助apache的影响来开发server端的java技术,这就是tomcat。因此可以相信tomcat已经或者即将是一个较理想的jsp & servlet开发和支撑平台。相对地,JSWDK只是一个简化的服务器平台,性能和稳定程度都比较有限,而且实际上SUN并不许可将它作为internet上的商业平台。

Tomcat的功能比jws或jswdk强大得多,您可以访问tomcat的站点http://jakarta.apache.org 查看详细介绍,Tomcat的稳定版本是3.2.3,最新4.0的版本处于开发阶段,他主要包含了三个主要部分:

Catalina:一个符合Servlet API规范2.3的Servlet 容器;
Jasper:一个符合JSP规范1.2的JSP编译器和运行环境;
Webapps:Tomcat中包含的一些例子和用于测试的web例程,以及相关文档。

Tomcat4.0的一个主要目的是支持目前正在处于测试版的Servlet2.3规范和JSP1.2规范的新特性,他有以下几个特点:

支持Servlet API 规范2.3

Servlet为Web开发员提供了一个简单、一致的机制,来扩展Web服务器的功能,并且和已有的业务系统交互。可以把Servlet看作在服务端运行的Applet。

JSP技术是servlet技术的扩展,对HTML和XML的页面创作提供支持。它使网页设计员能非常容易地将固定或静态的模板数据与动态内容进行组合。
Tomcat4.0的版本支持Servlet API 规范2.3,你可以在web.xml文件中注册相应的事件监听器,当这些事件发生时,在应用程序中可以收到相应的事件通知,这些事件包括:
- 应用启动
- 应用关闭
- 应用的属性的增加、删除、被替换
- Session创建
- Session失效、超时
- Session的属性的增加、删除、被替换

事件监听器的功能被加入到Catalina,看来效果非常好。在Webapps中的web应用examples中就有两个监听器的例子用于通过ServerletContext.log()记录相应的事件。

Servlet Fliter
在web.xml文件中注册类似与Catalina核心中Valves功能类似的的Filter。Filter主要具有以下特性:
- Filter能够映射成相应的URL或特定的Servlet。
- Filter能被用于对request,reponse对象进行预处理、或后处理。
- Filter能封装request、response对象,比如可以对对象中的内容进行转换。
- Filter能够对访问请求直接响应,然后返回给客户端,而不仅仅进行访问请求的传送,比如,你可以在应用级进行用户认证。
与这些特性相关联,当servlet传递参数给RequestDispatcher时就可以做这种类型的封装。而在以前,你只能将初始的request对象传递给Servlet Container,并且从Servlet Container中得到返回的response对象。Servlet filter的功能目前已经加入到Catalina中,并通过了初步测试。在应用examples中有一个filter用于路径映射和向调用servlet的映射(""/servlet/*""),其中存放了最终传递给执行Servlet的request对象属性。

安装扩展库的依赖关系
Web应用程序或WEB-INF/lib中的jar文件,现在可以声明对特定版本外部库的依赖关系,这些外部库是由Servlet Container作为共享扩展提供的。在Catalina中目前还没有完全实现这部分功能。

国际化支持

Catalina现在支持从Locale向字符集的映射,在ServletRequest中增加了一个新的方法setCharacterEncoding() ,在这一方面,还需要有个多的测试和功能增强。

Web应用的类装载器

Servlet规范草案中9.6.2节中定义了与Web应用中类装载器相关的需求和建议。这些需求在Catalina中被遵照执行。

Servlet 2.3应用程序分发描述符的DTD

在Catalina中包括一个非正式的用于解析web.xml文件的DTD(catalina/src/conf/web_23.dtd)它将被正式发布的DTD所替代。
JSP规范1.2

JSP 对Include flush=""false""的支持

这个变化通过在标准或定制的标记中嵌套使用标记,允许利用内含的servlet进行缓存、处理,并产生的输出。这个变化取决于前述的对RequestDispatcher.include()的功能的增强功能。

JSP页面的XML视图

JSP1.2的实现要求输入不仅要符合JSP语法,而且要符合XML语法。目前正在将Jasper的parser进行转换,使得其能接受任何一种类型的输入。

属性编辑器的利用

假如一个应用对java类的一个特定属性注册了一个属性编辑器(PropertyEditor),那么这个属性编辑器的setAsText()方法将用于将文本格式的属性(比如request对象的一个参数)转换为该属性的内部表示。假如没有定义属性编辑器,那么就采用前述的缺省属性编辑器进行转换。

定制标记库验证页面的合法性

在定制标记库中增加了一个新的编译阶段用于检查页面的XML视图,如果检测到错误,就抛出一个转换时异常。在这当中,可用于验证:
- 从语义上不能被TLD中定义的信息验证的嵌套定制标记
- 误用或滥用JSP中定制标记特性。比如,你可以用一个验证子禁止JSP使用Java语句块。
- 增强的迭代支持
- 增强了的定制tag机制支持在不做内容嵌套的前提下进行迭代的能力。这将优化这类非常常见的例子的性能,比如通过迭代来表示一个表格的处理结果,而不用显式对表格中每一行进行处理。

定制tag库能够声明应用监听器

一个定制的tag库能够利用servlet2.3中的新特性,声明一个监听器,用于监听应用程序相关的事件。

附加的TLD元素

在许多简单的例子中,声明变量时,采用附加的TLD元素可不用书写TagExtraInfo类
在Tag接口中增加resetCustomAttributes()方法,通过由Servlet Container调用附加的方法,使得在循环调用一个tag的实例前调用该方法。

Tomcat和JServ的区别

JServ是由Apache开发并使用的Servlet API 2.0兼容的Servlet容器。Tomcat是完全重写的Servlet API 2.2和JSP 1.1兼容的Servlet/JSP容器。Tomcat使用了JServ的一些代码,特别是Apache服务适配器。

Tomcat的应用

实际上,只有针对一个象amazon.com这样的大型站点,采用apache + tomcat这样的结构才具有更特出的优点,主要体现在具有更好的可扩展性和安全性。这种类型的站点的主要特点是每一个页面都可能是动态生成的,但这些数据中主要部分还是静态的(比如,各类图像GIF、JPG、PNG,流式媒体等)。
想象以下某个站点采用了多个用于负载均衡的硬件设备,这些设备后端连结一组服务器,这些服务器可能是一组相对廉价的运行apache的linux服务器簇。
这组位于前端的服务器簇将仅占总访问请求的10%的真正需要调用servlet的访问请求发送给后段的系统,后锻系统可以是一台Sun的E3500,或是IBM的AS/400,在这个后端的系统上运行着Tomcat,可能还包括企业级数据库。
这种结构的优点是兼有可扩展性和安全性。假如单位时间内访问请求数急剧增加,可以用相对较低的费用增加前端的能力。尽管后段的处理部分也需要扩充,但通常情况下,这种定位在单个服务器上的处理部分比较容易扩展。由于是通过在这台功能强大的服务器上运行的单个servlet容器,实际上也就不需要考虑session状态在分布式环境下的维护这类复杂的问题。
另外,因为这台后端服务器在外界不可以访问,网上的黑客只能访问前端的web服务器,不能直接访问后端的应用服务器,这就提高了安全性。但这并不意味着黑客们不能通过网络浏览器进行其它形式的攻击。对于apache->tomcat这种配置来说,前端和后端是通过ajp12协议来进行通信,ajp12不过是http访问请求的一种转换形式,如果给黑客们足够的时间,他们也许有能力通过Web层,从后端的数据库中取得一些比如信用卡号等关键数据。

Tomcat的安装

Tomcat在Linux/Unix下的安装

下载所需软件:apache 1.3.20――webserver
tomcat 3.2.3 ――环境引擎
JDK 1.2.0 ――Java Develop Kit
mod_jserv.so――Apache的Jserv模块
Apache Webserver 1.3.20: http://httpd.apache.org/dist/httpd/apache_1.3.20.tar.gz
Tomcat3.2.3 : http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.3/bin/jakarta-tomcat-3.2.3.tar.gz
JDK 1.2.2: http://java.sun.com/products/jdk/1.2/download-linux.html

mod_jserv.so:http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.3/bin/linux/mod_jk-eapi.so

安装所需的软件:
1) Apache:
先解压apache:tar zxvf apache_1.3.20.tar.gz
cd apache_1.3.20
./configure
make
make install
Apache Webserver被默认安装在/usr/local/apache下
修改apache的配置文件:
vi /usr/local/apache/
安照你的要求自行修改相应的参数。
把下载mod_jk-eapi.so下载到/usr/local/apache/libexec目录下
2) JDK
解压:tar zxvf jdk-1_2_2-linux-i386.tar.gz
mv jdk-1_2_2 /usr/local/jdk1.2.2
3) Tomcat
解压:tar zxvf jakarta-tomcat-3.2.3.tar.gz
mv akarta-tomcat-3.2.3 /usr/local/jakarta-tomcat

4) 配置环境变量
编辑/etc/profile文件,这里对环境变量修改就是修改所有的系统用户的环境变量,如果你不希望这么作可以只修改root用户的环境变量,那就只要编辑/root/.bash_profile,在文件尾加入下面几句:
JAVA_HOME=/usr/local/jdk1.2.2
export JAVA_HOME
JRE_HOME=/usr/local/jdk1.2.2/jre
export JRE_HOME
TOMCAT_HOME=/usr/local/jakarta-tomcat
export TOMCAT_HOME
CLASSPATH=/usr/local/jdk1.2.2/lib:/usr/local/jdk1.2.2/jre/lib
export CLASSPATH
PATH=$PATH:/usr/local/jakarta-tomcat/bin:/usr/local/jdk1.2.2/bin:/usr/local/jdk1.2.2/jre/bin
export PATH
配置Tomcat
tomcat本身其实就是一个web服务器,我们可以把他和apache等其他web服务器连接起来,这两个服务器 可以不在同一台机器上。底下的操作为在同一台机器上的情况,如果想把他们分开在两台计算机上,请 修改/usr/loca/jakarta-tomcat/conf/tomcat.conf
cp /usr/loca/jakarta-tomcat/conf/tomcat.conf /usr/local/apache/conf/
vi /usr/local/apache/conf/httpd.conf
在文件结尾加入:
include /usr/local/apache/conf/tomcat.conf
启动服务
启动Apache Web server:/usr/local/apache/bin/apachectl start
关闭Apache Web server:/usr/local/apache/bin/apachectl stop
启动Tomcat :/usr/local/jakarta-tomcat/bin/startup.sh start
关闭Tomcat :/usr/local/jakarta-tomcat/bin/shutdown.sh stop
测试Tomcat
用ps ax确认服务都启动后,在客户端的浏览器内敲入
http://your.host.address/examples/、
如果你看见了jsp、servlet目录,你的apche与tomcat已经连接成功了.
说明
如果你的jsp/servlet运行不了或者有错误,一般是你的CLASSPATH设置错误 如果你的apache是自己编译的,编译apache时请把--enable-module=so打开

Tomcat在Windows下的安装

下载所需的软件:
JDK1.2.2:http://java.sun.com/products/jdk/1.2/download-windows.html
Apache Web Server:
http://httpd.apache.org/dist/httpd/binaries/win32/apache_1.3.20-win32-no_src-r2.msi
Apache Jserver模块:
http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.3/bin/win32/i386/mod_jk.dll
Tomcat 3.2.2:
http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.3/bin/jakarta-tomcat-3.2.3.zip

安装

一、安装JDK1.2.2,并将jdk1.2.2的目录加入到环境变量PATH中(Autoexec.bat);
1、 双击jdk1_2_2-00x-win.exe文件进行安装,使用缺省配置进行安装,JDK的缺省安装目录为 C:jdk1.2.2,JRE的缺省安装目录为C:Program FilesJavaSoftJRE1.2;
2、 重启计算机;
3、 更新下列环境变量:把C:jdk1.2.2in目录追加到PATH中;把 C:jdk1.2.2lib ools.jar;C:jdk1.2.2libdt.jar加入到CLASSPATH中。更新      方法:控制面板->系统->环境->系统变量;
4、 测试applet:
1) 打开command窗口;
2) 切换到C:jdk1.2.2demoappletsTicTacToe目录;
3) 运行appletviewer example1.htm;
4) 一切正常;
5、 测试application:
1) 新建c:jsp目录并创建一个test.java文件,内容如下:
public class test
 {
public static void main(String arc[]){
System.out.println(""hello world!”    )
         };

2) 打开command窗口;
3) 切换到c:jsp目录;
4) 运行javac test.java进行编译;
5) 运行java test运行这个程序;
6) 一切正常。

二、安装apache_1.3.20-win32-no_src-r2.msi
1、 双击apache_1.3.20-win32-no_src-r2.msi文件进行安装,使用缺省配置进行安装,缺省安装目录为 C:Program FilesApache GroupApache,我用$APACHE_ROOT来代替安装目的地;
2、 修改$APACHE_ROOTconfhttpd.conf:
1、 port:设置Apache Web Server运行时使用的端口号,默认是80 ,如果你的系统有IIS或PWS也在运行,IIS或PWS使 用了80端口号,于是我把它改成Port 88,以后在浏览器上输入 http://localhost:88/才能访问到Apache Web Server服务器,输入 http://localhost/时能访问到IIS或PWS,这样两个Web Server都可以用了;
2、 DocumentRoot 设置文档根目录,当您在浏览器上输入http://localhost/时,服         务器会从文档根目录读取数据,我们把他设为c:jsp,所以把         DocumentRoot设置为c:jsp;
3、 Apache安装完后在""开始->程序""菜单组中多了Apache Web Server菜单组,运行其中的 apache conctrol中的start来启动服务,运行stop关闭apache web server,restart重新启动服务;、
4、 在浏览器上输入http://localhost/或http://localhost:88/,就看到了c:jsp下的所有文件, 这时表明Apache服务已经安装成功。
将mod_jk.dll拷到Apache所在目录的modules子目录中;
安装Tomcat 3.2.2 (解压并拷到某个目录中);
此时所需部件都已经安装完毕,以下是配置过程。

配置

1、设置以下环境变量(可以放在autoexec.bat中:
SET TOMCAT_HOME=C:PROGRA~1Tomcat
SET JAVA_HOME=C:PROGRA~1jdk1.2.2
2、打开TOMCAT的conf子目录下的tomcat.conf文件以下行前的注释去掉:
LoadModule jserv_module modules/mod_jk.dll
再将对应LINUX的类似一行用注释屏敝掉。
3、打开apache的httpd文件,在最后加入一行
include c:/progra~1/tomcat/conf/tomcat.conf

启动与测试:

1、 首先启动apache
2、 进入到tomcat的执行目录(bin),
3、 用tomcat.bat start或tomcat.bat run启动tomcat,此时应当可以看到正确输出的classpath,此时Tomcat启动成功!
4、 在浏览器中输入http://localhost/examples/此时应当可以看到server返回的三个目录列表。点击其中JSP的就可以看到示例了。
5、 只要用官方站下载的程序,照上述几步应当能正确启动JSP环境,接下来的问题就是如何加入context以便映射到你的工作目录,并开始JSP世界的探索了。这将在后面加帖。