今天主要是带大家了解tomcat结构,让我们对tomcat的运行了解,方便我们更熟练去使用tomcat。
目录
一.Tomcat结构
tomcat主要结构图:
讲解:
- server: 就是一个tomcat。
- servie: 组件,可以配置多个连接器
- connector: 连接器,我们把请求发送给服务器,服务器需要接收请求,接收的地方就是连 接器,连接器接收到请求,进行解析,在发给其他的组件。
- Engin: 引擎,一个引擎下面有可以有多个虚拟主机。
- Host: 虚拟主机。
- Context : 我们发布的应用。
- Wrapper: 可以理解为像一个盒子一样,里面包着一个servlet。
- servlet: 就是我们在web项目中的servlet
二.server.xml解析
图片的讲解可能太过于抽象,所有现在带大家用另外一种方式理解一下。
点击tomcat--->打开conf文件夹---->打开server.xml文件
server.xml:
1.server
- 代表整个Catalina Server容器,是tomcat实例的顶层元素,由org.apach.catalina.Server接口定义,其下可以包含一个或多个Service元素
- port:关闭的端口号(监听有没有关机的请求),必须设置
- shutdown:关闭的命令,这两个大家最好修改一下,不然打开命名指示---->输入 127.0.0.1(别人的IP地址)8005 SHUTDOWN (关闭命令) Telnet----->关闭服务器。所以大家一定要进行修改,修改成让别人不知道的端口号和关闭命令。
<Server shutdown="SHUTDOWN" port="8005">
2.service
- 由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>元素,这些<Connector>元素共享一个<Engine>元素
- name:service的名字
<Service name="Catalina">
3.connector(连接器)
- 实现类: org.apache.catalina.Connector 接口的类,默认值为org.apache.catalina.core.StandardConnector
- port=8080,定义一个HTTP Connector连接器,在8080端口监听,负责处理HTTP连接,浏览器和tomcat服务器的交互使用的就是这个连接。
配置参数:
- port: 配置连接端口
- protocol: 连接使用的协议
- connectionTimeout: 连接超时时间
- redirectPort: 当用户用http请求某个资源,而该资源本身又被设置了必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口(https加密协议)
- acceptCount:设定在监听端口队列中的最大客户请求数,默认值为10,如果队列已满,客户请求将被拒绝
- address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址
- enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名.Web应用调用request.getRemostHost方法将返回客户的主机名.该属性默认值为true
- executor: 配置tomcat的线程池,在此配置的名称与server.xml文件中Service节点下的Executor节点name属性相对应
- compression : 如果带宽有限的话,可以用GZIP压缩,off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off
URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1
<Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
4.Engin(引擎)
- 由org.apahe.catalina.Engine接口定义.每个<Service>元素只能包括一个<Engine>元素. <Engine>元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求
- 相关实现类:org.apache.catalina.Engine接口的类,默认值为org.apache.catalina.core.StandardEngine
- name 定义Engine的名字
- defaultHost 默认处理请求的主机名,必须与其中的一个Host元素的名称一样
-<Engine name="Catalina" defaultHost="localhost">
5.Host(虚拟主机)
由org.apache.catalina.Host接口定义.一个<Engine>元素可以包含多个<Host>元素.每个<Host>元素定义了一个虚拟主机,它可以包含一个或多个Web应用.
- 实现类 实现org.apache.catalina.Host接口的类,默认值为org.apache.catalina.core.StandardHost
- appBase 指定虚拟主机的对应的目录(即虚拟主机的部署目录),可以是绝对路径,也可以是相对于tomcat安装目录的相对路径,默认的部署目录为webapps
- unpackWARs 配置为true,表示tomcat会自动解压部署目录中的war包,如果配置为false,则不会解压,直接运行war文件,默认为false,建议保持默认值。
- autoDeploy 配置为true,表示tomcat处于运行状态时可以监测部署目录中的文件状态,如果有新的web应用部署进来则自动发布这个web应用。
-<Host name="localhost" autoDeploy="true" unpackWARs="true" appBase="webapps">
6.context
最常配置的元素,每一个Context代表一个运行在tomcat中的web应用,一个Host下可以配置多个Context. 例如:
<Context path="/sample" docBase="sample" debug="0" reloadable="true">。
- 实现类: 实现org.apache.catalina.Context接口的类,默认值为org.apache.catalina.core.StandardContext
- path 指定访问web应用的url路径
- docBase 发布的web应用的文件路径,可以时绝对路径,也可以是相对与发布目录的相对路径
- reloadable 设置为true,tomcat在运行期间会监测发布应用的WEB-INF/classes和WEB-INF/lib目录中的文件改动,当检测到文件变动后,tomcat会自动重新加载应用。
- cookies 是否可以通过cookie来支持Session,默认为true
- 虽然可以使用Context节点来部署应用,但自tomcat5.5之后就不再建议这么做,可以在/conf/Catalina/{hostname}/xxx.xml进行独立部署,最简单的方式是直接将要发布的应用放到webapps下。
三.tomcat启动
- 读取tomcat的配置文件,其中最重要的是server.xml
- 解析配置文件,对系统组件进行初始化,包括server,service,engine,connector,endpoint,可以参考server.xml文件文件的顺序
- 启动各种组件准备提供服务
- 在指定的端口开始监控请求
四.在server.xml文件中配置操作
- 首先我们先创建个新的虚拟主机,将虚拟主机的名字进行修改,在将虚拟主机对应的目录进行修改。
<Host name="localhost" autoDeploy="true" unpackWARs="true" appBase="webapps"></Hots>
<Host name="www.aq.com" appBase="mywebapps"
unpackWARs="true" autoDeploy="true">
- 在eclipse创建新的两个项目---->导出---->在tomcat安装目录下在新建一个文件夹,名为mywebapps---->将第一个项目放进webapps,第二个项目放进mywebapps--->点击startup.bat启动,我们在浏览器上来访问。
访问语句分别为:
- 第一个项目访问的路径为http://localhost:8080/Tomcat0201/
- 第二个项目访问路径为:http://www.aq.con:8080/Tomcat0201 但是无法访问成功
为什么访问不成功:
因为我们没有这个域名,因为域名是我们瞎起的,所以我们无法访问成功。因为他先会去系统的本地缓存里面查看有没有域名----->在去hosts文件里面是否定义对应该域名的IP地址---->在去找网关----->在去找公开的域名服务器,不存在。所以我们无法访问成功。
如何解决访问不成功:
我们去host文件中去定义域名:
先点击C盘----->windows------>System32----->drivers------>ect----->hosts
在hosts(要是管理员账号才能进入操作)输入127.0.0.1 www.aq.com 保存,就可以显示出来啦
注:
如果我们将域名改成www.baidu.com这种知名网站域名,我们的web项目可以进去,但是在去访问百度,就无法访问百度。
今天的学习就到这里啦。