设为首页 收藏本站
查看: 357|回复: 0

[经验分享] [How Tomcat Works]第0章 介绍

[复制链接]

尚未签到

发表于 2017-1-29 07:14:19 | 显示全部楼层 |阅读模式
译者 jarfield

博客 http://jarfield.iteye.com

  • 概述
  • 本书为谁准备
  • Servlet容器如何工作
  • Catalina的框图
  • Tomcat 45
  • 每章的概述
  • 每章的应用程序
  • 准备必要的软件

概述
      欢迎来到Tomcat的内部世界。这本书剖析了Tomcat4.1.125.0.18,并讲解了Tomcat Servlet容器(代号为Catalina)的工作内幕。Catalina是免费的、开源的,也是最流行的Servlet容器。Tomcat是一个复杂的系统,它包括了众多的组件。在了解Tomcat如何工作之前,我们应该知道从哪儿入手。这本书首先绘制了一张大蓝图,然后构建了Tomcat各个组件的简化版本,使得读者更容易理解Tomcat组件。在这之后,我才会讲解Tomcat组件的真实版。

     你应该首先阅读这一章,因为本章描述了本书的结构,并简单介绍了本书将构建的应用程序。“准备必要的软件”这一节给出了需要下载的软件、应用程序代码的目录结构,等等。
本书为谁准备
  从事Java技术的任何人都可以阅读本书。


  • 如果你是Servlet/JSP程序员或Tomcat用户,而且对Servlet容器工作内幕很感兴趣,那么本书为你而准备。
  • 如果你想加入Tomcat开发团队,那么本书为你而准备。因为你首秀安需要学习已有的Tomcat代码是如何工作的。
  • 如果你从没参加过Web应用的开发,但是对软件开发很有兴趣,那么你可以从本书学习到“如何设计和开发像Tomcat这样的大型应用”。
  • 如果你需要配置和定制Tomcat,你应该读读本书。
  
   为了更好地理解本书的内容,你需要理解Java面向对象程序设计和Servlet编程。如果你不熟悉后者,也没关系,有很多书可以参考,比如Budi Kurniawan的《Java for the Web with Servlets, JSP, and EJB》。为了便于理解,每一章的开始都介绍了必要的背景知识。
Servlet容器如何工作
  Servlet容器是一个复杂的系统。但是从最基本的功能(处理一个到Servlet的请求)来看,Servlet容器主要完成3件任务:

  • 创建Request对象,并填入Servlet可能用到的信息,例如请求参数、headerscookiesquery stringURI等。Request对象是javax.servlet.ServletRequestjavax.servlet.http.HttpServletRequest接口的实例。
  • 创建Response对象,Servlet使用该对象向客户端发送响应数据。Response对象是javax.servlet.ServletResponsejavax.servlet.http.HttpServletResponse接口的实例。
  • Request对象和Response作为参数,调用Servletservice方法。Servlet会从Request对象中读取请求数据,并将响应数据写入到Response对象中。
  
    当你阅读本书的其他章节时,将会找到关于Catalina的详细讨论。
Catalina的框图
  Catalina是一款设计优雅的、非常成熟的软件。同时,她也是一款模块化的软件。基于“Servlet容器如何工作”一节中提到的那3件任务,你可以认为Catalina由两个主要模块组成:ConnectorContainer
DSC0000.jpg


         Figure 0.1 Catalina的主要模块
   
    Figure 0.1是一个非常简化的、高度概括的框图,后续章节将陆续提到粒度更小的组件。

    现在,我们回到Figure0.1Connector将一个请求和Container连接起来。Connector的职责是接收HTTP请求,并为每个请求创建一个Request对象和一个Response对象。ContainerConnector那里接收到Request对象和Response对象,然后负责调用Servletservice方法。

    不过请记住,这只是冰上一角。Container其实干了很多很多事情。举个列子,在调用Servletservice方法前,Container必须加载(loadServlet,验证用户身份(如果需要的话),更新用户的会话(Session),等等。Container使用了很多模块来处理这些事情。例如,Manager模块负责处理用户会话,Loader模块负责加载Servlet类,等等。
Tomcat 4和5
   本书覆盖了Tomcat45。这里列出了两者的一些不同点:

  • Tomcat 5支持Servlet 2.4JSP 2.0规范,Tocmat 4支持Servlet 2.3JSP1.2规范。
  • Tomcat 5使用了一个更加高效的默认Connector
  • Tomcat 5的所有组件共享一个后台处理线程,而Tomcat 4的组件都拥有自己的后台处理线程。因此,Tomcat 5节省了资源消耗。
  • Tomcat5查找子组件时不再使用Mapper组件,因此代码更加简化。
每章的概述
      本书共有20章。头两章是介绍。第1章描述了HTTP服务器是如何工作的,第2章主要阐述了一个简单的Servlet容器。接下来两章的焦点是Connection。从第5章到第20章,每章分别讲解了Catalina的一个组件。下面是每章的摘要。
   
    提示:每一章都附带了一个与被讲解组件相关的应用程序。

    第1章作为本书的开篇,介绍了一个简单的HTTP服务器。为了构建一个可以工作的HTTP服务器,你必须了解java.net包:SocketServerSocket。因此,本章包括了这俩类的一些背景知识,足够让你理解本章附带的应用程序的工作原理。

    第2章阐述了一个简单的Servlet容器是如何工作的。本章带了两个Servlet容器应用程序,它们分别处理对静态资源和简单Serlvet的请求。特别是,你会学习到如何创建RequestResponse对象,如何将它们传递给Servletservice方法。另外,应用程序还包括了一个能够运行在Servlet容器中的servlet,你可以从浏览器中调用它。

    第3章介绍了Tomcat 4默认Connector的一个简化版。本章构建的应用程序可以作为一个学习工具,方便理解第4章讨论的Connector

    第4章介绍了Tocmat 4的默认Connector。现在,该Connector已经被一个更快的ConnectorCoyote)取代了。无论如何,这个过时的Connector简单易学。

    第5章讨论了Container模块。在Catalina中,Containerorg.apache.catalina.Container接口表示,并且有4种类型的ContainerEngineHostContextWrapper。本章提供了两个应用程序,涉及到ContextWarpper

    第6章解释了生命周期(Lifecycle)接口。该接口定义了Catalina组件的生命周期,并提供了一种优雅的方式,将生命周期事件(Event)通知给其他组件。此外,生命周期接口还提供了一种优雅的机制,只需调用一次start/stop方法,就可以启动或停止Catalina的所有组件。

    第7章介绍了Logger模块,其他组件都使用它来打印错误日志和其他日志。

    第8章解释了LoaderLoader是一个重要的Catalina模块,负责加载Servet类和Web应用使用的其他类。本章还展示了如何重新部署(reload)Web应用。

    第9章讨论了Manager。该组件负责管理用户会话。本章解释了不同类型的Manager,以及Manager如何持久化会话对象。在本章的最后,我们将构建一个支持Servlet使用会话对象来存储数据的应用程序,该应用使用StandardManager来实现该功能。

    第10章介绍了Web应用限制特定资源访问的安全约束(Security Constraints)。你将会学习到安全相关的各种实体(Entity),包括PrincipalRoleLogin ConfigAuthenticator等等。我们还构建了两个应用程序,在StandardContext对象中安装一个AuthenticatorValve,使用基本验证方式( Basic Authentication)来验证用户身份。
 
    第11章详细解释了org.apache.catalina.core.StandardWrapper类,该类代表了Web应用中的Servlet。特别是,本章还解释了FilterServletservice方法是如何被调用到的。此外,本章附带的应用程序将使用StandardWrapper来表示Servlet

    第12章介绍了org.apache.catalina.core.StandardContext类,该类代表了Web应用。特别是,本章还讨论了StandardContext对象如何被配置的,HTTP请求进来时StandardContext内部发生了什么,StandardContext如何支持自动重新部署的,Tomcat5如何在各组件之间共享一个执行周期性任务的线程。

    第13章介绍了其它两种ContainerHostEngine。你可以找到这两种Container的标准实现:org.apache.catalina.core.StandardHost类和org.apache.catalina.core.StandardEngine类。

    第14章描述了ServerService两个组件。Server为整个Servlet容器提供了一种优雅的启动和停止机制,Service则是一个Container和数个Connector的持有者(holder)。本章的应用程序展示了如何使用ServerService

    第15章解释了基于DigesterWeb应用配置机制。Digester是一个令人振奋的、Apache基金会的开源项目。本章专门开辟一节介绍了digester库,并描述了如何使用digesterXML文档中的节点(Node)转换成Java对象。之后,本章描述了负责配置StandardContextContextConfig

    第16章解释了shutdownhook。使用了该hook之后,无论用户怎么停止Tomcat(比如,恰当地发送shutdown命令,或不恰当地直接关闭控制台),Tomcat总有机会做一些清理工作。

    第17章讨论了Tocmat的启动和停止过程(使用batch文件或shell脚本)。

    第18章介绍了Deployer,该组件负责部署(deploy)和安装(installWeb应用。

    第19章讨论了一个特殊的接口:ContainerServlet。该接口赋予了Servlet访问Catalina内部对象的能力。特别是,本章讨论了可以管理已部署应用(deployed applications)的Manager应用(Manager application)。

    第20章讨论了JMXTomcat为内部对象创建MBean,使得它们可管理(manageable ),本章将解释Tocmat是怎么做的。
每章的应用程序
      每章都附带了一个或多个应用程序,每个应用程序都关注一个特定的Catalina组件。通常,应用程序会提供所关注组件的简化版本,并通过代码演示如何使用该组件。应用程序的所有类和接口都在ex[章节编号].pyrmont包及其子包中。例如,第1章的应用程序类就在ex01.pyrmont包中。
准备必要的软件
      本书附带的应用程序要求J2SE 1.4。源代码文件(zip)可以从作者的网站www.brainysoftware.com下载。该zip文件包含了Tomcat 4.1.12和本书应用程序的源代码。本书假设你已经安装了J2SE 1.4,环境变量path中包含了JDK的路径,然后按下面步骤操作:

  • 解压zip文件。解压后所有文件都在HowTomcatWorks下。HowTomcatWorks是工作目录,其下有几个子目录,包括lib(包括所有依赖的jar文件)、src(包括源代码文件)、webroot(包含1HTML文件和3Servlet)和webapps(包含应用程序范例)。
  • 切换到工作目录,编译Java文件。如果你使用的是Windows,执行win-compile.bat文件。如果是linux,键入命令(不要忘了chmod):./linux-compile.sh
  
    提示:更多信息,详见zip文件中的Readme.txt

    译者提示:作者官方网站上已经下载不到源代码文件,感兴趣的读者可以从这里(http://docs.google.com/leaf?id=0B-6ayGT6pnKtYzdlYWQzNDYtOGYxZS00YjJhLTk1MDQtZDZlYjBiYTBiODdm&hl=zh_CN)下载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-334672-1-1.html 上篇帖子: JMX在Tomcat中的应用(四) 下篇帖子: Tomcat中设置远程调试设置(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表