Tomcat

1.tomcat安装

tomcat版本:apache-tomcat-9.0.52.tar.gz

jdk版本:jdk-16.0.2_linux-x64_bin.tar.gz

1.1 jdk安装

#将jdk解压到/usr/local目录下
[root@node2 ~]# tar -xf jdk-16.0.2_linux-x64_bin.tar.gz -C /usr/local/

#将文件夹重新命名
[root@node2 ~]# mv /usr/local/jdk-16.0.2 /usr/local/jdk

#将变量写入/etc/profile文件中
[root@node2 ~]# cat >> /etc/profile << EOF
> export JAVA_HOME=/usr/local/jdk
> export PATH=.:$JAVA_HOME/bin:$PATH
> export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
> EOF

#使用source /etc/profile 命令使环境变量生效
[root@node2 ~]# source /etc/profile

#查看jdk是否安装转成功
[root@node2 ~]# java -version
java version "16.0.2" 2021-07-20
Java(TM) SE Runtime Environment (build 16.0.2+7-67)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)

1.2 tomcat 安装

#将tomcat安装包解压到/usrlocal/目录下
[root@node2 ~]# tar -xf apache-tomcat-9.0.52.tar.gz -C /usr/local/

#将apache-tomcat-9.0.52重命名为tomcat
[root@web-03 local]# mv apache-tomcat-9.0.52/ tomcat

#启动tomcat
[root@web-03 local]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

配置tomcat自启动的service文件

[Unit]
Description=tomcat
After=network-online
Wants=network-online.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=CATALINA_BASE=/usr/local/tomcat

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

#执行systemctl daemon-reload
#启动systemctl start tomcat

访问Ip:8080 查看界面

Tomcat

 

 显示此界面即安装成功

tomcat的文件结构和组成

目录 说明
bin 服务启动、停止等相关
conf 配置问价
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录
work jsp编译后的结果文件,建议提前预热访问

 

 

 

 

 conf下的配置文件

文件名 说明
server.xml 主配置文件
web.xml

每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/

目录中,此文件为所有的webapps提供默认部署相关的配置

context.xml 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自己专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中
tomcat-users.xml 用户认证的账号和密码文件
catalina.policy

当使用security选项启动tomcat时,用于为tomcat设置安全策略

catalina.properties

Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数

logging.properties

 Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等

 

上下文描述符文件位于:

  $CATALINA_BASE为tomcat安装的目录

1.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml 2.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

1.3 tomcat 组件

*组件

Server,代表整个tomcat容器,一台主机可以启动多个tomcat实例,需要确保端口不冲突

服务类组件

Service,组织Engine和Connector,里面只能包含一个Engine

连接器组件

Connector.有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于tcp的二进制通讯协议

容器类

Engine、Host(虚拟主机)、Context都是容器类组件,可以嵌入其他组件,内部配置如何运行应用程序

内嵌类

可以内嵌到其他组件内,valve、logger、realm、loader、manager等。

集群类组件

listener、cluster

Tomcat

 

名称 说明
Server 服务器,tomcat运行的进程实例,一个Server中可以有多个Service,但通常只有一个
Service 服务,用来组织Engine和Connector的关系,一个Service中只有一个Engine
Connector 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine 用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host 虚拟主机
Context 应用的上下文,配置特定url路径映射和目录的映射关系:url=>directory

 

1.4 核心组件

tomcat 启动一个Server进程。可以启动多个Server,但一般只启动一个

创建一个Service提供服务。可以创建多个Service,但一般页支创建一个,每个Service中,是Engine和其他连接器Connector的关联配置

可以为这个Server提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同连接请求或响应

Service内部定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host

Host定义虚拟主机,虚拟主机有name名称,通过名称匹配

Context定义应用程序单独的路径映射和配置

多个组件关系如下:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>

1.5 tomcat处理请求的过程

假设来自客户端的请求为:http://localhost:8080/yang/inex.jsp

浏览器的请求被发送到服务端8080,tomcat监听在此端口上。通过监听的HTTP/1.1Connector获得此请求

Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应

Engine获得请求locahost:8080/yang/index.jsp,匹配它所有虚拟主机Host

Engine匹配到名为localhost的Host,即使匹配不到也把该请求交给该Host处理,因为该Host被定义为该Engine的默认主机

localhost  Host获得请求/index.jsp 匹配它所拥有的所有Context

Host匹配到路径为/yang的Context

path=/yang的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet

Context匹配到URL PATTERN为*.jsp的servlet,对应于jspServlet类构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法

Context 把执行完了之后的HttpServletResponse对象返回给Host

Host 把HttpDervletResponse对象返回给Engine

Engine把HttpServletResponse对象返回给Connector

Connector把HttpServletResponse对象返回给浏览器端

1.6 tomcat应用部署

tomcat中默认的网站根目录是$CATALINA_BASE/webapps/

在tomcat的webapps目录中,有个非常特殊的目录ROOT,他就是网站的根目录

假设要部署应用eshop、forum,将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中

forum解压后文件都放在$CATALINA_BASE/webapps/forum目录下

最终网站的链接关系如下

http://localhost/ 对应于eshop应用,即$CATALINA_BASE/webapps/ROOT目录

http://localhost/forum/ 对应于forum应用,即$CATALINA_BASE/webapps/forum/

如果同时存在$CATALINA_BASE/webapps/ROOT/forum/,仍以$CATALINA_BASE/webapps/forum优先生效

每一个虚拟主机的目录都可以使用appBase配置自己的站点目录,里面都可以使用appBase目录下的ROOT目录作为主站目录

1.7 JSP WEBAPP 目录结构

主页配置:默认按以下顺序查找主页文件index.html,index.htm,index.php

WEB-INF/:当前webapp的私有资源路径,通常存储当前应用的web.xml和context.xml配置文件

META-INF/:类似于WEB-INF也是配置信息,浏览器无法访问

classes/: 类文件,当前webapp需要的类

lib/:当前应用用来的jar包

修改默认主配置文件

/usr/local/tomcat/webapps/ROOT/下添加一个index.html文件
#将tomcat重启之后,用curl 命令进行访问 [root@web-03 ROOT]# echo "tomcat index.html" >> index.html [root@web-03 ROOT]# curl localhost:8080 tomcat index.html

#web.xml首页访问顺序如下
<welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

修改webapp的专用配置文件

将conf/web.xml中的<welcome-file-list>标签内容,复制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中

cat  /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

配置规则

  webApp的专有配置优先于系统的全局配置

  修改系统的全局配置文件,需要重新启动服务生效

  修改 webApp的专有配置,无需重启即可生效

应用通常打包为war格式,应用部署到tomcat的webapps目录下,还可以自动展开

server.xml的文件配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

 1.8 tomcat常见配置详解

conf/server.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <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>
      <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>
    </Engine>
  </Service>
</Server>
8005 是tomcat的管理端口,默认监听在127.0.0.1,无需验证,就可以发送SHUTDOWN这个字符串,tomcat接收到后就会关闭此Server
建议禁用,改SHUTDOWN为一串猜不出的字符串例如:
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">

conf/server.xml中可以配置service,connector,Engine,Host等

service配置:一般情况下,一个Server实例配置一个Service,name属性相当于Service的ID

 

例:<Service name="Catalina">

 

连接器配置:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
#redirectPort,如果访问HTTPS协议,自动转向这个连接器,大多数时候,tomcat不回开启https

引擎配置:

<Engine name="Catalina" defaultHost="localhost">

defaultHost 配置

 

defaultHost指向内部定义某虚拟主机。缺省主机可以改动,默认localhost

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

 

上一篇:.net core中不适用构造函数注入对象


下一篇:2021-09-22