Tomcat 配置与用法
简介:Tomcat是Apache下开源的轻量级Web应用服务器,即一个JSP/Servlet容器,Tomcat作为应用程序服务器——请求来自于前端的web服务器,比如Nginx、Apache等,Tomcat作为独立服务器——请求来自于web浏览器;
一、基础知识
1. Tomcat目录介绍
A. /bin:存放启动和关闭Tomcat脚本;
B. /conf:存放各种的配置文件,server.xml、web.xml和context.xml等;
C. /lib:存放Tomcat运行时需要的库文件;
D. /webapps:存放Web发布的应用程序;
E. work:存放jsp编译后产生的.calss文件;
2. Tomcat处理HTTP请求过程
示例:http://localhost:8080/wsota/wsota_index.jsp
A. 请求被发送到本机端口8080上,被在那里侦听的Coyote HTTP/1.1 Connector获得,Connector的主要任务是负责接收浏览器发过来的TCP连接请求,创建一个Request和Response对象,用于和请求端交换数据,然后产生一个线程来处理这个请求并把产生的Request和Response对象传给处理这个请求的线程;
B. Connector连接器把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应;
C. Engine获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host;
D. Engine匹配到名为localhost的Host,若匹配不到就把请求交给默认Host处理;
E. localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context;
F. Host匹配到路径为/wsota的Context,如果匹配不到就把该请求交给路径名为”"的Context去处理;
G. path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet;
H. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类;
I. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法;
J. Context把执行完了之后的HttpServletResponse对象返回给Host;
K. Host把HttpServletResponse对象返回给Engine;
L. Engine把HttpServletResponse对象返回给Connector;
M. Connector把HttpServletResponse对象返回给客户browser。
3. 作为Servler容器的工作模式分类
A. 独立的Servlet容器;
B. 进程内的Servlet容器;
C. 进程外的Servlet容器。
二、servlet.xml配置文件
1. 组织结构
<Server>
<Service> <Connector/> <Engine> <Host> <Context/> </Host> </Engine> </Service> </Server>
2. Server组件
A. 是唯一顶层元素,代表整个Tomcat容器,Tomcat会启动一个JVM,可包含多个Service元素,不同的Service监听不同的端口;
B. 作用是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service;
C. shutdown属性表示关闭Server的指令,port属性表示Server接收关闭指令的端口号,默认仅允许通过本机访问。
<Server port="8005" shutdown="SHUTDOWN">
3. Service组件
A. 是把Connector连接器和Engine引擎关联在一起,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理;
B. Service可以包含多个Connector连接器,但是只能含一个Engine引擎;
C. name属性表示服务的名称。
<Service name="Catalina">
4. Connector组件
A. 将在某个指定端口上侦听客户请求,创建Request和Response对象用于和请求端交换数据,然后分配线程让Engine来处理这个请求,从Engine处获得回应并返回客户;
B. Connector连接器分为HTTP、SSL、AJP、PROXY四种;
C. port属性表示监听的端口
protocol属性表示连接器使用的协议,默认的协议为HTTP,使用的协议与Tomcat版本有关,默认协议HTTP/1.1,含义如下:在Tomcat7中,自动选取BIO或APR,在Tomcat8中,自动选取NIO或APR
acceptCount:accept队列的长度,默认值100,当连接的个数达到最大值,则进来的请求一律被拒绝
maxConnections:Tomcat在任意时刻接收和处理的最大连接数,当Tomcat接收的连接数达到maxConnections时,Acceptor线程不会读取accept队列中的连接;这时accept队列中的线程会一直阻塞着,直到Tomcat接收的连接数小于maxConnections
maxThreads:请求处理线程的最大数量,默认值200,如果该Connector绑定了Executor,这个值会被忽略;
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
5. Engine组件
A. Engine是Service组件中的请求处理组件,有且仅有一个,可以包含多个Host,每个虚拟主机都有一个域名;
B. 当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理,若没有匹配到,则交给默认的Host处理;
C. defaultHost属性指定了默认的host名称,name属性用于日志和错误信息记录时区分不同的引擎;
<Engine defaultHost="localhost" name="Catalina">
6. Host组件
A. Host代表引擎中的一个虚拟主机,可以有多个Host,可包含多个 Context,其中一个name属性值必须与Engine中defaultHost属性值匹配;
B. 可运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用;
C. appBase属性表示此Host的webapps目录;
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
7. Context组件
A. Context代表在特定虚拟主机上运行的一个Web应用,一个Web应用由一个或多个Servlet组成;
B. Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类,当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类,如果找到,则执行该类,获得请求的回应,并返回;
C. docBase属性表示相应的Web应用程序的存放位置,path属性表示相对于Web服务器根路径而言的URI,reloadable属性表示是否允许重新加载此context相关的Web应用程序的类,默认为false。
<Context docBase="G:\eclipse\workspace\rhxy\src\main\webapp" path="/rhxy" reloadable="false"/></Host>
三、Tomcat虚拟目录映射
1. 定义:虚拟目录映射是指若想对外提供Web应用访问,就需要把Web应用所在目录交给Web服务器管理的过程;
2. 映射方式
A. 在server.xml文件的host元素中配置context元素,缺点是文件修改后,需要重启服务器才会生效;
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" <Context docBase="G:\eclipse\workspace\web\src\main\webapp" path="/web" reloadable="false" />
</Host>
B. 利用Tomcat服务器的自动映射,只需要把项目放入到webapps目录下,它会自动管理webapps目录下的所有web应用;
C. 在Tomcat服务器的/conf/Catalina/localhost目录下添加一个以.xml作为扩展名的文件,优点是修改配置文件后,不用重启Tomcat;
<?xml version="1.0" encoding="UTF-8"?> <Context path="" docBase="G:\idea\web\src\main\webapp\WEB-INF\classes" reloadable="false" />
3. Web应用组成结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2019-09-03 JavaScript DOM对象的事件