说明:本文章围绕着几个问题,讲述Tomcat的一些配置。
1.Tomcat是什么?
2.Tomcat都有什么目录?重要的配置文件有那些?主要做什么用?
3.Tomcat为什么使用8080端口访问,为什么一般不用80端口?
问题1答案:
Tomcat是由Apache开发的一个Servlet容器,它对servlet和jsp进行了支持,并提供了web容器的特有支持。
Tomcat本身是一个Http服务器,它也可以被认为本身是一个HTTP服务器。但Tomcat不能和HTTP协议混为一团,
Apache的HTTP协议是c语言实现的Http web服务器,这两个服务不能捆绑在一起。
问题2答案:
/bin :主要存放Tomcat脚本目录的
例如:startup.sh(Linux上启动命令,Windows上.bit文件是)
shutdown.sh(Linux上关闭命令,Windows上.bit文件是)
version.sh(查看Tomcat版本命令)
catalina.sh(像启动命令,关闭命令,查看版本命令等都会依赖这个脚本实现)
/lib :主要是Tomcat依赖的一些jar包
/work :工作目录
/temp :临时文件目录
/webapps :项目的发布目录
/log :日志文件目录,这个是默认日志存放的位置
Tomcat的日志信息分为两种:
1.运行日志,它主要记录一些运行信息,尤其是一些运行异常信息,这个就在之前的service.xml中配置
在<Host>标签中加入
<!--日志路径路径-->
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="/home/yunweizp/projectlogs/zixunweblog/access" prefix="access" suffix=".log"
pattern="%t %h %l "%r" %s %b "%{Referer}i" "%{User-Agent}i" "%q" "%D"" fileDateFormat="yyyy-MM-dd-HH" resolveHosts="false"/>
AccessLogValve这个类是用来创建日志的,他主要创建的是运行日志。
directory是创建运行日志存放的位置。
prefix是日志文件名称
suffix是日志文件是什么后缀名
pattern是日志要记录的文件内容格式。
fileDateFormat是日志文件名称使用定制的日期格式,同时也决定了日志的翻转频率,
resolveHosts将远端主机的IP地址通过DNS查询转换成主机名,设为true。如果为false,忽略DNS查询,报告远端的IP地址
2.访问日志,它会记录一些访问服务器的信息,如时间,IP等。
/conf :配置文件,这里主要说service.xml文件。
Server:元素是最顶级元素,代表了整改Tomcat容器,shutdown是表示关闭Server的指 令,port属 性表示Server接 收 shutdown指令的端口号。
Service:它是在Connector和Engine外面包了一层,把他们组装到一起,对外提供服务。一个Service可以包多个Connector,但是只能包一个Engine,其中Connector是从客户端接收请求的,Engine是处理接收进来的请求的。
Connector:它的功能是接收请求,创建Request和Response对象,用于和请求端交换数据,然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。所以我们可以通过Connector控制service的协议和端口。<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>这个配置的意思是:客户端可以通过8080端口号,使用http协议访问Tomcat,其中port规定了请求的端口号,protocol属性规定了请求的协议,rectPort属性规定了要强制请求HTTPS协议而请求http协议时,重定向至端口号为8443的Connector,connectionTimeout表示链接的超时时间。
在上面的配置中,Tomcat监听http请求,使用的端口号是8080而不是80,在正式的环境中,Tomcat监听的也是8080端口,这是在生产环境中也很少对外开放请求接收。而是在Tomcat和客户端之间加一层代理服务(如NGINX),用于请求转发,负责均衡,处理静态文件等。通过代理服务器访问Tomcat时,是在局域网中,因此一般也使用8080端口。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
客户端通过8009端口使用AJP协议访问Tomcat,AJP协议负责和其他的HTTP服务器(如Apache)建立连接,在把Tomcat与其他HTTP集成时,就需要这个连接器。之所以使用Tomcat和Apache等集成,前者做为servlet容器,后者处理静态资源,二AJP协议便负责Tomcat和Apache的连接。
Engine:Engine组件在service组件中有且只有一个,Engine是service组件中的请求处理组件,Engine组件从一个或多个Connector中请求处理,并将完成后的响应返回给Connector,最终传递给客户端。前面已经提到过,Engine,Host和Context都是容器,但是他们不是平行关系,而是父子关系,Engine包含了Host,Host包含了Context。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host>
Host是虚拟主机的作用 ,运行多个web应用(一个Context代表一个web应用),并负责安装,展开,启动和结束每个web应用。
name属性指定虚拟机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件中的defaultHost属性相匹配。
unpackWARs指定是否代表web应用的war文件解压,如果true,通过解压后的文件结构运行web应用,如果为false,直接使用war文件运行web应用。
autoDeploy和appBase与部署有关。
<!--部署工程路径--><Context path="" docBase="/home/yunweizp/projectdatas/zixunweb/ROOT" reloadable="ture" allowLinking="true"/>
context元素最重要的两个属性docBase和path
path指定访问web应用的上线问路径,请求到来时,Tomcat根据web应用的path与URL匹配程度来选择web应用处理相应的请求
docBase是web应用的war包路径,也就是项目的应用目录。