Tomcat的简介及安装部署详细过程

本文介绍了Tomcat的基本概念,包括其作为免费开源的Web应用服务器的角色,以及在中小型系统中的广泛应用。文章详细阐述了Tomcat的组件,如Connector和Container,并解析了请求处理流程。同时,提供了详细的Tomcat安装部署步骤,包括下载JDK、安装Tomcat以及熟悉关键配置文件。最后,讨论了如何配置虚拟主机,包括基于端口和域名的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是tomcat

1.1 tomcat简介

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

1.2 tomcat核心组件

在这里插入图片描述

1.3 tomcat处理请求的过程

请求过程
在这里插入图片描述
connector:连接器

一个Connector组件将在某个指定的端口上侦听客户请求,接收浏览器发过来的tcp连接请求,创建一个Request和一个Response对象分别用于和其你去端交换数据,然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给Engine,从Engine中获得响应并返回给客户端。 Tomcat有两个经典的Connector,一个直接侦听来自浏览器的HTTP请求,另外一个侦听来自其他的WebServer的请求。Cotote HTTP/1.1 Connector在端口8080处侦听来自客户浏览器的HTTP请求,Coyote JK2 Connector在端口8009处侦听其他WebServer的Servlet/JSP请求。 Connector 最重要的功能就是接收连接请求然后分配线程让 Container来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心。

container:容器

Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet则定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。 Context定义在父容器 Host 中,其中Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。

engine:引擎

Engine 容器比较简单,它只定义了一些基本的关联关系 Host 容器

host:虚拟主机

Host 是 Engine 的字容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息

context:JSP前段页面

Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的

servlet:处理代码

详细步骤:

  • 1.用户在浏览器中输入网址localhost:8080/test/index.jsp,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;

  • 2.Connector把该请求交给它所在的Service的Engine(Container)来处理,并等待Engine的回应;

  • 3.Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;

  • 4.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);

  • 5.path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类;

  • 6.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等;

  • 7.Context把执行完之后的HttpServletResponse对象返回给Host;

  • 8.Host把HttpServletResponse对象返回给Engine;

  • 9.Engine把HttpServletResponse对象返回Connector;

  • 10.Connector把HttpServletResponse对象返回给客户Browser

二、tomcat安装部署步骤

2.1 下载并安装JDK

  • 1、JDK是Java语言的软件开发工具包
  • 2、JDK是Tomcat运行的必要环境
  • 3、根据计算机硬件配置,选择安装包
[root@server1 opt]# tar zxf jdk-8u91-linux-x64.tar.gz
[root@server1 opt]# mv jdk1.8.0_91/ /usr/local/java
[root@server1 opt]# cd /etc/profile.d/

[root@server1 profile.d]# vim java.sh
export JAVA_HOME=/usr/local/java ###设置java根目录
export PATH=$PATH:$JAVA_HOME/bin ###在PATH环境变量中添加JAVA根目录下的bin子目录
[root@server1 profile.d]# source java.sh ###java.sh脚本导入到环境变量中,使其生效

[root@server1 ~]# java -version ###查看版本
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

2.2 安装并启动tomcat

[root@server1 opt]# tar zxf apache-tomcat-8.5.16.tar.gz
[root@server1 opt]# mv apache-tomcat-8.5.16 /usr/local/tomcat8

[root@server1 opt]# /usr/local/tomcat8/bin/startup.sh ###启动tomcat
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@server1 opt]# /usr/local/tomcat8/bin/shutdown.sh ###关闭tomcat
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar

[root@server1 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup ##优化执行路径
[root@server1 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown

[root@server1 ~]# tomcatup
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@server1 ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      48759/java
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0

在这里插入图片描述

2.3 tomcat常用文件

●bin
存放启动和关闭Tomcat扽脚本文件,比较常用的是catalina.sh、startup.sh、shutdown.sh三个文件
●conf
存放Tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml四个文件
●lib
存放Tomcat服务器的jar包,一般不作任何改动,除非连接第三方服务,比如redis,那就需要添加相对应的jar包
●logs
存放tomcat日志
●temp
存放Tomcat运行时产生的文件
●webapps
存放项目资源的目录
●work
Tomcat工作目录,一般清除Tomcat缓存的时候会使用到

三、配置虚拟主机

3.1 基于端口

修改配置文件

[root@server1 ~]# vi /usr/local/tomcat8/conf/server.xml
</Service>
    <Service name="Catalina">
         <Connector port="8081" protocol="HTTP/1.1"
                       connectionTimeout="20000"
                       redirectPort="8443" />
      <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
        <Host name="www.test2.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/web/webapp1/test2" path="" reloadable="false" />
        </Host>
      </Engine>
    </Service>
</Server>

[root@server1 ~]# tomcatdown
[root@server1 ~]# tomcatup

[root@server1 ~]# netstat -anpt | grep 8080 ###查看8080端口是否开启
tcp6       0      0 :::8080                 :::*                    LISTEN      51036/java
[root@server1 ~]# netstat -anpt | grep 8081 ###查看8081端口是否开启
tcp6       0      0 :::8081                 :::*                    LISTEN      51036/java

3.2 基于域名

1、创建主页并修改主页内容

[root@server1 ~]# mkdir -p /web/webapp1/test1
[root@server1 ~]# mkdir -p /web/webapp1/test2
[root@server1 ~]# vi /web/webapp1/test1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome to test site,http://www.test1.com");%>
<div>动态页面</div><br/><img src="a.jpg">
</body>
</html>

[root@server1 ~]# vi /web/webapp1/test2/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("Welcome to test site,http://www.test2.com");%>
<div>动态页面</div><br/><img src="b.jpg">
</body>
</html>

2、修改Tomcat主配置文件

[root@server1 ~]# vi /usr/local/tomcat8/conf/server.xml
       <Host name="www.test1.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/web/webapp1/test1" path="" reloadable="false" />
      </Host>

       <Host name="www.test2.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/web/webapp1/test2" path="" reloadable="false" />
      </Host>

[root@server1 ~]# tomcatdown
[root@server1 ~]# tomcatup
[root@server1 ~]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      49329/java

3.本地增加映射

[root@server1 ~]# vi /etc/hosts
192.168.235.10 www.test1.com www.test2.com

4.验证
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值