一、tomcat简介

TomcatApache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由ApacheSun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新的版本为8.0

与传统桌面应用程序不同,Tomcat中的应用程序是一个WARWeb Archive)文件,它是由许多文件构成的一个压缩包。包中的文件按照一定的目录结构来组织,tomcat会自动检测和解压该文件。JSP文件第一次执行时,要先由Tomcat将其转化为Servlet文件,然后编译,所以速度慢一些,但后续的执行速度会更快。

Tomcat不是一个完整意义上的Jave EE服务器,它甚至都没有提供对哪怕是一个主要Java EE API的实现;但由于遵守apache开源协议,tomcat却又为众多的java应用程序服务器嵌入自己的产品中构建商业的java应用程序服务器,如JBossJOnAS。尽管TomcatJave EE API的实现并不完整,然而很企业也在渐渐抛弃使用传统的Java EE技术(如EJB)转而采用一些开源组件来构建复杂的应用。这些开源组件如StructsSpringHibernate,而Tomcat能够对这些组件实现完美的支持。

 

二、tomcat的特性

1、免费开源的轻量级的web服务器

2tomcat部分是Apache的扩展,它与Apache结合工作时,作为Apache的进程独立运行

3tomcat是一个servletJSPweb容器,默认模式是servlet容器

4tomcat运行JSP页面和servlet,因此,它对静态页面的处理能力不如Apache,但是它处理动态页面能力比较强

5、适用于中小型系统和并发不是很多的场景

 

三、常见的web容器

商业版:

Sun GlassFish Enterprise Server

Sun Java System Web Server

JBoss Enterprise Application Platform

WebLogic Application Server

Caucho's Resin Server

WebSphere Application Server

NetWeaver

 

非商业版:

Apache Tomcat

Apache Geronimo

GlassFish

JBoss Application Server

Jetty

Tiny Java Web Server

Eclipse Virgo

 


四、JAVA web应用程序的体系结构

java webapp通常有一定的组织格式,通常包含一些servlet代码,jsp代码,部署描述符及其他类文件,这些文件通常会打包成归档格式。

webapp体系结构通常包含如下:

/:webapp的根目录

WEB-INF:webapp的私有目录,通常web.xml和context.xml放置在此目录下。

WEB-INF/classes:该目录下包含的是webapp的私有类文件其webapp需要的第三方类文件。

WEB-INF/lib:webapp自带的jar格式的类文件。


java程序的归档格式,包含以下几种:


EJB类的归档扩展名为.jar

web应用程的归档扩展名为.war

资源适配器的扩展名为.rar

企业级应用程序的扩展名为.ear

web服务的扩展名为.ear或.war



 

五、tomcat架构组件

tomcat服务器时由一系列可配置的组件构造。其中核心组件式catalina servlet容器,它是其他所有tomcat组件的顶层容器。其中tomcat各组件的层次关系如下图所示:

轻量级java web服务器--tomcat_tomcat   manage

 

 

server层:对应着server组件。逻辑上表示整个tomcat,一个tomcat实例,即整个catalina servlet容器。它处在tomcat顶层。每个JVM中只有一个tomcat实例。一个server层可以包含一个或多个service层。

service层:对应着service组件。一个service层包含一个Engine层以及一个或多个连接器(connector)。service组件将一个或多个连接器绑定在Engin层。connector组件监听端口,接受用户的请求,并把请求转交给Engin层处理,同时把处理后的结果返回给客户端。

连接器(connector):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1Coyote。同时,Tomcat也支持AJPJServJK2连接器。

 

Engin层:引擎是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个hostcontext,并将请求处理后的结果返回给相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

 

 

host层(主机层):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个host可以包含一个或多个context层。

 

context层(上下文):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。

 

tomcat中的其他嵌套类组件

阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件(Enginhostcontext)中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息至文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。

 

日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。

 

领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

 

六、tomcat的安装与配置

1、安装JDK

在安装tomcat之前,必须先安装JDKJava Development Kit),这是sun公司免费提供的Java语言的软件开发工具包。其中包括了java虚拟机和一些库类。编写好的java源程序,编译后可形成字节码,只要安装了JDK,就可以利用JVM对这些字节码进行解释执行。

jdk下载网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

由于我这里下载的rpm包,所有我就直接使用rpm的形式安装:

# rpm -ivh jdk-8u45-linux-i586.rpm

安装完成后,可以使用如下命令查看该软件包生成的文件,由于生产的文件很多,建议使用moreless来查看,如:

# rpm -ql jdk1.8.0_45-1.8.0_45-fcs.i586 | less

使用该命令查看后可以知道jdk的家目录为/usr/java/jdk1.8.0_45


配置jdk的环境变量

# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/latest

export PATH=$JAVA_HOME/bin:$PATH


# source /etc/profile.d/java.sh


查看jdk是否安装成功:

# java –version

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45-b14)

Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)

出现如下信息则表示jdk安装成功。

 

2、安装tomcat

下载tomcat可以到tomcat的官网上去下载,根据自己的平台和版本选择相应的软件版本。tomcat的官网地址为:http://tomcat.apache.org/。在这里我使用的tomcattomcat7.0的版本。

# tar xf apache-tomcat-7.0.62.tar.gz -C /usr/local/

# cd /usr/local/

# ln -sv apache-tomcat-7.0.62 tomcat7

 

tomcat的启动和关闭

tomcat的二进制脚本文件为/usr/local/tomcat7/bin/catalina.sh

配置tomcat的环境变量

# vim /etc/profile.d/tomcat.sh


export CATALINA_HOME=/usr/local/tomcat7

export PATH=$CATALINA_HOME/bin:$PATH

# source /etc/profile.d/tomcat.sh


启动tomcat

#/usr/local/tomcat7/bin/catalina.sh  start

关闭tomcat

# /usr/local/tomcat7/bin/catalina.sh stop

 

如果要使用service的方式来启动tomcat,可以在/etc/init.d/下面添加如下脚本

# vim /etc/init.d/tomcat

#!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

JAVA_OPTS='-Xms64m -Xmx128m'

JAVA_HOME=/usr/java/latest

CATALINA_HOME=/usr/local/tomcat7

export JAVA_HOME CATALINA_HOME


case $1 in

start)

        exec $CATALINA_HOME/bin/catalina.sh start

        ;;

stop)

        exec $CATALINA_HOME/bin/catalina.sh stop

        ;;

restart)

        $CATALINA_HOME/bin/catalina.sh stop

        sleep 1

        $CATALINA_HOME/bin/catalina.sh start

        ;;

configtest)

        exec $CATALINA_HOME/bin/catalina.sh configtest

        ;;

*)

        echo "Usage:service `basename $0` {start|stop|restart|configtest}"

        ;;

esac


# chmod +x /etc/init.d/tomcat

# chkconfig --add tomcat


启动tomcat

# service tomcat start

关闭tomcat

# service tomcat stop



查看tomcat是否启动

# netstat -tunlp | grep java

tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      2251/java          

tcp        0      0 :::8009                     :::*                        LISTEN      2251/java          

tcp        0      0 :::8080                     :::*                        LISTEN      2251/java   

注意:tomcat默认监听在8080端口。

 

值得注意的是,在tomcat启动完成之后,过了一会后,tomcat又停止工作了。在tomcat的日志文件找到了如下提示信息:

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/i386:/lib:/usr/lib

根据官网的提示,需要安装apr库、openssl库和tomcat的apr  JNI。

# yum -y install openssl-devel apr-devel

然后在安装tomcat的apr JNI,不过该软件包可以在tomcat中找到,默认位于$CATALINA_HOME/bin目录下。

# cd /usr/local/tomcat7/bin/

# tar xf tomcat-native.tar.gz

# cd tomcat-native-1.1.33-src/jni/native

# ./configure --with-apr=/usr --with-ssl --with-apxs

# make && make install


默认apr库安装在/usr/local/apr/lib,因此,还需要将这些库导入到系统中。

# echo "/usr/local/apr/lib" > /etc/ld.so.conf.d/apr.conf

# ldconfig 


这个APR是什么作用呢?Tomcat 可以用 Apache Portable Runtime 来提供更强性能,提升Web静态页面的处理能力,不再需要专门的Web Server来处理静态页面了。


至此,tomcat服务器已经安装完成,可以通过浏览器来访问其默认页面。如:

输入http://192.168.0.200:8080/,显示结果如下:

轻量级java web服务器--tomcat_tomcat   manage_02

 

这是tomcat的默认主页,对应文件是tomcat安装目录下的webapps/ROOT/index.jsp

 

3tomcat的目录结构

在安装tomcat后,生成了几个目录结构,分别是:

bin:这个目录一般存放的是一些二进制程序,tomcat启动脚本cataline.sh就在这个目录中。

conf:这是一个配置文件目录,里面有许多配置文件,配置文件的格式一般是以.xml格式结尾的。

lib:这里面存放的是以.jar结尾的文件

logs:这是日志目录。用于存放tomcat的日志

temp:这是存放临时文件的目录

webapps:这个目录很重要。这是tomcat的应用目录或者叫做web服务器的根目录。把文件放在这个目录下就可以通过tomcat服务器来进行访问。

work:存放JSP经过tomcat编译后的servlet文件。tomcat的工作目录。

 

 

4tomcat的配置文件

刚刚说过tomcat的配置文件目录为/usr/local/tomcat7/conf,这里面有许多以.xml格式结尾的文件,如:

server.xml:这是tomcat的主配置文件,包含serviceconnectorEnginRealValueHosts等组件的相关配置信息

web.xml:遵循servlet规范的标准配置文件,用于为tomcat上的所有实例提供部署描述符和提供包含MIME映射等默认配置信息。也为webapp提供基本的servlet定义。

tomcat-user.xml:存放Realm认证时用到的相关角色、用户和密码等信息;tomcat自带的manager默认情况下会用到此文件;在tomcat中添加、删除用户、为用户指定角色等都可以通过编辑此文件来实现。

catalina.policy:如果在命令行中使用-security选项来启动tomcat,则会读取该配置文件。该文件主要定义了java相关的安全策略,如定义java类权限及访问核心代码库的权限。

catalina.properties:用于 定义java类的属性。如设定类加载器的路径、安全包列表及一些关于调整性能的参数等信息。tomcat6在启动时会读取该文件的相关设置。

logging.properties:此文件可用于用来定义日志记录器的组件及他们的相关配置信息,还可以指定日志文件的存储位置及其日志级别。

context.xml:所有host的默认配置信息,用于定义webapp的根目录。

 

 

6server.xml配置文件简介

server.xml文件中可定义的元素非常多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。在这里我们只对其常用的组件进行基本介绍,关于更多的参数的意思可以参考tomcat的官方文档。

                  组件                                       参数及其意思

                Server

一个server就是一个tomcat实例

port:接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;各个sever的端口号不能一样;

shutdown:发送此server用于实现关闭tomcat实例的命令字符串。默认为SHUTDOWN;

className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer;

               Service

将多个connector和Engine绑定起来

Name:指定service的名称,默认为catalina;

className:用于实现service的类名,一般都是org.apache.catalina.core.StandardService。

              Connector

接受客户端的请求,并将请求交给Engine处理。

address:指定连接器的监听地址,默认为所有地址,即为0.0.0.0;

maxThreads:支持的最大并发连接数,默认为200;

port:连接器监听的端口,该端口用来接受用户的请求的,默认为8080;

protocol:连接器协议。默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3。关于连接器在下文进行介绍;

redirectport:如果连接器使用的协议是http,当收到客户端发来的https请求时,则转发至此定义的端口上。

connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即一分钟;

enableLookup:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;

acceptCount:设置等待队列的最大长度。通常在tomcat所有处理线程比较繁忙的情况下,新发来的请求将被放置到等待队列中。

               Engine

用于分析http请求首部,并将请求发送到指定的host上进行处理。一个server内部只能有一个Engine。

defaulthost: Tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非非明确定义虚拟主机的请求时,则需要将此请求发送给一个默认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;

name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎;

               Host:

位于Engine容器中,用于接收请求并进行相应处理的主机或虚拟主机

appBase:webapp的根目录。即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于$CATALINA_HOME(tomcat的家目录)的相对路径;

autoDeploy: 在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy(部署);默认为true;

unpackWars: 在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;

name:定义主机名称。默认为localhost;

             Context:

一个Context定义用于标识tomcat实例中的一个Web应用程序, 每一个context定义也可以使用一个单独的XML文件进行配置

docBase: 文档的根目录或者是context的根目录;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,而docBase绝不能为deploy-bbs类的名字;

path:相对于Web应用程序根路径而言的URI;如果为空“”,则表示为此webapp的根路径;如果context定义在一个单独的xml文件中,此属性不需要定义;

reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false;这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重启tomcat的情况下改变应用程序;

              Realm:

用来定义一个安全上下文,它是用来提供用户认证和授权,并为其分别角色的

className: 指定Realm使用的类名,这是定义Realm时必须提供的属性,此类必须实现org.apache.catalina.Realm接口。可以使用的类名有如下几个:

1、JAASRealm:基于Java Authintication and Authorization Service实现用户认证;

2、JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;

3、JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;

4、MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;

5、UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;

              Valve

类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。

className:指定实现value的类名。Tomcat6以上版本实现了多种不同的Valve,这些类名有:

1、AccessLogValve:访问日志Valve

2、ExtendedAccessValve:扩展功能的访问日志Valve

3、JDBCAccessLogValve:通过JDBC将访问日志信息发送到数据库中;

4、RequestDumperValve:请求转储Valve;

5、RemoteAddrValve:基于远程地址的访问控制;

6、RemoteHostValve:基于远程主机名称的访问控制;

7、SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量;

8、JvmRouteBinderValve:在配置多个Tomcat为以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当期望停止某节点时,可以通过此Valve将用记请求定向至备用节点;使用此Valve,必须使用JvmRouteSessionIDBinderListener;

9、ReplicationValve:专用于Tomcat集群架构中,可以在某个请求的session信息发生更改时触发session数据在各节点间进行复制;

10、SingleSignOn:将两个或多个需要对用户进行认证的webapp在认证用户时连接在一起,即一次认证即可访问所有连接在一起的webapp;

11、ClusterSingleSingOn:对SingleSignOn的扩展,专用于Tomcat集群当中,需要结合ClusterSingleSignOnListener进行工作;

allow:定义允许访问的IP地址列表,以逗号分开,支持正则表达式,因此,点号“.”用于IP地址时需要转义;仅定义allow项时,非明确allow的地址均被deny;

deny:定义禁止访问的IP地址列表,以逗号分开的,支持正则表达式;使用方式同allow;

               Logger
表示日志,调试和错误信息;

className:指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口;

prefix:指定log文件的前缀

suffix:指定log文件的后缀

timestamp:如果为true,则log文件后面会加上时间。

如:localhost_log.2001-10-04.txt;

 

 

 

7、web.xml文件

web.xml基于Java Servlet规范,可被用于每一个Java servlet容器,通常有两个存放位置,$CATALINA_HOME/conf和每个Web应用程序(通常是WEB-INF/web.xml)。Tomcat在deploy一个应用程序时(包括重启或重新载入),它首先读取conf/web.xml,而后读取WEB-INF/web.xml文件。

 

 

8、配置manager来管理应用程序的部署及监控

tomcat的管理工具具有如下功能:

(1)、远程Deploy新应用程序

(2)、清理空闲会话

(3)、在不重启的情况下可以undeploy(取消部署)应用程序

(4)、可以分析内存泄漏

(5)、可以查看服务器状态和JVM状态信息

启动manager功能,需要编辑配置文件tomcat-user.xml。在这里我的配置文件为/usr/local/tomcat7/conf/tomcat-user.xml。根据自己的需要可以添加如下行信息:

<role rolename="manager-gui"/>

<role rolename="manager-script"/>

<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>

其中role行是用来定义角色的,manager有4个管理角色:

a、manager-gui:允许访问HTML gui页面和状态页面

b、manager-script:允许访问文本界面和状态页面

c、manager-jmx:允许访问JMX代理和状态页面

d、manager-status:仅允许访问状态页面

<user…/>这一行是定义访问时需要提供的用户、密码及使用哪种角色来访问。

 

注意:添加完成之后,还需要重启tomcat服务器。

测试访问,在浏览器中输入http://192.168.0.200:8080/manager,输入tomcat-user.xml中定义的用户和密码后,显示的结果如下所示:

轻量级java web服务器--tomcat_tomcat   manage_03 

 

 

tomcat的管理平台,自上而下共分为5个部分,分别为:

1、Message

这一行是消息栏,表示tomcat管理平台情况,其值OK表示tomcat运行正常。

2、Manager

下面有4个链接选项,分别是List Application(web应用管理列表)、HTML Manager Help(基于html来管理的web应用帮助信息)、Manager Help(如何管理其他web应用帮助信息)、Server Status(tomcat的服务器状态信息)。系统默认连接是第一个。

(3)、Application

管理tomcat服务器的所有web应用,每一个web应用都有5个属性,分别是:

      path:该web应用程序的存放位置,即docBase值;

      Display Name:标记此web应用的一个名称,供GUI工具使用,对应于web.xml文件中的display-name属性;

      Running:此web应用是否处于运行状态;

      Sessions: Session连接数目;

      Command:分为2行,上面一行提供若干个命令,用于tomcat处于运行状态时,如何管理这些web应用。其中Undeploy表示卸载web应用,并且删除webapps/目录下对应的文件;

 

(4)、Deploy应用程序

用来发布web应用的,有2种方式:

第一种方式是在Deploy directory or WAR file located on server这一个栏中填写该web应用的相关信息,包括web应用的URI,XML配置文件路径、WAR文件或者该web应用相对于webapps目录的文件路径。然后再点击“Deploy”按钮即可。就可以发布该web应用,发布后再Application列中可以看到该web应用信息。这种方式只能发布位于webapps/目录下的web应用。

第二种方式是在WAR file to deploy这一栏中点击“浏览”按钮,在弹出的会话框中选中要发布的WAR文件,然后再点击“Deploy”按钮,即可发布web应用。发布后的web应用可以在Application列中看到。这种发布方式可以发布位于任意目录下的web应用。

 

(5)、Server status

显示tomcat服务器的状态信息

点击"server status"按钮就可以显示服务器的状态信息,以及jvm的内存等信息。

 

 

9、配置host-manager来管理虚拟主机的应用及其监控

启用host-manager功能基于html的方式来管理虚拟主机,需要在tomcat-user.xml文件中添加如下信息:

  <role rolename="admin-gui" />

  <user username="webuser" password="webuser" roles="admin-gui" />

然后重启tomcat服务器,在浏览器中输入如下信息:

http://192.168.0.200:8080/host-manager/,显示结果如下:

轻量级java web服务器--tomcat_tomcat   manage_04

 

 

 

 

10、tomcat虚拟主机的实现

在tomcat的主配置文件server.xml中,一个Host组件就是一个虚拟主机,因此,要想实现tomcat的虚拟主机,需要在server.xml文件,添加相应host组件。在server.xml中有一个默认的虚拟主机,其主机名为localhost。如果需要实现tomcat的虚拟主机,需要在server.xml文件中,且在Engine容器中添加如下信息:

<Host     name='www.xsl.com' appBase="webapps"  unpackWARs="true" autoDeploy="true">

        <Context docBase="web1" path="a" />

</Host>

<Host     name='ftp.xsl.com' appBase="webapps"  unpackWARs="true" autoDeploy="true">

        <Context docBase="web2" path="b" />

 </Host>

 

然后再webapps目录中创建如下目录和文件

# mkdir web1/a   –pv

# mkdir web2/b   –pv

# echo “hi,a” >  web1/a/a.html   这里添加测试的内容即可

# echo "hi,b" >  web2/b/b.html

 

在浏览器中进行测试:

注意:在测试前,需要对主机名进行地址解析,在这里我们可以在本地的hosts文件中添加相应的信息即可。

输入http://www.xsl.com:8080/web1/a/a.html,显示结果如下

轻量级java web服务器--tomcat_tomcat   manage_05

 

输入http://ftp.xsl.com:8080/web2/b/b.html,显示结果如下

轻量级java web服务器--tomcat_tomcat   manage_06

 

七、java web应用程序的部署

java webapp的部署指的是将webapp及其依赖的类文件加载到tomcat实例上运行,以便接受用户的请求,想外提供服务。webapp的部署分为2种:

1、静态部署。

静态部署很简单,就将这个应用程序复制到$CATALINA_BASE(webapp的根目录,在host容器中指的就是appBase指定的目录)目录下,然后重启tomcat实例即可。如果应用程序是打包的话,复制完成之后,还需要重启tomcat实例,如果应用程序部署是非打包的话,直接复制到$CATALINA_BASE目录下即可,不需要重启tomcat实例。

2、动态部署

动态部署指的是在不打断tomcat服务的情况下部署某个webapp。这种部署方式可以使用tomcat的manager来完成,也可以使用专业的客户端发布器(TCD:Tomcat Client Deployer)来完成。


部署某个webapp时,通常涉及到如下操作指令:

Deploy: 向tomcat实例提供某应用程序源文件,并让服务器将类加载进类加器中;这样,应用程序才可以为用户所使用;

Redeploy:用于更新deployment后的某应用程序或应用程序的部分内容;当redeploy整个应用程序时,当前应用程序的所有模块都必须要redeploy成功,否则整个webapp将会停止 ;

Stop: 卸载当前应用程序的所有类,并停止向用户提供服务;不过,其仍然会保留所有已deploy的文件及名称,并可用于后续的redeployment或starting;

Start: 重新装载当前应用的类至类加载器,并开启服务;

Undeploy: 停止某已经deploy的应用程序,并移除deploy产生的文件和名称;