Tomcat介绍

tomcat简介

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

web服务对比

Java Web应用服务器的选择
性能高,但商业收费

Resin 服务器

Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。
Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建。

Jetty 服务器

Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty作为Eclipse基金会的一部分,是一个自由和开源项目。

JBoss服务器

JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合。

WebSphere 服务器

WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、CacheManager 和WebSphere Application Server等系列,其中WebSphere Application Server是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。

WebLogic 服务器

WebLogic 是BEA公司的产品,可进一步细分为 WebLogic Server、WebLogic Enterprise 和WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选
择。
性价比高,开源免费

Tomcat

安装和配置

安装方式介绍

采用二进制方式安装 直接下载,部署好java环境,即可运行(推荐)

环境规划:

操作系统:CentOS Linux release 7.9.2009 (Core)

软件包(已随文档上传):
在这里插入图片描述
jdk-8u261-linux-x64.tar.gzapache-tomcat-9.0.48.tar.gz

关闭防火墙和selinux:

在这里插入图片描述

网络状态:

在这里插入图片描述

二进制方式安装

安装JDK,配置Java环境

解压JDK

tar -xvzf jdk-8u261-linux-x64.tar.gz 
mv ./jdk1.8.0_261 /usr/local/java

配置环境变量

vim /etc/profile

在配置文件末尾添加以下内容即可:

export JAVA_HOME=/usr/local/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

在这里插入图片描述

验证

source /etc/profile
java -version

在这里插入图片描述

安装Tomcat

解压

tar -xvzf apache-tomcat-9.0.48.tar.gz
mv ./apache-tomcat-9.0.48 /usr/local/tomcat
ls /usr/lcoal/tomcat

在这里插入图片描述

Tomcat目录说明

tomcat
|—bin:存放启动和关闭tomcat脚本;
|—configtest.sh: 检测配置文件
|—startup.sh:启动tomcat
|—shutdown.sh:关闭tomcat
|—conf:存放Tomcat服务器的各种全局配置⽂文件,其中最重要的是server.xml和web.xml;
|—server.xml: tomcat的主配置文件 host配置
|—web.xml: tomcat的应用程序的部署描述符文件
|—lib:存放Tomcat服务器所需的各种jar文件;
|—logs:存放Tomcat执行时的日志文件;
|—temp:此目录是tomcat存放的临时文件;
|—webapps:tomcat默认存放应用程序的目录,好比apache的默认网页存放路径
是/var/www/html一样;
|—docs: tomcat文档
|—examples: tomcat自带的一个独立的web应用程序例子
|—host-manager: tomcat的主机管理应用程序
|—manager: tomcat的管理应用程序
|—ROOT: 指tomcat的应用程序的根,如果应用程序部署在ROOT中,则可直接通过http://i
p:port 访问到
|—work:用于存放JSP应用程序在部署时编译后产生的class文件

启动测试

Tomcat服务器默认使用8080端口

cd /usr/local/tomcat/bin
ls
./startup.sh
ss -tulanp | grep 8080

在这里插入图片描述

测试

本地访问:http://你的ip:8080
在这里插入图片描述

关闭Tomcat

cd /usr/local/tomcat/bin
./shutdown.sh

创建tomcat服务管理脚本

创建服务脚本,可使用service命令,chkconfig命令对tomcat管理

vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/java"
Environment="CATALINA_HOME=/usr/local/tomcat"
Environment="CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
User=root
Group=root
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

重载守护进程(每次修改 service 文件后必须执行)

systemctl daemon-reload

然后就可以使用systemctl管理tomcat服务
在这里插入图片描述

Tomcat配置文件说明

Tomcat 的架构设计遵循“容器嵌套”的逻辑,从外到内依次为:Server → Service → Connector/Engine → Host → Context。

以下是各节点的详细功能与关键属性总结:

Server 节点 (服务器实例)

定位:Tomcat 的最顶层元素,代表整个 Tomcat 服务器实例(全局唯一)。
作用:管理整个服务器的生命周期,监听关闭指令。
关键属性:
port:监听关闭请求的端口(用于接收 shutdown 命令)。
shutdown:发送到上述端口的关闭指令字符串。

Service 节点 (服务集合)

定位:包含一个 Engine 和多个 Connector 的集合。
作用:将连接器(入口)和处理引擎(核心)绑定在一起。一个 Server 可以包含多个 Service,用于监听不同的端口或处理不同类型的请求。
关键属性:
name:服务的名称标识。

Connector 节点 (连接器)

定位:Service 的“耳朵”,负责监听客户端请求。
作用:定义客户端与服务端的通信协议和端口。一个 Service 可拥有多个 Connector(例如同时支持 HTTP 和 HTTPS)。
关键属性:
port:监听端口(如 HTTP 默认为 8080,生产环境常改为 80)。
protocol:传输协议(如 HTTP/1.1, AJP/1.3)。
connectionTimeout:连接超时时间(毫秒)。
redirectPort:当收到 SSL 请求时,重定向到的 HTTPS 端口。

Engine 节点 (处理引擎)

定位:Service 的核心处理单元,每个 Service 仅有一个。
作用:接收 Connector 传来的请求,并根据域名分发给对应的虚拟主机(Host)。
关键属性:
defaultHost:默认主机名。当请求的域名无法匹配任何 Host 时,由该主机处理。

Host 节点 (虚拟主机)

定位:对应网络上的一个逻辑主机(通常是一个域名)。
作用:实现“单 IP 多域名”部署。一个 Engine 下可配置多个 Host。
关键属性:
name:虚拟主机名(必须能被 DNS 解析,即域名)。
appBase:Web 应用的根目录(如 webapps),站点文件夹需放在此目录下。

Context 节点 (Web 应用/虚拟目录)

定位:对应具体的 Web 应用程序或虚拟路径。
作用:定义 URL 路径与实际文件系统的映射关系。
关键属性:
path:访问时的虚拟路径(如 /aa,访问时为 http://host:port/aa)。
docBase:项目在磁盘上的实际物理路径。
reloadable:热部署开关。设为 true 时,Tomcat 会监控 WEB-INF 下的类库变化并自动重载,开发阶段常用,生产环境建议关闭以节省性能。

日志与辅助组件

Logger 节点:配置 Tomcat 的日志记录行为。
className:日志实现类。
prefix/suffix:日志文件的前后缀。
timestamp:文件名是否包含时间戳。
Value 节点:类似于 Logger,常用于访问日志。
directory:日志存放目录。
pattern:日志格式。common 记录基础信息(IP、时间、请求、状态码),combined 记录更详细信息(包含 Referer 和 User-Agent)。

核心概念补充说明

URL 解析流程:

协议://主机:端口/虚拟目录/资源
主机:通过 DNS 解析 IP,找到对应的 Host 节点。
端口:找到对应的 Connector 节点。
虚拟目录:匹配 Context 的 path,进而找到 docBase 指定的物理文件夹。

配置文件层级:

全局配置 (conf/web.xml):影响服务器上所有站点(如默认首页设置、MIME 类型)。
局部配置 (WEB-INF/web.xml):仅对当前应用生效,优先级高于全局配置。

ROOT 应用:
当用户访问 http://localhost:8080/ 时,实际上访问的是名为 ROOT 的 Context。这是 Tomcat 的默认硬编码行为,可以通过配置修改默认指向。

配置基于域名虚拟web主机

配置域名:

vim /etc/hosts

添加192.168.30.219 www.fzc.com

建立java web站点目录

mkdir -pv /web/fzc

在这里插入图片描述

编辑java网页

vim /web/fzc/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
	<title>java web page</title>
</head>
<body>
	<% out.println("welcom to test site,tomcat");%>
</body>
</html>

在这里插入图片描述

配置tomcat

vim /usr/local/tomcat/conf/server.xml

在这里插入图片描述
修改name为域名,并在下面添加一行

<Context docBase="/web/fzc" path="" reloadable="false"></Context>

重启tomcat

systemctl restart tomcat

测试

本机访问: http://www.fzc.com:8080
在这里插入图片描述

Nginx+Tomcat负载均衡架构

网络架构说明

使用3台虚拟机
在这里插入图片描述

Tomcat服务器安装配置

基本安装

参考上一节内容,也可将上节的服务器进行克隆
不必设置基于域名的web虚拟主机

差异化内容

在生产环境中通过两个tomcat服务器站点及设置相同,本例中我们为了测试效果所以需要对站点内容进行差异化编辑

Tomcat服务器1

在这里插入图片描述

vim /web/fzc/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
	<title>java web page</title>
</head>
<body>
	<% out.println("welcom to test site,tomcat1");%>
</body>
</html>
Tomcat服务器2

在这里插入图片描述

vim /web/fzc/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
	<title>java web page</title>
</head>
<body>
	<% out.println("welcom to test site,tomcat2");%>
</body>
</html>

Nginx服务器安装

nginx安装

参考之前部署的LNMP服务,我们接下来就基于之前的LNMP服务做nginx的负载均衡

Nginx负载均衡实现

nginx可以做为负载均衡服务器使用,通过upstream和反向代理功能实现服务调度upstream模块主要用来配置上游服务器,(之所以称为上游服务器,是因为响应的数据是由upstream里配置的后端服务器传输过来的,属于响应数据的上游),nginx配置集群就是由upstream完成的,upstream模块在http模块下进行配置.
下面是nginx配置文件的全文内容以及截图,可以直接按照我的修改

cat /usr/local/nginx/conf/nginx.conf


#user  nobody;
user    nginx;
# worker_processes  1;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream tomcat_server {
        server 192.168.30.218:8080 weight=1;
        server 192.168.30.219:8080 weight=1;
    }

    server {
        listen       80;
        server_name  www.fzc.com fzc.com; # 确保这里包含你的域名
        root         /data/www/fanzc;

        location / {
            index index.php index.html index.htm;

 
            proxy_pass http://tomcat_server;

            proxy_set_header Host www.fzc.com;             # 传递域名,否则 Tomcat 收到的是 localhost
            proxy_set_header X-Real-IP $remote_addr; # 传递真实 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

在这里插入图片描述
tomcat1的配置文件内容
主要修改部分如下
在这里插入图片描述
图中保留了之前一个host块并将其中的网站目录改为之前我们创建的,name保留localhost,然后在之前新加一个host块,作为域名www.fanzc.com的host块使用
tomcat2的配置文件内容
主要修改部分如下
在这里插入图片描述修改内容同tomcat1

测试

浏览器访问nginx域名或者ip均可,然后ctrl+f5强制刷新查看页面变化,发现tomcat1和tomcat2轮流出现证明我们的基于tomcat集群的nginx负载均衡配置成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐