Tomcat功能与架构分析解析课件_第1页
Tomcat功能与架构分析解析课件_第2页
Tomcat功能与架构分析解析课件_第3页
Tomcat功能与架构分析解析课件_第4页
Tomcat功能与架构分析解析课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、保 密北京恒华伟业科技股份有限公司2012年09月Tomcat功能与架构设计分析2 目 录1. Java类加载机制2. Tomcat总体框架结构分析4. Tomcat的物理结构5. Tomcat典型功能与设计分析6. 实用配置与常见问题3Java类加载机制类加载是java 语言提供的最强大的机制之一。尽管类加载并不是热点话题,但作为编程人员都应该了解其工作机制,明白怎样去配合其工作。熟悉了类加载机制可以使我们节省很多时间,而不必浪费在调试ClassNotFoundException等异常上,且为我们开发高扩展性的应用程序提供了一些思路。类加载的作用:加载Java应用程序所需的字节码文件(*.c

2、lass、*.jar);提供一种在运行时动态、灵活地定位资源(代码和数据)的方式;允许在运行时利用多种不同资源创建应用程序,并提供命名空间机制,使同一资源的多个版本在虚拟机上共存;可与安全体系结构集成;提供在运行时组装应用程序所需的服务。4Java类加载器Java 缺省使用如下三种类型类装入器启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将 /lib 下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。标准扩展(Extension)类加载器:扩展类加载器是由 Sun 的 E

3、xtClassLoader(sun.misc.Launcher$ExtClassLoader) 实现的。它负责将 /lib/ext 或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。系统(System)类加载器:系统类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。5类加载器的委托机制1. 首先判断该类型是否已经被加载2. 如果没有被加载,就委托给父类加载或者委

4、派给启动类加载器加载3. 如果存在父类加载器,就委派给父类加载器加载4. 如果不存在父类加载器,就检查是否是由启动类加载器加载的类5. 如果父类加载器和启动类加载器都不能完成加载任务,才调用自身的加载功能6Tomcat中类加载器Common类加载器负责加载TomcatHOME/common/class下的.Class文件和common/lib中的jar包,这些类可以被Tomcat内核和每个Web应用程序都可以看见, 如servlet.jar等Catalina类加载器从server/classes和server/lib下加载类,Catalina加载的类只对Tomcat服务器内核可见,对Web应用

5、程序不可见,对于运行Tomcat内核的线程,它的上下文类加载器就是Catalina类加载器Shared类加载器负责从share/classes和share/lib中加载类,它加载的类只对所有Web应用程序有效,对Tomcat不可见.WebappX类加载器负责加载Web应用程序的/web-INF/classes和lib目录下的类,只对当前Web应用程序有效, 对于运行每个Web应用程序的线程,他们的上下文类加载器就是它们各自的WebappX类加载器7 目 录1. Java类加载机制2. Tomcat总体框架结构分析4. Tomcat的物理结构5. Tomcat典型功能与设计分析6. 实用配置与常

6、见问题8Tomcat总体框架结构分析Tocmat的各种组件通过相互作用,形成一个完善的有机体。9Tomcat总体框架结构分析Server Server代表整个Catalina servlet容器。在server.xml配置文件中必须是顶层元素且唯一,给它配置的属性代表整个容器的属性。 默认实现:org.apache.catalina.core.StandardServerListener所有server.xml中的监听器都实现了LifecycleListener接口。当server中的各种组件在start、stop等事件发生时触发相应的操作。如: JasperListener用来在所有web应

7、用程序启动前初始化jasper(JSP编译)。10Tomcat总体框架结构分析Service Service是这样一个集合:它由一个或者多个Connector,以及一个共享的处理引擎(Engine)组成。Engine负责处理所有Connector所获得的客户请求。 默认实现: org.apache.catalina.core.StandardService11Tomcat总体框架结构分析Connector 一个连接器(Connector)将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得响应结果,并返回给客户端。 Tomcat有两个典型的连接器,一个直接

8、侦听来自客户端浏览器的http请求,一个侦听来自其它Web服务器的请求。12Connector的工作原理 Coyote Http/1.1 Connector 在端口8080处侦听来自客户浏览器的http请求,Coyote JK2 Connector 在端口8009处侦听来自其它Web服务器(比如Apache)的servlet/jsp代理请求。 当使用Coyote Http/1.1 Connector时,Tomcat作为独立的Web容器,同时扮演Web服务器和Servlet容器的双重角色。当使用Coyote JK2 Connector时,Tomcat只扮演Servlet容器的角色,Web服务器则

9、由Apache或者其他服务器来提供,由于这些专有的Web服务器在处理静态资源的性能和效率上要比Tomcat提供的Web服务器要好,所以经常将Tomcat和Apache配合使用。13Tomcat总体框架结构分析Engine 处理引擎(Engine)代表一个Service所属的请求处理机,它接受所有连接器传递过来的客户端请求,将处理结果返回给连接器,由连接器将最终响应返回给客户端。Engine必须配置在Service组件下。 处理引擎下可以配置多个虚拟主机(Virtual Host),每个虚拟主机都有一个域名。当处理引擎获得一个请求时,它把该请求匹配到某个虚拟主机上,把请求交给该虚拟主机来处理。处

10、理引擎有一个默认虚拟主机,当请求无法匹配到任何一个虚拟主机上时,交给默认虚拟主机来处理。 默认实现: org.apache.catalina.core.StandardEngine14Tomcat总体框架结构分析Host 代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。每个虚拟主机下都可以部署(deploy)一个或者多个Web应用程序(Web Application),每个Web应用程序对应于一个Context,有一个Context path。当虚拟主机获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理。匹配的方法是“最长

11、匹配”,一个path=的Context将成为该虚拟主机的默认Context。所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配。 默认实现: org.apache.catalina.core.StandardHost15Tomcat总体框架结构分析Context 一个Context对应于一个Web应用程序,一个Web应用程序由一个或者多个Servlet组成。Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WebApp /Web-INF/web.xml载入Servlet类。当Context获得请求时,将在自己的映射表

12、(mapping table)中寻找相匹配的Servlet类。如果找到,则执行该类,获得请求的响应,并返回。 默认实现: org.apache.catalina.core.StandardContext16Tomcat的核心类图所有的容器对象,都继承LifeCycle,也即具有生命周期的方法,init(),start(),stop(),destroy(),具有LifecycleState属性(可以看一下这个属性的内容)17Tomcat总体框架结构分析启动catalina.bat中set MAINCLASS=org.apache.catalina.startup.Bootstrap18Tomca

13、t组件启动流程图19启动过程都做了什么1. 初始化目录 设置CatalinaHome、CatalinaBase,初始化System环境信息2. 初始化类加载器(ClassLoader) 初始化三个类加载器commonLoader、catalinaLoader、sharedLoader;这是要从perties中读取配置,即jar包的配置。3. 构建容器 对server、service、engine、host等容器对象进行实例化,开始这些对象的生命周期。4. 部署Web应用 扫描webapps、conf/Catalina/localhost目录,进行war包、应用程序目录、contex配置文件的加

14、载;20Tomcat嵌入早期版本中,如Tomcat5中,提供了Embedded类用于在java应用中嵌入。在新版本的Tomcat中,Embedded已经不建议使用。Tomcat7中,提供了专门的Embedded版本。 当然,我们可以直接构建Catalina对象实现Tomcat的嵌入应用;也可以参考或者直接改造Bootstrap类实现嵌入。21Tomcat容器的结构22容器的工作原理 1. ClassLoaer Tomcat 通过WebappClassLoader加载web应用程序,通过WebappClassLoader确保各个应用相互独立,运行期间互不干扰。 2. 容器生命周期 应用LifeC

15、ycle生命周期接口定义各级容器的初始化、启动、停止、销毁等动作,并应用组合设计模式把Server、Service、Engine、Host、Context这几级容器有效的整合为有机体,协调完成JSP解析、编译、初始化以及响应客户端请求等这种任务。 3. Connector 容器接收Connector传递过来的客户端(浏览器或者web server)请求,并把响应结果通过Connector发回到客户端(浏览器)。23 目 录1. Java类加载机制2. Tomcat总体框架结构分析4. Tomcat的物理结构5. Tomcat典型功能与设计分析6. 实用配置与常见问题24 Tomcat的物理结构

16、分析包结构org.apache. catalinaTomcat核心类库,规范了Tomcat 的总体架构,定义了Server 、Service 、Host 、Connector 、Context 、Session 及Cluster 等关键组件及这些组件的实现,这个子模块大量运用了Composite 设计模式。同时也规范了Catalina 的启动及停止等事件的执行流程 org.apache. coyoteCoyote 连接器,实现了Http1.1 协议,实现了对请求和响应对象的构建。25 Tomcat的物理结构分析包结构org.apache下其他包el : el表达式定义、解析处理jasper:

17、负责jsp 页面的解析, jsp 属性的验证,同时也负责将jsp 页面 动态转换为java 代码并编译成class 文件juli: 日志管理naming: 资源管理,包括数据库连接池、EJB、mail等通过JNDI获取的 内容26 Tomcat的物理结构分析包结构javax.servlet Servlet 和Jsp 规范的实现模块,我们非常熟悉的javax.servlet.Servlet 接口、javax.servet.http.HttpServlet 类及javax.servlet.jsp.HttpJspPage 就位于这个子模块中;27 Tomcat的物理结构分析目录结构/bin:存放wi

18、ndows或Linux平台上启动和关闭Tomcat的脚本文件/conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml/doc:存放Tomcat文档【下面这几个目录在Tomcat6、7中已经去掉,合并为lib目录】/server:包含三个子目录:classes、lib和webapps/server/lib:存放Tomcat服务器所需的各种JAR文件/server/webapps:存放Tomcat自带的两个WEB应用admin应用和 manager应用/common/lib:存放Tomcat服务器以及所有web应用都可以访问的jar文件/shared

19、/lib:存放所有web应用都可以访问的jar文件(但是不能被Tomcat服务器访问)/logs:存放Tomcat执行时的日志文件/webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录/work:存放JSP编译后产生的class文件28 目 录1. Java类加载机制2. Tomcat总体框架结构分析4. Tomcat的物理结构5. Tomcat典型功能与设计分析6. 实用配置与常见问题29应用程序加载30JSP编译的实现31Servlet管理初始化在web应用程序初始化过程中,也就是解析web.xml时,会把Servlet、Filter、Listener等s

20、ervlet对象实例化、初始化。每个Servlet被封装为一个Wrapper,即StandardWrapper32请求处理过程分析(1)33请求处理过程分析(2)34Session的创建和管理Catalina通过一个叫Manager的组件来完成session管理工作,即org.apache.catalina.Manager接口。一个Manager通常跟一个上下文容器相关联,它负责创建、更行以及销毁session对象并能给任何请求组件返回一个合法的session。 35Tomcat资源的管理(一)Tomcat资源:Tomcat中,可以使用server.xml和web.xml分别为应用预定义一些静

21、态资源,这些静态资源就是我们在应用程序中可以直接访问的资源。这些资源在Tomcat启动的时候被自动加载。36Tomcat资源的管理(二)server.xml定义资源server.xml中通过context来为应用定义资源。资源定义包括五个元素:Parameter、Environment、Resource、ResourceParams、ResourceLink。Context中定义的资源只能被当前的应用使用。Server.xml中还可以定义GlobalNamingResource来定义全局的资源,元素包括:Environment、Resource、ResourceParams.元素名称说明Par

22、ameterContext内,定义应用参数,通过ServletContext.getInitParameter()获取Environment定义应用的环境变量,通过JNDI查找Resource定义JNDI资源,通过JNDI查找资源,如:dataSourceResourceParams设置已定义的JNDI资源的参数,按照名称与JNDI资源对应ResourceLinkContext内,定义资源链接,将全局资源引入到本应用中资源元素说明:37Tomcat资源的管理(三)web.xml资源:这里说的web.xml是各个应用下自己的配置文件。包括元素:context-param、env-entry、re

23、source-ref、resource-env-ref。元素名称说明context-Parameter等价于server.xml中的parameter,会覆盖server.xml中的同名参数。env-entry等价于server.xml中的Environment,会覆盖server.xml中的同名变量resource-ref资源应用定义。可以再server.xml中使用ResourceParams定义资源参数,在web使用本元素进行应用resource-env-ref类似resource-ref,没有auth属性,即不需要验证资源元素说明:38阀(Valve)的作用39 目 录1. Java类

24、加载机制2. Tomcat总体框架结构分析4. Tomcat的物理结构5. Tomcat典型功能与设计分析6. 实用配置与常见问题40JVM参数配置set CATALINA_OPTS=-server -Xms1024m -Xmx1024m -XX:NewSize=512m -Xss128k -XX:PermSize=256M -XX:PermSize=256M或者set JAVA_OPTS也是一样的41安全相关配置-使用SSLSSL可以保证网络上的两个节点之间进行安全的通信。使用SSL机制的http协议也就是HTTPS协议。只有当Tomcat作为独立的web服务器时,Tomcat中才有必要使用

25、SSL,如果连接Apache、IIS等web服务器是,SSL需要在这些web服务器中进行配置。这里简单说一下配置SSL的必要步骤:使用keytool命令创建自签名的数字证书。当然这个证书是没有被任何CA官方注册的(具体配置可以参考资料);去掉server.xml中ssl connector元素的注释,使其生效。42安全相关配置-使用Valve加强安全性问题:凡是允许用户输入数据到服务器都存在注入带来的危险。注入包括以下几种:XSS (Cross-site Script) 注入如:Document.location=“”+document.cookie;HTML注入输入框中插入恶意代码,可以偷取

26、用户密码等信息到自己的地址。SQL注入提交非法的查询参数,注入到查询的sql字符串中,提取数据库信息。命令注入发送请求命令道服务器中,该命令在命令行预先,偷取服务器信息。43安全相关配置-使用Valve加强安全性解决思路:使用Valve过滤用户发送到服务器的数据。所有危害都是通过用户提交的数据造成的,所有只要对用户的数据进行完全的过滤,就可以消除隐患。通过正则表达式进行匹配查找和替换,参考:quoteHashMap.put(“”,”);quoteHashMap.put(“”,”);quoteHashMap.put(“”,”);angleBracketsHashMap.put(“”,”,”);javaScriptHashMap.put(“document(.*).(.*)cookie”,”document.ccookie”);javaScriptHashMap.put(“eval(s)(”,”eval(”);等等44端口Tomcat使用的端口在使用Tomcat的过程中,经常会有修改端口的情况,下面是几个Tomcat需要注意的端口:端口说明Server元素的8005用于监听shutdown命令的端口,为提高安全性,应修改这个端口,否则容易被通过telnet非法执行shutdown命令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论