Tomcat是J2EE开发人员最常用到的开发工具,在Java Web应用的调试开发和实际部署中,我们都可以看到Tomcat的影子。大多数时候,我们可以将Tomcat当做一个黑盒来看待,只需要将编写的Java Web工程进行部署即可,但是,在遇到一些比较复杂难解决的问题时,如果我们了解了Tomcat的内部实现原理将会处理起来更得心应手更快地定位问题。另外,通过学习Tomcat的源码还可以更加深入地了解JEE规范,学习常见的设计模式。本系列的文章,将会介绍Tomcat的核心功能是如何实现的,一方面作为自己学习的总结,另一方面也希望给学习Tomcat的朋友提供一点帮助材料。

本文首先介绍Tomcat的基本配置,涉及的配置文件就是\conf\server.xml文件。Tomcat本身通过一系列的连接器和内部组件来分别实现网络请求的监听和处理。一个示例性的server.xml如下:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources> <Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm> <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>
</Host>
</Engine>
</Service>
</Server>

从上面的配置我们中,位于配置文件顶层的是Server和Service元素,其中Server元素是整个配置文件的根元素,而Service元素则是配置服务器的核心元素。在Service元素内部,定义了一系列的连接器和内部容器类的组件。现在分别对其进行简单的介绍,后续的文章将会对其进行逐一分析。

<Server>元素对应的是整个Servlet容器,是整个配置的顶层元素,由org.apache.catalina.Server接口来定义,默认的实现类是org.apache.catalina.core. StandardServer。该元素可配置的属性主要是port和shutdown,分别指的是监听shutdown命令的端口和命令(这两个属性没玩过,后续试试)。在该元素中可以定义一个或多个<Service>元素,除此以外还可以定义一些全局的资源或监听器。

<Service>元素由org.apache.catalina.Service接口定义,默认的实现类为org.apache.catalina.core. StandardService。在该元素中可以定义一个<Engine>元素、一个或多个<Connector>元素,这些<Connector>元素共享同一个<Engine>元素来进行请求的处理。

<Engine>元素由org.apache.catalina.Engine元素来定义,默认的实现类是org.apache.catalina.core. StandardEngine。<Engine>元素会用来处理<Service>中所有<Connector>接收到的请求,在<Engine>中可以定义多个<Host>元素作为虚拟主机。<Engine>是Tomcat配置中第一个实现org.apache.catalina.Container的接口,因此可以在其中定义一系列的子元素如<Realm>、<Valve>。

< Connector >元素由org.apache.catalina.connector. Connector类来定义。< Connector>是接受客户端浏览器请求并向用户最终返回响应结果的组件。该元素位于< Service>元素中,可以定义多个,在我们的示例中配置了两个,分别接受AJP请求和HTTP请求,在配置中,需要为其制定服务的协议和端口号。

<Host>元素由org.apache.catalina.Host接口来定义,默认实现为org.apache.catalina.core. StandardHost,该元素定义在<Engine>中,可以定义多个。每个<Host>元素定义了一个虚拟主机,它可以包含一个或多个Web应用(通过<Context>元素来进行定义)。因为<Host>也是容器类元素,所以可以在其中定义子元素如<Realm>、<Valve>。

<Context>元素由org.apache.catalina.Context接口来定义,默认实现类为org.apache.catalina.core. StandardContext。该元素也许是大家用的最多的元素,在其中定义的是Web应用。一个<Host>中可以定义多个<Context>元素,分别对应不同的Web应用。该元素的属性,大家经常会用到如path、reloadable等,可以在<Context>中定义子元素如<Realm>、<Valve>。

以上简单介绍了Tomcat元素的配置,使我们可能对这个庞大的产品有个整体的了解,后续会对每个部分进行详细的介绍,下部分会首先介绍Tomcat的启动流程。

转自http://www.cnblogs.com/levinzhang/archive/2012/08/25/2655617.html

Tomcat源码解读系列(一)——server.xml文件的配置的更多相关文章

  1. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

  2. Alamofire源码解读系列(四)之参数编码(ParameterEncoding)

    本篇讲解参数编码的内容 前言 我们在开发中发的每一个请求都是通过URLRequest来进行封装的,可以通过一个URL生成URLRequest.那么如果我有一个参数字典,这个参数字典又是如何从客户端传递 ...

  3. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

  4. Alamofire源码解读系列(六)之Task代理(TaskDelegate)

    本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很 ...

  5. Alamofire源码解读系列(八)之安全策略(ServerTrustPolicy)

    本篇主要讲解Alamofire中安全验证代码 前言 作为开发人员,理解HTTPS的原理和应用算是一项基本技能.HTTPS目前来说是非常安全的,但仍然有大量的公司还在使用HTTP.其实HTTPS也并不是 ...

  6. Alamofire源码解读系列(九)之响应封装(Response)

    本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...

  7. Alamofire源码解读系列(十)之序列化(ResponseSerialization)

    本篇主要讲解Alamofire中如何把服务器返回的数据序列化 前言 和前边的文章不同, 在这一篇中,我想从程序的设计层次上解读ResponseSerialization这个文件.更直观的去探讨该功能是 ...

  8. Alamofire源码解读系列(十二)之时间轴(Timeline)

    本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...

  9. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

随机推荐

  1. 禁止Visual Studio中的编译警告

    VC编译器有个很蛋痛的自家警告系统,默认下各种开源库比如CGAL,各种4996,而一般自己写的 如sscanf,fopen这种单个文件,在文件头加个 #pragma warning (disable ...

  2. 接口测试总结<转>

    本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系.但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为 ...

  3. mysql 存储 date , datetime问题,初步

    1. java 里的 Date date = new Date()(java.util.Date) 得到  Thu Nov 03 22:19:43 CST 2016, 通过Timestamp stam ...

  4. runtime记录

    前言: 最初对于runtime的了解其实只停留在,知道这是一组C的方法,知道消息机制中会把方法调用转成objc_msgSend(theObject,@selector(objectMethod)).随 ...

  5. Use Hibernate core API

    For Hibernate configuration, We can use hibernate.cfg.xml file to configure: <?xml version='1.0' ...

  6. Google one联合联发科,国内低端智能机方案怎么办?

    欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=46 Google在Google I/O大会, 发布的Android One,由于看重的是 ...

  7. 如何安全地关闭MySQL实例

    如何安全地关闭MySQL实例 转载自:http://imysql.com/2014/08/13/mysql-faq-howto-shutdown-mysqld-fulgraceful.shtml 本文 ...

  8. NativeScript 也能开发桌面应用 (nativescript-dotnet-runtime)

    自从看了NativeScript就甚是喜欢,心想要是也能开发桌面应用该多好.求人不如求己,开源组件很强大,差不多组装一下就行了,说干就干. Javascript 引擎用 Jint , 纯C#实现,集成 ...

  9. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  10. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?并在Github注册账户,写一篇博客记录注册的过程。

    问题一:上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?(以下内容为网上查询所得) Microsoft TFS(Team Foundation Server): 优点: ...