Loading

了解Tomcat并部署(一)

1. 了解java的运行过程

不管是什么平台,只要实现了JAVA运行环境(JRE),运行JAVA程序时都能达到一样的效果(JRE由JVM和API构成。)。java源文件(.java)通过javac编译器生成字节码文件(.class),字节码文件(.class)通过JVM(Java虚拟机)中的解释器再翻译成特定机器上的机器码,然后在特定的机器上运行。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。

Java程序运行流程


Java 解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,以便执行。因此 Java 程序不能直接运行在现有的操作系统平台上,它必须运行在被称为 Java 虚拟机的软件平台之上。

Java 虚拟机(JVM)是运行 Java 程序的软件环境,Java 解释器是 Java 虚拟机的一部分。在运行 Java 程序时,首先会启动 JVM,然后由它来负责解释执行 Java 的字节码程序,并且 Java 字节码程序只能运行于 JVM 之上。

Java 程序通过 JVM 可以实现跨平台特性,但 JVM 是不跨平台的。也就是说,不同操作系统之上的 JVM 是不同的,Windows 平台之上的 JVM 不能用在 Linux 平台,反之亦然。

Tips:只要在不同的计算机上安装了针对特定平台的 JVM,Java 程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。


2. 了解JVM、JRE、JDK

  • JVM:java 虚拟机中,运行java代码的地方
  • JRE:java Runtime Enviroment java运行环境,提供JVM环境,java命令
  • JDK:Java Development Kit java开发环境,JVM+JRE+额外功能...

image-20230328095806677

Tips:主要是通过部署JDK环境来运行,同时JDK也分为Open和Oracle版本,根据实际需求选择。


3. jsp与servlet

java将应用程序放在服务器端,客户端请求此应用程序时,服务端通过servlet类库分析http协议,将请求的应用程序在服务端执行,然后将结果组织起来返回给客户端,但此时servlet能分析的http协议非常简单,且和html的组织方式非常不友好,它要求java程序员首先得懂html开发(实际上现在还是如此,java程序员至少要懂简单的html/css/javascript等前端技术),于是后来出现了JSP类库。

JSP可以简单的将java代码嵌入在html文档中,它们能够很友好地结合,结合后的文档类型为.jsp文件。当客户端请求应用程序资源时,JSP类库负责解析.jsp文件中的jsp部分并通过jasper组件将其翻译成servlet的java源代码,然后再编译成class文件并交给JVM来执行。实际上,jsp的本就就是servlet,jsp类只不过是继承于servlet类并添加了一些和html友好结合的特性,最终它还是要翻译成servlet代码。

JSP的本质还是Servlet,每个JSP页面就是一个Servlet对象(当然也可能引用了其他servlet对象),Servlet再负责响应用户的动态请求数据(其实也包括静态数据,因为jasper翻译jsp代码时,静态标签也被翻译到servlet的java源文件中以待输出)。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。

tomcat可以处理动态请求,也可以处理静态资源请求。但无论是动态资源,还是静态资源的请求,都是经过servlet处理并响应给客户端的,只不过请求静态资源时使用的是默认的servlet。虽然它能像httpd和nginx一样处理静态资源,但显然,它既要处理动态请求,又要处理静态请求,压力会很大。因此tomcat前一般使用httpd或nginx专门处理静态请求,而动态请求则通过反向代理的方式代理至tomcat。


4. web服务器、web容器、应用程序服务器

web服务器提供web服务,主要处理http请求并响应给客户端,并可以将动态请求委托给其他程序,如cgi脚本、jsp脚本、asp脚本等进行处理。

web容器即servlet容器主要负责处理基于http请求的动态jsp内容。EJB容器主要提供和后端数据库服务、其他服务进行交互的功能。

应用服务器通常来说包括servlet容器或EJB容器,它们都运行于支持Java的应用服务器中,因此tomcat/weblogic/websphere/jboss都算是应用服务器。


5. 了解Tomcat

tomcat是JDK+servlet(严格地说是+jsp)实现的精简版的java EE,由于它只在JDK的基础上附加了jsp和servlet类库,所以它的应用范围主要是web应用。

它是一种应用程序服务器,只提供servlet容器,同时还提供apache解析静态HTML,只不过之它的处理能力不如独立的apache服务器。


对于tomcat来说,它高度模块化,通过各个组件实现各种功能。它的体系结构如下图所示:

img

  • server是顶级类,一个server算是一个tomcat实例,在此层次中可定义tomcat服务的监听端口。
  • service是server下的子组件,用于封装绑定connector和container,并为它们提供一个名称属性。有了service就可以提供相关的服务,如监听TCP连接请求、处理http请求。注意server是管理整个tomcat实例的层次,它和提供服务没有关系。
  • connector是连接器,定义http协议(默认)以及该协议的监听端口。连接器用于接收客户端请求并将container处理的数据返回给客户端
  • container称为容器,它和connector连接器进行绑定。该容器内有4个子容器,包括:engine容器、host容器、context容器、Wrapper容器。容器用于分析、处理请求,并构建响应给connector以发送给客户端。它和connector是tomcat的心脏组件。
  • engine容器定义servlet引擎,用于定义引擎的名称、默认的虚拟主机。引擎用于分析http请求并将请求转发给对应的虚拟主机。
  • host容器用于定义虚拟主机。
  • context容器用于定义webapp,一个context定义一个webapp。它是真正管理servlet容器的层次。
  • wrapper容器对应的是真正的servlet容器,一个wrapper代表一个servlet,它负责管理一个Servlet,包括的Servlet的装载、初始化、执行以及资源回收。Wrapper是最底层的容器,一个context只能包含一个wrapper。在配置文件中,无法配置该容器的属性。
  • 还有一些其他组件,如session管理组件、JMX等。

一个server可以有多个service。一个service可以有多个connector和唯一的container。container是容器类,从container层次开始,真正进入servlet容器相关的过程。它包含了唯一的engine容器,engine容器中包含了一个或多个host容器,host容器中包含了一个或多个context容器,context容器中包含了唯一的wrapper。它们的组织结构大致如下:

<server>
    <service>
        <connector />
        <engine>
            <host>
                <context />
                <context />
            </host>
            <host>
                <context />
            </host>
        </engine>
    </service>

    <service>
         ......
    </service>
</server>

6. 部署JDK环境

下面通过二进制包进行部署,先创建软件包存放目录、软件运行目录、创建软链接方便升级。(JDK下载点这

#创建软件包存放目录、软件运行目录
[root@web01 ~]# mkdir -p /server/soft
[root@web01 ~]# mkdir -p /app/tools

#上传软件包到soft目录,进行解压到指定目录
[root@web01 ~]# cd /server/soft/
[root@web01 soft]# tar xf jdk-8u60-linux-x64.tar.gz -C /app/tools/

#创建软链接
[root@web01 soft]# ln -s /app/tools/jdk1.8.0_60/ /app/tools/jdk

#查看
[root@web01 soft]# ll /app/tools/
total 0
lrwxrwxrwx 1 root root  23 Mar 27 22:55 jdk -> /app/tools/jdk1.8.0_60/
drwxr-xr-x 8   10  143 255 Aug  4  2015 jdk1.8.0_60

配置JAVA环境变量,一般是二进制安装需要配置,yum安装不需要

cat >>/etc/profile<<'EOF'
export JAVA_HOME=/app/tools/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
EOF

Tips:'EOF'是对下面的$不进行解析!


使环境变量生效并检查Java版本

[root@web01 ~]# source /etc/profile
[root@web01 ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

7. 部署Tomcat环境

下面也是通过二进制包进行部署,先把Tomcat软件包上传,解压到指定目录。下载地址点这!

#Tomcat软件包上传并解压到指定目录
[root@web01 ~]# cd /server/soft/
[root@web01 soft]# tar xf apache-tomcat-9.0.52.tar.gz -C /app/tools/

#创建软链接
[root@web01 soft]# ln -s /app/tools/apache-tomcat-9.0.52/ /app/tools/tomcat

#查看
[root@web01 soft]# ll /app/tools/
total 0
drwxr-xr-x 9 root root 220 Mar 27 23:17 apache-tomcat-9.0.52
lrwxrwxrwx 1 root root  23 Mar 27 22:55 jdk -> /app/tools/jdk1.8.0_60/
drwxr-xr-x 8   10  143 255 Aug  4  2015 jdk1.8.0_60
lrwxrwxrwx 1 root root  32 Mar 27 23:17 tomcat -> /app/tools/apache-tomcat-9.0.52/

检查检查tomcat版本信息,执行命令有内容即是OK

[root@web01 soft]# /app/tools/tomcat/bin/version.sh
Using CATALINA_BASE:   /app/tools/tomcat
Using CATALINA_HOME:   /app/tools/tomcat
Using CATALINA_TMPDIR: /app/tools/tomcat/temp
Using JRE_HOME:        /app/tools/jdk
Using CLASSPATH:       /app/tools/tomcat/bin/bootstrap.jar:/app/tools/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/9.0.52
Server built:   Jul 31 2021 04:12:17 UTC
Server number:  9.0.52.0
OS Name:        Linux
OS Version:     3.10.0-1160.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_60-b27
JVM Vendor:     Oracle Corporation

启动、关闭Tomcat

[root@web01 ~]# /app/tools/tomcat/bin/startup.sh
[root@web01 ~]# /app/tools/tomcat/bin/shutdown.sh

Tomcat不支持restart和reload!

image-20230328130950979


查看进程与端口信息

#进程信息
[root@web01 soft]# ps -ef | grep java
root      52035      1 16 01:07 pts/0    00:00:03 /app/tools/jdk/bin/java -Djava.util.logging.config.file=/app/tools/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /app/tools/tomcat/bin/bootstrap.jar:/app/tools/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tools/tomcat -Dcatalina.home=/app/tools/tomcat -Djava.io.tmpdir=/app/tools/tomcat/temp org.apache.catalina.startup.Bootstrap start
root      52061   2061  0 01:08 pts/0    00:00:00 grep --color=auto java

#端口信息
[root@web01 soft]# ss -lntup | grep java
tcp    LISTEN     0      1        [::ffff:127.0.0.1]:8005               [::]:*                   users:(("java",pid=52035,fd=63))
tcp    LISTEN     0      100    [::]:8080               [::]:*                   users:(("java",pid=52035,fd=55))

8. 了解Tomcat目录

8.1 主目录

目录 作用
bin 该目录存放Tomcat管理命令,jvm配置
conf 该目录存放Tomcat配置文件,主要是server.xml
lib 该目录存放库文件,Tomcat所需要的依赖文件
logs 日志文件目录
temp 临时文件目录
webapps Tomcat站点目录
work 该目录存放Tomcat加载代码的时候临时文件

8.2 bin目录

文件 作用
startup.sh 启动Tomcat
shutdown.sh 关闭Tomcat
catalina.sh startup.sh或shutdown.sh都会调用这个主脚本
未来修改jvm选项/参数,配置最大内存或其他选项

8.3 conf目录

文件 作用
server.xml Tomcat主配置文件
tomcat-users.xml Tomcat管理端的配置文件
logging.properties 日志功能
web.xml Tomcat本身配置,web功能配置。

8.4 logs目录

目录或文件 作用
localhost_access_log.2023-03-28.txt Tomcat访问日志
catalina.out 应用日志(启动时间,错误信息,启动流程),这个文件不会清空。
catalina.2023-03-28.log 应用日志的切割日志,每天切割。

8.5 webapps目录

目录或文件 作用
ROOT 站点目录,war包自动解压,自动部署。

posted @ 2023-09-17 10:23  YinJayChen  阅读(29)  评论(0编辑  收藏  举报