Tomcat详解

Posted hgzero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat详解相关的知识,希望对你有一定的参考价值。

1. Tomcat简介

1.1 Tomcat的核心组件

  • catalina:servlet container(servlet的容器)
  • Coyote:http connection(http连接器)
  • Jasper:JSP Engine(jsp引擎,jsp翻译器)

注意:

  • Tomcat的开发语言:JAVA
  • Tomcat要运行在JVM上,而对于JDK而言,它的JVM程序名就叫做 java
    • 所以启动tomcat之后发现不了tomcat运行在哪,tomcat体现为一个java进程
    • 这个java进程不过在运行时装载了tomcat的一些代码而已

1.2 Tomcat Instance

  • Tomcat Instance:运行中的tomcat进程(java进程)

1.2.1 Tomcat实例

  • Server:一个tomcat实例(tomcat instance),运行中的tomcat进程(java进程)
  • Service:用于将connector关联至engine组件,一个service只能包含一个engine组件和 一个或多个connector组件
  • Engine:Tomcat的核心组件,用于运行jsp或servlet代码(整个jsp代码的运行都要靠Engine来实现)
  • Connector:
    • 接受并解析用户请求,将请求映射为Engine中运行的代码,之后,将运行结果构建成响应报文响应给客户端
    • http,ajp
  • Host:类似httpd中的虚拟主机
  • Context:类似于httpd中的alias

1.2.2 各个组件

每个组件都由“类”来实现,有些组件的实现还不止一种

  • 顶级类组件:server
  • 服务类组件:service
  • 容器类组件:即可以部署webapp的组件,engine,host,context
  • 连接器组件:connector
  • 被嵌套类组件:valve,logger,realm
<server>    <service>
            <connector />
            <connector />
            ...
            <engine>
                    <host>
                            <context />
                            ...
                    </host>
                    ...
            </engine>
    </service>
</server>

1.3 Tomcat的运行模式

1.3.1 standalone

  • 通过内置的web server(http connector)来接收客户端请求

1.3.2 proxy

  • 由专门的web server服务客户端的http请求
  • 其实就是在tomcat前面加一个nginx,然后由nginx将动态请求反代至tomcat
    • ip-process:部署于同一台主机
    • network:部署于不同主机

2. Tomcat的安装配置&webapp的部署

2.1 Tomcat的安装和启动

安装JDK:

  • 安装JDK:
    • Oracle JDK
    • OpenJDK
    • 可以直接yum安装或者在官网下载rpm包安装
  • 关于JDK的位置:
    • /usr/bin/java -> /etc/alternatives/java
      /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java
  • 配置环境变量:
    • vim /etc/profile.d/java.sh
      # openjdk1.8的路径是/usr/lib/jvm/java/bin
              export JAVA_HOME=/usr/java/latest
              export PATH=$JAVA_HOME/bin:$PATH  

安装Tomcat:

  • 下载rpm包安装或者yum安装(Tomcat7)
  • 安装后将tomcat的位置添加到环境变量中:
    • vim /etc/profile.d/tomcat.sh        
              export CATALINA_HOME=/usr/share/tomcat
              export PATH=$CATALINA_HOME/bin:$PATH
  • 如果是二进制包安装,最好将其安装到/usr/local路径下,且做好软链接

启动Tomcat:

  • bin/catalina.sh
    • start
    • start -security 安全模式下驱动tomcat,读取conf/catalina.policy的策略,并启动tomcat
    • stop 停止服务(默认是等待5秒后停止)
    • stop -n 可以指定等待n秒之后再停止
    • stop -force 强制停止服务
    • configtest 测试配置文件
    • version 显示版本
    • debug 在debugger中运行
  • 现在在CentOS7上可以直接用systemctl来运行

2.2 Tomcat目录结构和配置文件

Tomcat目录结构:

  • bin:脚本及启动时用到的类
  • lib:类库
  • conf:配置文件
  • logs:日志文件
  • webapps:应用程序默认部署目录
  • work:工作目录
  • temp:临时文件目录

Tomcat的配置文件:

  • server.xml:主配置文件
  • context.xml:
    • 每个webapp都可以有专用的配置文件,
    • 这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器,JDBC等
    • conf/context.xml是为各webapp提供默认配置
  • web.xml:
    • 每个webapp部署之后才能被访问,此文件则用于为所有的webapp提供默认部署相关的配置
  • tomcat-users.xml:
    • 用于认证的账号和密码配置文件
  • catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略
  • catalina.properties:Java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数
  • logging.properties:日志相关的配置信息

2.3 webapp部署

2.3.1 Java WebAPP简介

Java WebAPP组织结构:

有特定的组织形式、层次性的目录结构,主要包含了servlet代码文件,JSP页面文件、类文件、部署描述符文件等

  • /usr/local/tomcat/webapps/app1/(若是yum安装的tomcat,这时的路径为:/usr/share/tomcat/webapps/app1
    • / :webapp的根目录
    • WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml
    • META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml
    • classes/:此webapp的私有类
    • lib/:此webapp的私有类,被打包为jar格式类
    • index.jsp:webapp的主页
    • 还可以有一些其他的目录用以存放如图片等资源
  • webapp归档格式:
    • .war:webapp
    • .jar:EJB的类
    • .rar:资源适配器
    • .ear:企业级应用程序

部署(deployment)webapp的相关操作:

  • deploy:一个应用程序只有被部署以后才被被访问
    • 部署:
      • 将webapp的源文件放置于目标目录,并配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp
      • 将其特有类通过class loader装载至tomcat
    • 部署的两种方式:
      • 自动部署:auto deploy
      • 手动部署:
        • 冷部署:把webap复制到指定位置,而后才启动tomcat
        • 热部署:
          • 在不停止tomcat的前提下进行的部署
          • 需要通过部署工具进行,如manager、ant脚本、tcd(tomcat client deployer)等
  • undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名
  • stop:停止,不再向用户提供服务
  • start:启动处于“停止”状态的webapp
  • redeploy:重新部署

2.3.2 简单部署webapp

创建webapp特有的目录结构

  • 在/usr/share/tomcaat/webapps下:
    • mdir -pv myapp/{lib,classes,WEB-INF,META-INF}
  • 如果每个app没有自己的配置文件,就会从conf下继承web.xml和context.xml

提供webapp的主页文件:

vim  myapp/index.jsp
        <%@ page language="java" %>
        <%@ page import="java.util.*" %>
        <html>
                <head>
                        <title>JSP Test Page</title>
                </head>
                <body>
                        <% out.println("hello world."); %>
                </body>
        </html>

2.3.3 Tomcat自带的应用程序

  • manager app:webapp管理工具
  • host manager:Virtual Hosts管理工具

配置manager:conf/tomcat-users.xml

vim  conf/tomcat-users.xml
        <role  rolename="manager-gui"/>
        <user username="tomcat"  password="hgzero" roles="manager-gui"/>
        # 注意:修改这个文件不会立即生效,因为tomcat在启动时会将这个文件读取到内存中,因此只有重启

配置host manager

vim  conf/tomcat-users.xml
        <role  rolename="manager-gui"/>
        <role  rolename="admin-gui"/>
        <user username="tomcat"  password="hgzero" roles="manager-gui,admin-gui"/>

3. Tomcat核心组件详解

 

以上是关于Tomcat详解的主要内容,如果未能解决你的问题,请参考以下文章

详解Android WebView加载html片段

Tomcat 项目代码上线步骤详解

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

Tomcat与IIS集成详解

Tomcat基础详解

Tomcat使用详解