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. 使用ShareSDK 时注意的问题

    1.使用ShareSDK 社会分享SDK(实现第三方登录) 1.QQ第三方登录时,如果是TencentSessionDelegate出现问题,或者是TencentApiInterface的框架出现问题 ...

  2. 快手4.0 (KSCAD)

    快手 4.0 (KSCAD) 是一款简单易用的矢量绘图软件,其功能和Visio类似,可以绘制工艺流程图,流程图.组织结构图.网络拓扑图.思维导图.商业图表等. 经过二次开发,可以应用于各种领域的图形化 ...

  3. <Oracle Database>诊断文件

    诊断文件 诊断文件是获取有关数据库活动的信息的一种方式,用于解决数据库出现的一些问题,主要包含有关数据库中出现的重要事件的一些信息,这些文件能更好的对数据库进行日常的管 理,主要类型有一下几种: 警告 ...

  4. 代写assignment

    集英服务社,强于形,慧于心 集英服务社,是一家致力于优质学业设计的服务机构,为大家提供优质原创的学业解决方案.多年来,为海内外学子提供了多份原创优质的学业设计解决方案. 集英服务社,代写essay/a ...

  5. Bootstrap 导航栏和登陆框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 设置UIButton或者UILabel显示文字的行数

    需要在UIButton的titleLabel或者UILabel的text 字符串里面添加换行符号 “\n”,并且设置 UILabel的numberOfLines属性 栗子:行数要和“\n”的个数对应, ...

  7. Eclipse断点调试

    转自:http://blog.csdn.net/maritimesun/article/details/7815903 作为开发人员,掌握开发环境下的调试技巧十分有必要.去年就想把关于Eclipse断 ...

  8. C# 关于DataGridView 绑定数据源时列名窜位置 的处理

    只需要写一句话:dataGridView1.AutoGenerateColumns = false; 代码提示中的解释:获取或设置一个值,该值指示在设置System.Windows.Forms.Dat ...

  9. Windows Server 2008 系统设置集合

    1.禁用IPV6 netsh interface teredo set state disabled netsh interface 6to4 set state disabled netsh int ...

  10. 让你的Android程序更省电

    app主要耗电的原因如下: 1 cpu频繁的运转 -----控制线程 2  大数据量的传输----- 数据压缩传输 3  不停的在网络间切换------------判断网络状体 4 人开发的程序后台都 ...