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.jsp
1.请求被发送到本机端口8080,被在那里监听的coyote HTTP/1.1 Connector获得
2.Connector把该请求交给它所在的service的Engine来处理,并等待来自Engine的回应
3.Engine获得localhost:8080/abc/abc_index.jsp,匹配它所有的虚拟主机host
4.如果Engine匹配带名字为localhost的host(即使匹配不到也可以交给host处理,被Engine的默认主机处理)
5.localhost的host获得请求/abc/abc_index.jsp,匹配它所有的Context
6.host匹配到路径为/abc的Context
7.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对象返回给host
11.host把HttpServletResponse对象返回给Engine
12.Engine在把HttpServletResponse对象在返回给Connector
13.Connector把HttpServletResponse对象返回给客户浏览器