资源描述
每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,每页的标题(中文为楷体_GB2312,英文为Arial;22号),点击此处编辑文本,第二级,第三级,第四级,*,保 密,北京恒华伟业科技股份有限公司,2012,年,09,月,Tomcat,功能与架构设计分析,2,目 录,1.,Java,类加载机制,2.,Tomcat,总体框架结构分析,4.,Tomcat,的物理结构,5.,Tomcat,典型功能与设计分析,6.实用配置与常见问题,3,Java,类加载机制,类加载是,java,语言提供的最强大的机制之一。尽管类加载并不是热点话题,但作为编程人员都应该了解其工作机制,明白怎样去配合其工作。,熟悉了类加载机制可以使我们节省很多时间,而不必浪费在调试,ClassNotFoundException,等异常上,且为我们开发高扩展性的应用程序提供了一些思路。,类加载的作用,:,加载,Java,应用程序所需的字节码文件(*,.class,、*,.jar);,提供一种在运行时动态、灵活地定位资源(代码和数据)的方式,;,允许在运行时利用多种不同资源创建应用程序,并提供命名空间机制,使同一资源的多个版本在虚拟机上共存,;,可与安全体系结构集成,;,提供在运行时组装应用程序所需的服务。,4,Java,类加载器,Java,缺省使用如下三种类型类装入器,启动(,Bootstrap,)类加载器,:,引导类装入器是用本地代码实现的类装入器,它负责将,/lib,下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。,标准扩展(Extension)类加载器,:,扩展类加载器是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将/lib/ext 或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。,系统(System)类加载器,:,系统类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。,开发者可以直接使用系统类加载器。,5,类加载器的委托机制,1.,首先判断该类型是否已经被加载,2.,如果没有被加载,就委托给父类加载或者委派给启动类加载器加载,3.,如果存在父类加载器,就委派给父类加载器加载,4.,如果不存在父类加载器,就检查是否是由启动类加载器加载的类,5.,如果父类加载器和启动类加载器都不能完成加载任务,才调用自身的加载功能,6,Tomcat,中类加载器,Common,类加载器负责加载,TomcatHOME/common/class,下的,.Class,文件和,common/lib,中的,jar,包,这些类可以被,Tomcat,内核和每个,Web,应用程序都可以看见,如,servlet.jar,等,Catalina,类加载器从,server/classes,和,server/lib,下加载类,Catalina,加载的类只对,Tomcat,服务器内核可见,对,Web,应用程序不可见,对于运行,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.实用配置与常见问题,8,Tomcat,总体框架结构分析,Tocmat,的各种组件通过相互作用,形成一个完善的有机体。,9,Tomcat,总体框架结构分析,Server,Server,代表整个,Catalina servlet,容器。在,server.xml,配置文件中必须是顶层元素且唯一,给它配置的属性代表整个容器的属性。,默认实现:,org.apache.catalina.core.,StandardServer,Listener,所有,server.xml,中的监听器都实现了,LifecycleListener,接口。当,server,中的各种组件在,start,、,stop,等事件发生时触发相应的操作。如:,JasperListener,用来在所有,web,应用程序启动前初始化,jasper,(,JSP,编译)。,10,Tomcat,总体框架结构分析,Service,Service,是这样一个集合:它由一个或者多个,Connector,,以及一个共享的处理引擎,(Engine),组成。,Engine,负责处理所有,Connector,所获得的客户请求。,默认实现:,org.apache.catalina.core.,StandardService,11,Tomcat,总体框架结构分析,Connector,一个连接器,(Connector),将在某个指定端口上侦听客户请求,并将获得的请求交给,Engine,来处理,从,Engine,处获得响应结果,并返回给客户端。,Tomcat,有两个典型的连接器,一个直接侦听来自客户端浏览器的,http,请求,一个侦听来自其它,Web,服务器的请求。,12,Connector,的工作原理,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,服务器则由,Apache,或者其他服务器来提供,由于这些专有的,Web,服务器在处理静态资源的性能和效率上要比,Tomcat,提供的,Web,服务器要好,所以经常将,Tomcat,和,Apache,配合使用。,13,Tomcat,总体框架结构分析,Engine,处理引擎,(Engine),代表一个,Service,所属的请求处理机,它接受所有连接器传递过来的客户端请求,将处理结果返回给连接器,由连接器将最终响应返回给客户端。,Engine,必须配置在,Service,组件下。,处理引擎下可以配置多个虚拟主机(,Virtual Host,),每个虚拟主机都有一个域名。当处理引擎获得一个请求时,它把该请求匹配到某个虚拟主机上,把请求交给该虚拟主机来处理。处理引擎有一个默认虚拟主机,当请求无法匹配到任何一个虚拟主机上时,交给默认虚拟主机来处理。,默认实现:,org.apache.catalina.core.,StandardEngine,14,Tomcat,总体框架结构分析,Host,代表一个虚拟主机,每个虚拟主机和某个网络域名(,Domain Name,)相匹配。每个虚拟主机下都可以部署,(deploy),一个或者多个,Web,应用程序(,Web Application,),每个,Web,应用程序对应于一个,Context,,有一个,Context path,。当虚拟主机获得一个请求时,将把该请求匹配到某个,Context,上,然后把该请求交给该,Context,来处理。匹配的方法是“最长匹配”,一个,path=,的,Context,将成为该虚拟主机的默认,Context,。所有无法和其它,Context,的路径名匹配的请求都将最终和该默认,Context,匹配。,默认实现:,org.apache.catalina.core.,StandardHost,15,Tomcat,总体框架结构分析,Context,一个,Context,对应于一个,Web,应用程序,一个,Web,应用程序由一个或者多个,Servlet,组成。,Context,在创建的时候将根据配置文件,$CATALINA_HOME/conf/web.xml,和,$WebApp/Web-INF/web.xml,载入,Servlet,类。当,Context,获得请求时,将在自己的映射表,(mapping table),中寻找相匹配的,Servlet,类。如果找到,则执行该类,获得请
展开阅读全文