ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Tomcat

2022-04-23 18:00:34  阅读:182  来源: 互联网

标签:bin CATALINA Tomcat tomcat 线程 HOME 请求


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 &quot;%r&quot; %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 &quot;%r&quot; %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有三种部署方式分别是

  1. 直接把Web项目放在webapps下,Tomcat会自动将其部署
  2. 在server.xml文件上配置<Context>节点,设置相关的属性即可
  3. 通过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指定该目录进行分离的。

 

标签:bin,CATALINA,Tomcat,tomcat,线程,HOME,请求
来源: https://www.cnblogs.com/JoJo1021/p/16180588.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有