Tomcat详解

来源:互联网 发布:网络研修 编辑:程序博客网 时间:2024/05/22 09:04

Tomcat

概述:   Tomcat在严格意思上并不是一个真正的应用服务器,只是一个可以支持servlet、JSP的web容器   它扩展了一些应用服务器的功能,如JNDI,数据库连接池,用户事务处理等,是Apache组织下的子项目。   目前Tomcat被非常广泛的应用于中小规模的Javaweb应用中   优点:  1.容易得到,直接去官网下载  2.对于开发人员,特别是Java开发人员,Tomcat提供了全部的源代码  包括servlet引擎,JSP引擎,http服务器,  3.TOMCAT使用率很高,基本和主流的服务器一起工作由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性Tomcat目录:bin:存放启动和关闭Tomcat脚本conf:存放不同的配置文件(server.xml和web.xml)doc:存放Tomcat文档logs:存放Tomcat执行时的log文件src:存放Tomcat的源代码webapps:主要存放web发布的目录(应用程序的示例)work:存放JSP编译后产出的class文件server.xml配置文件server.xml是Tomcat的主配置文件,主要完成两个目标:   1.提供Tomcat组件的初始配置,说明Tomcat的结构、含义,使得Tomcat通过实例化组件完成启动及构建自身   2.观察server.xml,可以发现里面包含一些元素:      1.Server元素:         Server元素是server.xml文件最高级别的元素,描述一个Tomcat服务器,         一个Server元素一般会包含logger和ContextManage两个元素                  logger:            logger元素定义一个日志对象            一个日志对象包含哪些属性:               1.name:表示这个日志对象的名称               2.path:表示这个日志对象包含的日志的内容要输出哪一个日志               3.verbositylevel:表示这个日志文件记录的日志的级别                    logger对象是对Java servlet,jsp,tomcat运行期事件的记录     contextManage:        contextManage定义了一组contextInterceptors(contextManage事件监听器),requestInterceptors(事件监听器),contexts(web应用程序的上下文目录)和连接器(connectors)的结构和配置        1.debug:          表示记录日志记录调试信息的等级        2.home:          webapps/conf/logs和context的根目录信息,这个属性的作用是从一个不同的TOMCAT_HOME的目录启动Tomcat        3.workDir:表示Tomcat的工作目录          注意:     contextInterceptors和requestInterceptors两者都是监听contextManage的特定事件的拦截器      contextInterceptors:监听Tomcat的启动和结束事件的信息      requestInterceptors:监听用户对服务器发出的请求2.Connector元素:   Connector(连接器)元素描述了一个到用户的连接,或者直接由Tomcat到用户的浏览器还是通过web服务器   Tomcat的工作进程和由不同的用户建立的连接来传递读写信息和请求、响应等都是由连接器对象管理   对连接器对象的配置中应该包含管理类,TCP IP  端口等内容      3.Context元素:   每一个Context元素都描述一个Tomcat的web应用程序的目录   包含的属性:      1.docBase:         Context目录      2.path:        表示Context在web服务器时的虚拟目录位置和目录名      3.debug:         日志记录的调试信息的记录等级      4.reloadable:          这个属性可以方便servlet的开发,如果该属性处于打开的状态,tomcat将检查servlet是否被更新而决定自动重新载入   配置实例:   打开Tomcat/conf/server.xml      1.改变Tomcat服务器的端口号:      需要使用connector元素,connector表示一个到用户的连接,不管是通过web服务器或者直接到用户浏览器(在一个独立的配置中)      connect偶尔负责管理Tomcat的工作线程和读写连接到不同用户的端口的请求/响应。      connector的配置包含的信息:         句柄类,句柄监听的TCP/IP端口、句柄服务器端口的TCP/IP 的backlog                  注意:            修改后必须重启Tomcat服务器            可以将端口号改成80,需要保证80端口号没有被其他程序占用,另外,也可以同时配置两个端口号,只要产生两个connector的配置信息  

server.xml配置

配置文件中的额基本配置信息:   server:       一个服务器元素代表整个cantalina的servlet容器       1.port:指定一个端口,该端口负责监听关闭Tomcat的请求       2.shutdown:指定向端口发送命令字符串       service:          它由一个或多个连接器(connector)组成,以及Engine,负责处理所有的connector所获得的客户请求             1.name:指定service名称                      Connector(表示客户端和service之间的连接):              一个Connector将在某个指定端口上监听客户的请求,并将获得的请求交给Engine来处理,从Engine获得相应的结果并返回给客户         Tomcat有两个典型的Connector    1.直接监听来自browser的http请求    2.监听来自其他的webService的请求    注意:   coyote  http/1.1  Connector在端口8080处监听客户来自browser的http请求   coyote  jk1.3   Connector在端口8009处监听来自其他的webServer(Apache)的servlet/jsp的代理请求         1.port:指定服务器端需要创建的端口号,并可以在这个端口监听来自客户端的请求   2.minProcessors:为服务器启动时创建处理请求的线程数(最小)   3.MaxProcessors:最大可以创建处理请求的线程数   4.enableLookUps:       如果为true      则可以通过调用request.getRemoteHost();进行DNS查询来得到远程客户端的实际的主机名       如果为false:          则不进行DNS查找,返回IP地址    5.redirectport:       指定服务器正在处理http请求时收到一SSL传输请求后重定向的端口号           6.acceptCount:       指定当所有可以使用的处理请求的线程数,如果线程数都被使用,可以放到处理队列中的请求数,超过了这个请求数,就不予以处理           7.connectionTimeOut:       表示超时的时间数(一般以毫秒为单位)

Engine

概述:   Engine下可以配置多个虚拟机主机,每一个虚拟主机都有一个域名,当Engine获得一个请求时,它把该请求匹配到某个host上,然后交由host来处理   Engine有一个默认的虚拟主机:   当请求无法匹配到任何一个host上的时候,将交给默认的host来处理(表示指定service中 的请求处理机,接受和处理来自connector的请求):      1.defaultHost:指定缺省的处理请求的主机名,它至少和其中一个host元素的name属性值相同         Context(表示一个web 应用程序):      1.docBase:表示程序的路径或者是WAR文件存放的路径      2.path:表示web应用程序的前缀,如:请求URL:http://localhost:8080/path/...      3.reloadable:         如果为true:            则Tomcat会自动检测应用程序的/WEB—_INF/lib和/WEB—_INF/classes目录的变化,自动加载新的应用程序,不需要重启Tomcat      

host

定义:host表示一个虚拟主机:每个虚拟主机好某个网络域名(Domain name)相匹配每一个虚拟主机下都可以部署一个或多个web app ,每一个webapp对应一个Context,Context path,当host获得一个请求时,将把该请求匹配到某个context上,然后交由context处理,  匹配的方法:最长匹配  注意:     path=""的context将成为该host的默认的context。所有无法和其他Context的路径名匹配的请求,都将最终和该默认的Context进行匹配。          1.name :表示指定的主机名     2.aooBase:表示应用程序的基本目录,即存放该应用程序的目录     3.unpackWARs:         如果为true:            则Tomcat会自动将WAR文件解压,反之不解压,直接从WAR文件中运行应用程序

Logger

logger :表示日志,调试和错误信息  1、className:指定logger使用的类名,此类必须实现org.apache.catalina.logger接口  2.prefix:指定logger文件的前缀  3.suffix:指定logger文件的后缀  4.timeStamp:     如果为true:表示在log文件名中加入时间(系统时间)     如:localhost_log.2017-07-12.txt  valve(功能和logger差不多)  其中prefix和suffix属性解释和logger一样   不同:      1.classname:表示指定valve的使用类名,        如:          org.apche.catalina.valve.accessLogValne类可以记录应用程序的访问信息    directory:表示log文件存放的位置pattern:common方式记录远程主机名,IP地址、用户名、日期、http响应代码、发送的字节数。

Realm

Realm:表示存放用户名、密码、role的数据库   1.className:表示realm的使用类名,此类必须实现 org.apche.catalina.realm接口

Tomcat管理

1.用户管理:在进行具体的Tomcat管理之前,可以先给Tomcat添加用户,使这个用户有权限进行管理<user name="user" password="user" roles="standard,manager"/>,重启Tomcat在浏览器里输入http://localhost:8080/manager,会弹出一个对话框,输入上面定义的用户名和密码2.应用程序管理:  http://localhost:8080/manager/list,   浏览器会显示基本信息:应用程序的路径,当前的饿状态,连接程序的session数   3.重新加载应用程序  在浏览器输入http://localhost:8080/manager/reload?path=/exmples,  浏览器会显示该exmples是否加载成功  或者:     将server.xml的context元素的reloadable属性设置为true,则会自动加载    4.显示session的信息    http://localhost:8080/manager/session?path=/exmples,  5.启动和关闭应用程序   http://localhost:8080/manager/start?path=/exmples,//启动   http://localhost:8080/manager/stop?path=/exmples,//关闭    
假设来自客户端的请求:http://localhost:8080/abc/abc_index.jsp1.请求被发送到本机端口8080,被在那里监听的coyote  HTTP/1.1  Connector获得2.Connector把该请求交给它所在的service的Engine来处理,并等待来自Engine的回应3.Engine获得localhost:8080/abc/abc_index.jsp,匹配它所有的虚拟主机host4.如果Engine匹配带名字为localhost的host(即使匹配不到也可以交给host处理,被Engine的默认主机处理)5.localhost的host获得请求/abc/abc_index.jsp,匹配它所有的Context6.host匹配到路径为/abc的Context7.path=“/abc”的Context获得请求/abc_index.jsp,在它的mapping table中寻找对应servlet 8.Context匹配到URL PATTERN为*.jsp  的servlet,对应于JSPServlet类9.构造HttpServletRequest对象和HttpServletResponse对象作为参数调用JSPServlet的doget或者doPost方法10.Context把执行完的HttpServletResponse对象返回给host11.host把HttpServletResponse对象返回给Engine12.Engine在把HttpServletResponse对象在返回给Connector13.Connector把HttpServletResponse对象返回给客户浏览器