摘要:一、Tomcat的组成和架构 1、Tomcat目录结构 bin,可执行文件 conf,配置文件 lib,Tomcat的依赖库,web应用依赖的包也可放这里 logs,Tomcat默认存放日志位置 temp,临时文件夹 webapps,默认应用部署目录 work,供web应用使用,例如jsp编译成的servlet就放这里 2、JVM启动参数 环境变量JAVA_OPT
bin,可执行文件
conf,配置文件
lib,Tomcat的依赖库,web应用依赖的包也可放这里
logs,Tomcat默认存放日志位置
temp,临时文件夹
webapps,默认应用部署目录
work,供web应用使用,例如jsp编译成的servlet就放这里
2、JVM启动参数
环境变量JAVA_OPTS
-server –Xms512m –Xmx512m
Xms初始堆,
Xmx最大堆内存,受限于物理内存
一般让两者一样
3、Tomcat架构与配置文件
server.xml配置结构如下:
<Server> <Service> <Connector> </Connector> <Engine> <Host> <Context> </Context> </Host> </Engine> </Service> </Server>
tomcat结构图如下(侵权删):
从里面到Service这一层可以称作Container
Server服务器下可以有多个Service
Service:可以配置多个
Connector:接收用户请求的,可以配置多个
Connector的实现:Coyote,默认BIO Connector阻塞式IO,java传统IO
Engine:是处理Connector接收到的请求,java代码由他处理
Host:虚拟主机
Context:一个Context就是一个应用
Web应用:Context和Web应用可以画等号
Container:由Catalina实现。
Catalina也是Tomcat中实现容器的组件,用来执行Web应用
4、请求处理流程
客户端发出请求,Connector负责解析请求,然后交给Container处理,Container处理请求,例如获取资源,然后让Connector返回相关内容。
二、Tomcat的Connector和线程池配置 1、Connector参数配置
port:端口号
address:服务器上的IP不止一个,如果不配置,默认监听所有地址,可以通address指定监听哪些地址
protocol:协议,默认http1.1
connectionTimeout:连接超时时间,默认单位毫秒
acceptCount:如果系统没有空闲线程能处理请求,请求就要排队,排队默认值100,超过的就不处理了。
maxConnections:支持最大连接数,与线程池有关,-1表示不限制
2、 线程池和线程池配置事先创建一定数目的线程,当有任务的时候,从池中取出使用,用完就放回池中。
Tomcat中使用的是弹性线程池。
minSpareThreds:最小空闲线程数
maxThreads:最大线程数
配置方式:
1、线程池配置项<Executor>
minSpareThreads
maxThreads
2、Connector配置线程池
1)指定依赖的线程池配置,即指定依赖<Executor>
2)直接指定线程池配置参数,在Connector中配置minSpareThreads,maxThreads
3、curl和telnet连接可以用这两种方式发出请求
三、Tomcat的日志和配置和war包部署 1、tomcat的日志分类
系统运行日志
访问日志:在server.xml中配置
应用日志
2、部署方式先将项目有打成war包
放置在webapps目录下
启动tomcat
可以看见war包已经被解压在webapps目录下
四、基本配置示例
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> </GlobalNamingResources> <Service name="Catalina"> <!-- Executor线程池配置项,maxThreads最大线程数,minSpareThreds最小空闲线程数 --> <Executor name="myThreadPool" namePrefix="catalina-exec-" maxThreads="120" minSpareThreads="4" /> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 --> <!-- connectionTimeout单位毫秒,port访问端口号,executor="myThreadPool"设置Connector使用名字叫myThreadPool的线程池配置 当然也可以直接在Connector中直接配置线程池选项maxThreads和minSpareThreads,但是最好配置成线程池配置项,方便多个Connector依赖 --> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" executor="myThreadPool" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine defaultHost="localhost" name="Catalina"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <!-- directory日志输出路径,可以配置相对路径(相对于tomcat安装的根路径),也可以配置绝对路径 prefix日志文件前缀 suffer日志文件名字 pattern日志格式,下面是tomcat默认日志格式 pattern具体看tomcat文档,这里给出一部分 %m是请求方法 %a是ip %t是时间 %s是状态码 %b是服务端下发字节数 %{User-Agent}i是发起请求的客户端 fileDateFormat="yyyy-MM-dd."时戳 rotatable="true"按照fileDateFormat时戳的改变进行日志滚动(日志切分) --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt" /> <Context docBase="mall" path="/mall" reloadable="true" source="org.eclipse.jst.jee.server:mall" /> </Host> </Engine> </Service> </Server>
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28