<返回更多

瞅瞅,这还是你熟悉的Tomcat吗?

2022-07-08    java7794Vi
加入收藏
瞅瞅,这还是你熟悉的Tomcat吗?

 

一、Tomcat 架构概览

瞅瞅,这还是你熟悉的Tomcat吗?

 

1、Tomcat是什么?

Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annotations和 Jakarta Authentication 规范的开源实现 。这些规范是 Jakarta EE 平台的一部分。

tomcat是一个容器,用于承载Servlet,Tomcat就是实现了部分J2EE规范的服务器。

Jakarta EE是J2 EE的延续,其中Tomcat10以后都是Jakarta EE,Tomcat9以前都是都是J2EE。

2、Tomcat文件结构

2.1、目录和文件

2.2、启动类

  1. 找到tomcat下面bin目录
  2. 查看启动脚本,windowsstartup.bat,mac系统为startup.sh,内容不需要过多关注,直接查看最后一句
1.exec "$PRGDIR"/"$EXECUTABLE" start "$@"

2.EXECUTABLE=catalina.sh
if [ "$1" = "debug" ] ; then
  if $os400; then
    echo "Debug command not available on OS400"
    exit 1
  else
    shift
    if [ "$1" = "-security" ] ; then
      if [ $have_tty -eq 1 ]; then
        echo "Using Security Manager"
      fi
      shift
      eval exec ""$_RUNJDB"" ""$CATALINA_LOGGING_CONFIG"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" 
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" 
        -classpath "$CLASSPATH" 
        -sourcepath "$CATALINA_HOME"/../../java 
        -Djava.security.manager 
        -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy 
        -Dcatalina.base="$CATALINA_BASE" 
        -Dcatalina.home="$CATALINA_HOME" 
        -Djava.io.tmpdir="$CATALINA_TMPDIR" 
        org.apache.catalina.startup.Bootstrap "$@" start
    else
      eval exec ""$_RUNJDB"" ""$CATALINA_LOGGING_CONFIG"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" 
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" 
        -classpath "$CLASSPATH" 
        -sourcepath "$CATALINA_HOME"/../../java 
        -Dcatalina.base="$CATALINA_BASE" 
        -Dcatalina.home="$CATALINA_HOME" 
        -Djava.io.tmpdir="$CATALINA_TMPDIR" 
        org.apache.catalina.startup.Bootstrap "$@" start
    fi
  fi

 

2.3、xml文件

2.4、work目录

jsp最终是要转变为Servlet,而Servlet是一个java类,类是需要编译处理的,work目录就是用来保存jsp生成的Servlet文件

这个目录就是工作目录。

2.5、其他目录

3、Tomcat组件

3.1、server组件

server组件定义的是一个tomcat实例

<Server port="8005" shutdown="SHUTDOWN"></Server>

默认监听在8005端口以接收shutdown命令。

要启用多个tomcat实例,将它们监听在不同的端口即可。

这个端口的定义为管理员提供一个关闭实例的便捷途径,可以直接te.NET至此端口使用SHUTDOWN命令关闭此实例。不过基于安全角度的考虑,通常不允许远程进行。

3.2、service组件

service组件中封装connector和container由它们组成一个service向外提供服务

<Service name="Catalina"></Service>

3.3、Connection组件

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

连接器用于接收客户端发送的请求并返回响应给客户端。

一个service中可以有多个connector。有多种connector,常见的为http/1.1,http/2和ajp(apache jserv protocol)。在tomcat中,ajp连接协议类型专用于tomcat前端是apache反向代理的情况下。 因此tomcat可以扮演两种角色:

3.4、Engline组件

<Engine name="Catalina" defaultHost="localhost">
</Engine>
​
<Engine name="Standalone" defaultHost="localhost" jvmRoute="TomcatA">
</Engine>

engine是service组件中用来分析协议的引擎机器,它从一个或多个connector上接收请求,并将请求交给对应的虚拟主机进行处理,最后返回完整的响应数据给connector,通过connector将响应数据返回给客户端。

只有一个engine元素必须嵌套在每个service中,且engine必须在其所需要关联的connector之后

一个service中只允许有一个engine。

3.5、Host组件

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
</Host>

host容器用来定义虚拟主机。

engine从connector接收到请求进行分析后,会将相关的属性参数传递给对应的(筛选方式是从请求首部的host字段和虚拟主机名称进行匹配)虚拟host进行处理。

如果没有合适的虚拟主机,则传递给默认虚拟主机。

因此每个容器中必须至少定义一个虚拟主机,且必须有一个虚拟主机和engine容器中定义的默认虚拟主机名称相同。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>