收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


zhang的笔记
状态: 离线
人气:5090793
访问用户量:4227
笔记经验:
总积分:261656
级别:VIP5
搜索本笔记
ta的交流分类
ta的交流主题贴(544)
ta的所有交流贴(1049)
ta的全部笔记
全部笔记(255)
未分类笔记(1)
Java Web(9)
并发实践(1)
课程问题(0)
Java(22)
架构(1)
缓存(5)
JavaEE(0)
JVM(12)
跟我学spring3(68)
Spring Sec……(43)
Spring 3.x……(25)
Spring Sec……(20)
跟开涛学Spring……(17)
深入剖析Spring……(18)
性能调优(10)
前端(2)
Tomcat源码解读(1)
spring sec……(0)
存档
2014-01(7)
2013-12(10)
2012-10(4)
2012-09(2)
2012-08(31)
2012-07(10)
2012-06(5)
2012-05(41)
2012-04(3)
2012-03(41)
2012-02(54)
2011-11(17)
2011-10(30)

2012-08-25 08:48:59
Tomcat源码解读系列(一)——server.xml文件的配置
浏览(8532)|评论(0)   交流分类:Java|笔记分类: Tomcat源码解读

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

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

 

Xml代码   
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <Server port="8005" shutdown="SHUTDOWN">  
  3.   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  
  4.   <Listener className="org.apache.catalina.core.JasperListener" />  
  5.   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  
  6.   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />  
  7.   <GlobalNamingResources>  
  8.     <Resource name="UserDatabase" auth="Container"  
  9.               type="org.apache.catalina.UserDatabase"  
  10.               description="User database that can be updated and saved"  
  11.               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"  
  12.               pathname="conf/tomcat-users.xml" />  
  13.   </GlobalNamingResources>  
  14.   
  15.   <Service name="Catalina">  
  16.     <Connector port="8080" protocol="HTTP/1.1"   
  17.                connectionTimeout="20000"   
  18.                redirectPort="8443" />  
  19.     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  
  20.     <Engine name="Catalina" defaultHost="localhost">         
  21.       <Realm className="org.apache.catalina.realm.LockOutRealm">  
  22.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  
  23.                resourceName="UserDatabase"/>  
  24.       </Realm>  
  25.   
  26.       <Host name="localhost"  appBase="webapps"  
  27.             unpackWARs="true" autoDeploy="true">  
  28.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    
  29.                prefix="localhost_access_log." suffix=".txt"  
  30.                pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false"/>  
  31.       </Host>  
  32.     </Engine>  
  33.   </Service>  
  34. </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://lengyun3566.iteye.com/blog/1662281

作者博客:http://lengyun3566.iteye.com/

精品视频课程推荐

透彻理解JavaBean视频教程
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

Ajax+JSON基础实战视频教程
数据校验、Javascript模拟多线程、下拉列表联动、操作XML、AJAX结合JSON的操作、Json-lib的使用

freevoice(局域网对讲机)——Android4项目实战视频教程
实现通过Wifi来在局域网内相互传递信息和语音通话的功能;学习Service;Broadcast Receiver;SharedPreference;SQLite;语音录制、播放、传输等;网络开发:wifi处理、UDP编程、TCP编程;多种设计模式的应用 等等

浏览(8532)|评论(0)   交流分类:Java|笔记分类: Tomcat源码解读

评论(0)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网