目录
Tomcat简介
Tomcat 的核心功能
Tomcat架构
Tomcat 的特点
Tomact配置
关闭防火墙及系统内核
Tomcar 主要文件信息
配置文件说明
案例一:Java的Web站点
案例二:Nginx+Tomcat负载均衡、动静分离
Tomcat简介
Tomcat 是由 Apache 软件基金会(ASF)开发的一款开源的 Servlet 容器 和 Web 服务器,主要用于运行基于 Java 的 Web 应用程序(如 JSP、Servlet)。它实现了 Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和 WebSocket 等 Java EE 规范,是轻量级、高性能的 Java Web 应用服务器,广泛应用于开发和生产环境。
Tomcat 的核心功能
- Servlet 容器
- 解析和执行 Java Servlet 代码,处理 HTTP 请求和响应。
- 管理 Servlet 的生命周期(初始化、服务、销毁)。
- JSP 引擎
- 将 JSP 文件动态编译为 Servlet,生成 HTML 响应。
- 静态资源服务
- 支持直接提供 HTML、CSS、JavaScript、图片等静态文件。
- 会话管理
- 提供
HttpSession
接口,支持用户会话跟踪。
- 提供
- 安全与认证
- 支持基于角色的访问控制(RBAC)、SSL/TLS 加密等。
- 集群与负载均衡
- 通过插件支持多节点部署,实现高可用性。
Tomcat架构
Tomcat 采用模块化设计,主要组件包括:
组件 | 作用 |
---|---|
Server | 顶层容器,代表整个 Tomcat 实例。 |
Service | 连接 Connector 和 Engine ,提供服务(如 HTTP、AJP)。 |
Connector | 处理客户端连接(如 HTTP 请求),将请求转发给 Engine 。 |
Engine | 处理请求的核心组件,管理多个 Host (虚拟主机)。 |
Host | 虚拟主机,如 localhost ,管理多个 Context (Web 应用)。 |
Context | 单个 Web 应用(如 /myapp ),对应一个 WAR 文件或目录。 |
Tomcat 的特点
- 轻量级
- 相比 WebLogic、WebSphere 等商业服务器,Tomcat 体积小、启动快。
- 开源免费
- 遵循 Apache 许可证,无商业使用限制。
- 跨平台
- 支持 Windows、Linux、macOS 等操作系统。
- 易于集成
- 可与 Spring Boot、Struts 等框架无缝集成。
- 社区活跃
- 长期维护,版本更新频繁,支持最新 Java 特性
Tomact配置
关闭防火墙及系统内核
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# setenforce 0 #关闭系统内核
在安装Tomcat之前需要安装Tomcat依赖环境
[root@localhost ~]# dnf -y install java
将Tomcat的安装包压缩(压缩就能用 绿色安装)
[root@localhost ~]# tar zxf apache-tomcat-9.0.8.tar.gz
移动至别的目录并重置名字
[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat
Tomcar 主要文件信息
- bin/:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。
- conf/: 存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和web. xml.
- lib/:存放 Tomcat 运行需要的库文件(JARS)
- -logs:存放 Tomcat 执行时的 LOG 文件
- -webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例)
- work:存放 JSP 编译后产生的 class 文件。
配置文件说明
- catalina.policy:权限控制配置文件。
- catalina.properties:Tomcat 属性配置文件。
- context.xml:上下文配置文件。
- logging.properties: 日志 log 相关配置文件。
- server.xml:主配置文件。
- tomcat-users.xml:manager-gui管理用户配置文件(Tomcat 安装后提供-个 manager-gui 的管理界面,通过配置该文件可以开启访问)。
- web.xml:Tomcat 的 servlet、servlet-mapping、filter、MIME 等相关配置。
启动Tomcat
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh #启动
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh #关闭
检测是否运行
[root@localhost ~]# netstat -anpt |grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2387/java
tcp6 0 0 :::8080 :::* LISTEN 2387/java
tcp6 0 0 :::8009 :::* LISTEN 2387/java
验证测试网页
案例一:Java的Web站点
关闭防火墙及系统内核
[root@localhost webapp1]# systemctl stop firewalld
[root@localhost webapp1]# setenforce 0
在安装Tomcat之前需要安装Tomcat依赖环境
[root@localhost ~]# dnf -y install java
将Tomcat的安装包压缩(压缩就能用 绿色安装)
[root@localhost ~]# tar zxf apache-tomcat-9.0.8.tar.gz
移动至别的目录并重置名字
[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat
创建测试页面区分两个网站
[root@localhost bin]# mkdir -p /web/webapp1
[root@localhost bin]# cd /web/webapp1/
[root@localhost bin]# vim index.jsp
02
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> </head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
<body>
<div>动态页面的图片 1</div><br><img src="logo.png">
</body>
</html>
两个网站
03
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> </head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
<body>
<div>动态页面的图片 2</div><br><img src="logo.png">
</body>
</html>
修改Tomcat配置文件
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
忽略以上所有信息
148行
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" /> #只添加这一行
关闭Tomcat在启动
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh #启动
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh #关闭
102验证
103验证
可以看到的是并没有图片
案例二:Nginx+Tomcat负载均衡、动静分离
跟案例一操作基本上是一样的,只是配置不一样 这里不再演示如何安装Nginx
101Nginx 102Tomcat1 103Tomcat2
修改Nginx配置文件
忽略以上信息
添加真实服务器的ip、端口、权重
#gzip on;
upstream my_tomcat{
server 192.168.10.102:8080 weight=1;
server 192.168.10.103:8080 weight=2;
}
忽略以下信息
server {
listen 80;
server_name localhost;
charset utf-8; #在server中开启utf-8,要不然会乱码
#access_log logs/host.access.log main;
在location下写我们自己的location
location ~ .*\.jsp$ {
proxy_set_header HOST $host;
#proxy_set_header Client-IP $remote_addr; #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://my_tomcat;
}
location ~ .*\.(gif|jpg|png)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
配置完后 检查配置是否有误
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重启
[root@localhost img]# systemctl restart nginx
验证:
因为网站2的权重比一高,所以3次刷新网站二会显示较多
后续查看日志并不能看到真实的ip访问Tomcat
需要给上面的配置#号去掉
忽略以上信息
添加真实服务器的ip、端口、权重
#gzip on;
upstream my_tomcat{
server 192.168.10.102:8080 weight=1;
server 192.168.10.103:8080 weight=2;
}
忽略以下信息
server {
listen 80;
server_name localhost;
charset utf-8; #在server中开启utf-8,要不然会乱码
#access_log logs/host.access.log main;
在location下写我们自己的location
location ~ .*\.jsp$ {
proxy_set_header HOST $host;
proxy_set_header Client-IP $remote_addr; #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://my_tomcat;
}
location ~ .*\.(gif|jpg|png)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
配置完后 检查配置是否有误
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重启
[root@localhost img]# systemctl restart nginx
修改Tomcat文件
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%{X-Real-IP}i %h %l %u %t "%r" %s %b" /> #只有%{X-Real-IP}i 需要添加
访问nginx刷新并查看Tomcat日志信息