Tomcat组件
Tomcat是什么?
基于JavaEE规范的Servlet容器,主要作用就是处理网络请求,内部是基于面向组件开发的
Tomcat组件
Server:相当于服务器本身
Service:服务,在服务器可以存在多个
Connector:连接器,⽤于接收指定协议下的连接并指定给唯⼀的Engine 进⾏处理。
主要属性:
- maxConnections(最大连接数):同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads和acceptCount的和
- minThread(最小线程数):服务器启动时创建的处理请求的线程数
- maxThread(最大线程数):每一次HTTP请求到达web服务器,tomcat都会创建一个线程处理,最大线程数决定了tomcat同时处理请求的能力
- acceptCount (等待队列):指定当所有可以使⽤的处理请求的线程数都被使⽤时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
- minSpareThreads:始终保持运行的线程数
-
connectionTimeout(连接超时):一个socket创建连接后,如果一直没有收到服务器返回数据,将在此时间后将此连接释放. 默认值为60000毫秒
可通过共享线程池的使多个连接器共用一个线程池,减少开销。
<Executor name="myExecutor" maxThreads="5" minSpareThreads="2" namePrefix="luban-nio-"/>
Engine:引擎,将请求分配到对应虚拟机(host)上,每个Service只有一个。
Host:虚拟机,设定域名分发请求。
Context:上下文,相当于每个Web应用,每个Context的ClassLoad是独立的
<?xml version="1.0" encoding="UTF-8"?> <!--服务器--> <Server port="8005" shutdown="SHUTDOWN"> <!--这里的port是进行关闭tomcat的,作用不是很大--> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <!--服务:可以有多个--> <Service name="Catalina"> <!--连接器:通过连接器进入服务,可以设置多个--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!--引擎:一个服务只有一个引擎--> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!--站点:根据不同的路径访问不同程序的路径--> <!--appBase可以指定部署程序的路径,每个程序路径下面的项目可以称为Context--> <!--unpackWARs:war包自动解压,autoDeploy:自动部署,如果false静态文件修改就要重新启动tomcat--> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!--日志--> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.zzs.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!--Context:项目, www.zzs.com:8080/demo--> <Context path="demo" docBase="D:\tomcat\apache-tomcat-9.0.62\webapps\ROOT"> </Context> </Host> </Engine> </Service> </Server>
总结:顶层的Server有多个Service,每个Service有多个连接器(Connector),连接器接收指定的协议发送给唯一的(引擎)Engine,引擎将请求分配到对应的站点(host)上,站点根据域名进行分发请求,域名下所配置的Context路径就是web应用,web应用包含静态文件以及多个动态请求(Servlet)。
应用与部署目录的分离
tomcat有三种部署方式分别是
- 直接把Web项目放在webapps下,Tomcat会自动将其部署
- 在server.xml文件上配置<Context>节点,设置相关的属性即可
- 通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置
tomcat的启动参数
怎么将应用与部署进行分离呢?
- 创建一个部署目录
mkdir -p apps #创建日志目录 mkdir apps/logs mkdir apps/webapps
- 拷⻉ tomcat 中的 conf ⽬录⾄部署路径
cp -r apache-tomcat-9.0.50/conf apps/luban/
- 修改配置文件,主要修改端口号防止冲突
- 脚本启动后tomcat就会访问到CATALINA_BASE所指定的部署目录config文件,就相当于新建了一个子tomcat进行管理。
#!/bin/bash cd `dirname $0` export JAVA_OPTS="-Xms256m -Xmx512m" export CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.50 #可以通过软连接的方式指定一个目录,无缝切换tomacat版本 export JAVA_HOME=/root/svr/jdk/ export CATALINA_BASE="`pwd`" case $1 in start) $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; stop) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! ;; restart) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! sleep 3 $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; version) $CATALINA_HOME/bin/catalina.sh version ;; configtest) $CATALINA_HOME/bin/catalina.sh configtest ;; esac exit 0
ps:idea启动tomcat就是在Tomcat程序⽂件之外创建了⼀个部署⽬录通过CATALINA_BASE指定该目录进行分离的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报