tomcat安装与部署

109 阅读6分钟

Tomcat

  • tomcat是一个免费开源的web应用服务器。
  • Apache软件基金会的核心项目,受Java爱好者的喜爱
  • Tomcat通常作为一个servlet和jsp容器,单独运行在后端;
  • Tomcat不适合于运行静态页面
  • Tomcat不能直接启动,通过Java代码运行,写的是Java语言

Tomcat核心组件

  • web容器:完成web服务器的功能

  • servlet容器:名字为Catalina,用于处理servlet代码;Java代码无法直接执行或调用,需要翻译成可直接执行的代码格式----->servlet格式

  • jsp容器:用于将jsp动态网页翻译成servlet代码

    • 容器,就是一个功能集合的个体
    • Java代码无法直接执行或调用,需要翻译成可直接执行的代码格式----->servlet格式

Tomcat功能组件结构

Tomcat的核心功能有两个:

  • connector对外进行连接和监听

    • 连接器:Java
  • container对内进行管理

connector

负责外部接收和响应请求。他是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

container

负责对内处理业务逻辑,其内部由engine、host、context和wrapper四个容器组成,用于管理和调用servlet相关逻辑

container结构分析

每个service会包含一个container容器。在container内部包含了四个子容器

  1. engine:引擎,用来管理多个虚拟主机,一个service,最多只能有一个engine
  2. host:代表一个虚拟主机,也可以叫站点,通过配置host就可以添加站点
  3. context:代表一个文本应用,包含多个servlet封装器
  4. wrapper:封装器,容器的最底层。每一个wrapper封装一个servlet,负责对象示例的创建、执行和销毁功能

service

对外提供的web服务。主要包含connector和container两个核心组件,以及其他功能组件。Tomcat可以管理多个service,且各service之间相互独立

Tomcat请求过程

当用户在浏览器中输入网址,请求被发送到本机端口8080,并在哪里监听的connector获得 connector把该请求交给他所在的service的engine(container)来处理,并等待engine的回应 请求在engine、host、context和wrapper这四个容器之间层层调用,最后在servlet中执行对应的业务逻辑、数据存储等 执行完之后的请求响应在context、host、engine容器之间层层返回,最后返回给connector,并开通connector返回给客户端

主进程

Tomcat不是主进程,是由多个线程组成

Tomcat主进程是JDK

查看Tomcat主进程:

  • netstat natp | grep tomcat

或者

  • netstat natp | grep 8080

操作和安装Tomcat

cd /opt
#切换目录,将安装包下载到opt目录中
rpm -ivh jdk-8u201-linux-x64.rpm
#安装JDK的
cd /usr/java/jdk1.8.0_201-amd64/
#切换目录
vim /etc/profile.d/java.sh
#设置JDK环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile.d/java.sh
#刷新设置的JDK环境变量
java -version
#查看Java的版本

image.png

image.png

image.png

image.png

测试JDK有没有安装成功

编辑一个Java文件,测试JDK安装是否成功
vim zly.java
#编译一个名为zly的java文件
public class zly {			
  public static void main(String[] args){
    System.out.println("treat or trick!");
  }
}

javac zly.java
java zly

image.png

1668424800621.jpg

拓展

  • 类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
  • 一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)

安装启动Tomcat

cd /opt
#切换目录,将Tomcat的安装包下载到opt目录
tar zxvf apache-tomcat-9.0.16.tar.gz
#解压Tomcat压缩包到当前目录
mv apache-tomcat-9.0.16 /usr/local/tomcat
#将Tomcat文件移动到/usr/local/tomcat目录下,本身是没有这个Tomcat的目录,移动进去时候可以自动创建

启动Tomcat
#后台启动,可以使用
/usr/local/tomcat/bin/startup.sh
或者
/usr/local/tomcat/bin/catalina.sh start
#前台启动
/usr/local/tomcat/bin/catalina.sh run
#查看端口,Tomcat的端口是8080
netstat -natp | grep 8080

最后浏览器访问http://192.168.42.13:8080
访问本机地址+端口查看有没有启动Tomcat

image.png

image.png

image.png

Tomcat虚拟主机配置

很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。 例如现在新增两个域名 www.zly.comwww.zly2.com, 希望通过这两个域名访问到不同的项目内容。

思路

1.创建zly和zly2项目目录和文件

mkdir /usr/local/tomcat/webapps/zly
mkdir /usr/local/tomcat/webapps/zly2

#在文件夹里面创建一个jsp文件
echo "This is kgc page\!" > 
/usr/local/tomcat/webapps/zly/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/zly2/index.jsp

image.png 2.修改Tomcat主配置文件server.xml

vim /usr/local/tomcat/conf/server.xml
#在165行前插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

可以将165行的-----给删除,添加上新的内容

image.png

image.png

解释:

Host

name:主机名
  • appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
  • unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
  • autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
  • xmlValidation:是否验证xml文件执行有效性检验的标志
  • xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
Context
  • docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
  • path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
  • reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false

3.重新启动Tomcat

/usr/local/tomcat/bin/shutdown.sh
#关闭Tomcat
/usr/local/tomcat/bin/startup.sh
#开启Tomcat

4.验证

echo "192.168.80.100 www.zly.com www.zly2.com" >> /etc/hosts
#给ip设两个域名,存放在域名的配置文件
- 用浏览器访问 http://www.zly.com:8080,
  就会显示出:This is zly page\! 
- 访问 http://www.zly2.com:8080
  会显示:This is zly2 page\!

image.png

image.png

image.png

http请求过程

  1. Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
  2. 因为引擎的默认虚拟主机是 www.kgc.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
  3. (访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录,解析 index.jsp 并返回。