一、Tomcat的概述
自 2017 年 11 月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat 也一度成为 Java 开发人员的首选。其开源、占用系统资源少、跨平台等特性被深受喜爱。本章主要学习如何 部署 Tomcat 服务,根据生产环境实现多个虚拟主机的配置,最后的重点是进行压测,根据 压测结果如何优化 Tomcat 服务及常见的内存溢出如何处理。
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。
二、B/S(Browser/Server)结构
最早出现了CGl (Common Gateway Interface)通用网关接口,通过浏览器中输入URL直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。先后出现了ASP、PHP、JSP等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。
三、java基础
1. web架构
PC端或移动端浏览器访问 从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端。
手机App访问 内置了HTML和]S文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的S文件太多或太大了有必要就从图片服务器请求图片,从业务服务器请求动态数据 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
2. java历史
Java原指的是印度尼西亚的爪哇岛,人口众多,盛产咖啡、橡胶等。
Java语言最早是在1991年开始设计的,最初叫Oak项目,它初衷是跑在不同机顶盒设备中的。
1993年网景公司成立。Oak项目组很快他们发现了浏览器和动态网页技术这个巨大的市场,转向WEB方向。并首先发布了可以让网页动起来的Applet技术(浏览器中嵌入运行Java字节码的技术)。
在1995年,一杯爪哇岛咖啡成就了Java这个名字。
Sun公司第一个Java公开版本1.0发布于1996年。口号是"一次编写,到处运行"(Write once,Run anywhere),跨平台运行。
1999年,SUN公司发布了第二代Java平台(Java2)。
2009年4月20日,Oracle甲骨文公司宣布将以每股9.50美元,总计74亿美金收购SUN(计算机系统)公司。2010年1月成功收购
2010年,Java创始人之一的 James Gosling 离开了Oracle,去了Google。
2010年8月13日,Oracle在加利福尼亚地方法院起诉Google侵犯版权和专利权。Oracle声称
Google侵犯了Java 37个API和部分专利。地方法院的陪审团认为未侵犯专利,且API无版权。
2016年5月26日,地方法院二审陪审团认定未侵犯版权,对37个JAVA API的重新实现受到合理使用的保护。
2017年Oracle上诉美国联邦巡回上诉法院,2018年3月27日判决Oracle胜诉,Google应赔偿近90亿美金。
2019年1月Google想让美国最高法院撤销联邦法院裁决。谷歌表示裁决是"对软件业的毁灭性一击"。现任特朗普政府支持Oracle公司,但微软、Mozilla、 红帽支持Google。目前案件已经受理,但由于疫情推迟。有更多的企业和组织加入进来,包括IBM、计算机和通信协会、互联网协会、超过150名学者和教授。此案如果Oracle胜诉,将在美国形成判例,将深远广泛影响软件业。例如: POSIX接口, 是商用系统UNIX的兼容接口规范。
3. JDK
JDK: Java Development Kit,即Java语言的软件开发工具包JDK协议基于JRL(JavaResearch License)协议。
4. 安装Oracle JDK的流程
Oracle JDK的rpm安装操作过程
1)将rpm软件包拖到opt下进行安装
2)rpm安装rpm软件包
3)在/etc/profile文件下添加文件配置
export JAVA_HOME=/usr/java/default
#指明自己java的根目录
export PATH=$JAVA_HOME/bin:$PATH
#java的启动文件
4)刷新/etc/profile文件
source /etc/profile
java -version
Oracle JDK的二进制文件安装操作过程
1)将二进制软件包拖到opt下进行安装
2)解压二进制软件包并切换到/usr/local目录
3)将二进制软件包做软链接
4)编写环境变量文件
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
5)初始化环境变量
. /etc/profile.d/jdk.sh
java -version
四、Tomcat的组件分层与分类
Tomcat 由一系列的组件构成,其中核心的组件有三个:
- Web 容器:完成 Web 服务器的功能。
- Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
- JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码
Tomcat(端口号:8080)组件:
- connector 连接器 :暴露监听端口,接收客户端发来的请求和返回响应消息给客户端。
- container 容器:负责处理用户请求的业务逻辑,由4个容器组成(engine,host,context,wrapper)子容器之间是父子关系。
注释:
- engine:引擎,管理多个虚拟主机,一个container只有一个engine。
- host:代表一个虚拟主机。
- context:管理web应用的路径。
- wrapper:servlet封装器,负责处理业务逻辑
多实例:多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
引擎:一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等。
安装目录文件:
目录文件 | 功能 |
---|---|
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 缓存的时候会使用到 |
- bin
- conf
- lib
- logs
- temp
- webapps
- work
conf子目录文件:
文件名 | 说明 |
---|---|
server.xml | 主配置文件 |
web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件 |
核心组件
核心组件 | 说明 |
---|---|
server | 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个 |
service | 服务,用来组织Engine和Connector的对应关系,一个service中只有一个Engine |
connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
Engine | 引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系: url => directory |
Wrapper | 每一Wrapper封装着 一个Servlet |
注意:配置文件对于大小写敏感
通常意义上的 Web 服务器接受请求后,只是单纯地响应静态资源,如 HTML 文件,图片 文件等,不能在后端进行一定的处理操作。 Tomcat 是 Apache 下的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范 的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式反回客户端。
五、Tomcat的顶层架构
-
Tomcat中最顶层的容器是Server,代表着整个服务器,一个Server可以包含至少一个Service,用于具体提供服务。
-
Service主要包含两个部分:Connector和Container。Tomcat的心脏就是这两个组件,这两个组件的作用:Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化; Conta iner用于封装和管理Servlet,以及具体处理Request请求。
-
一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接。
-
多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给它生命、掌握其生死大权,那就非Server莫属了!所以整个Tomcat的生命周期由Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server .xml配置文件中看出。
-
server.xm1中定义【Server port="8005" shutdown="SHUTDOWN"】这会让Tomcat6启动一个server实例(即一个JVM),它监听在8005端口以接收“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
六、Tomcat的处理请求过程
- 用户在浏览器中输入该网址,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;
- Connector把该请求交给它所在的Service的Engine (Container) 来处理,并等待Engine的回应;
- Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhostHost获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“”的Context去处理);
- path="/test"的Context获得请求/ index. jsp,在它的mapping table中寻找出对应的Servlet。Context 匹配到URLPattern为* .jsp的Servlet,对应于JspServlet类;
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等
- Context把执行完之后的HttpServletResponse对象返回给Host;
- Host把HttpServletResponse对象返回给Engine;
- Engine把HttpServletResponse对象返回Connector;
- Connector把HttpServletResponse对象返回给客户Browser。
七、安装Tomcat软件的操作过程
1.先rpm安装JDK
1)将rpm软件包拖到opt下进行安装
2)rpm安装rpm软件包
3)在/etc/profile文件下添加文件配置
export JAVA_HOME=/usr/java/default
#指明自己java的根目录
export PATH=$JAVA_HOME/bin:$PATH
#java的启动文件
4)刷新/etc/profile文件
source /etc/profile
java -version
2.再安装Tomcat
1)将Tomcat压缩包拖到opt下进行解压安装
2)将Tomcat做软链接到/usr/local下,方便管理
ln -s /opt/apache-tomcat-9.0.16 /usr/local/tomcat
3)切换到/usr/local/tomcat/bin下启动文件
方法1:执行自带脚本,不推荐!
[root@localhost bin]# ./catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/default
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# ss -natp |grep 8080
LISTEN 0 100 :::8080 :::* users:(("java",pid=56282,fd=54))
注意:
启动方法1:路径启动tomcat
后台启动:
tomcat /bin/startup.sh
tomcat /bin/catalina.sh
前台启动:
tomcat /bin/catalina.sh run
关闭服务:
tomcat /bin/shutdown.sh
启动方法2: 编写tomcat.service文件
编写tomcat.service文件:vim /usr/lib/systemd/system/tomcat.service
4)开启tomcat
5)去浏览器查看
6)创建一个用户,把tomcat里面的文件,属主属组改变成新的用户
useradd -s /sbin/nologin tomcat //新建用户
chown tomcat:tomcat tomcat/ -R //修改属主和属组
7)编写一个systemd服务文件
#vim /etc/systemd/system/tomcat.service
#编写tomcat.service文件
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
8)刷新和重启服务
systemctl daemon-reload
systemctl start tomcat
ss -natp |grep 8080
八、实现java项目
.war
:WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等.jar
:EJB类文件的打包压缩类zip格式文件,,包括很多的class文件, 网景公司发明.rar
:资源适配器类打包文件,目前已不常用.ear
:企业级WebApp打包,目前已不常用
传统应用开发测试后,通常打包为war格式,这种文件部署到Tomcat的webapps目录下,并默认会自动
conf/server.xml中文件配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
1.手动部署 jar 包
[root@localhost ~]# cd /data
[root@localhost data]# mkdir app1
[root@localhost data]# cd app1/
[root@localhost app1]# vim test.html
[root@localhost app1]# cat test.html
<h1> test </h1>
[root@localhost app1]# vim test.jsp
[root@localhost app1]# cat test.jsp
//直接复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<! DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body> //后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println ("test jsp");
%>
%%<br>
%<%=request.getRequestURL()%>
%</body>
%</html>
[root@localhost app1]# jar cvf /opt/app1.war * //打包
已添加清单
正在添加: test.html(输入 = 16) (输出 = 16)(压缩了 0%)
正在添加: test.jsp(输入 = 270) (输出 = 205)(压缩了 24%)
[root@localhost app1]# cd /opt
[root@localhost opt]# ls
apache-tomcat-9.0.16 apache-tomcat-9.0.16.tar.gz app1.war jdk-8u201-linux-x64.rpm rh
[root@localhost opt]# cp app1.war /usr/local/tomcat/webapps/
[root@localhost opt]# ll /usr/local/tomcat/webapps/
总用量 8
drwxr-x---. 3 tomcat tomcat 55 6月 28 14:58 app1
-rw-r--r--. 1 root root 781 6月 28 14:58 app1.war
drwxr-x---. 14 tomcat tomcat 4096 6月 28 12:05 docs
drwxr-x---. 6 tomcat tomcat 83 6月 28 12:05 examples
drwxr-x---. 5 tomcat tomcat 87 6月 28 12:05 host-manager
drwxr-x---. 5 tomcat tomcat 103 6月 28 12:05 manager
drwxr-x---. 3 tomcat tomcat 283 6月 28 12:05 ROOT
[root@localhost opt]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
app1 app1.war docs examples host-manager manager ROOT
//这里可以看到app1.war自动解压为app1
浏览器访问192.168.100.20:8080/app1/test.html进行验证
浏览器访问192.168.100.20:8080/app1/test.jsp进行验证
注意:更新时记得清除缓存
[root@localhost opt]# cd /usr/local/tomcat/work/
[root@localhost work]# ls
Catalina
[root@localhost work]# tree Catalina/
Catalina/
└── localhost
├── app1
│ └── org
│ └── apache
│ └── jsp
│ ├── test_jsp.class //缓存
│ └── test_jsp.java //缓存
├── docs
├── examples
├── host-manager
├── manager
└── ROOT
└── org
└── apache
└── jsp
├── index_jsp.class
└── index_jsp.java
13 directories, 4 files
2.Tomcat安装博客
[root@localhost tomcat]# cd webapps/
[root@localhost webapps]# rz -E
rz waiting to receive.
[root@localhost webapps]# ls
app1 docs host-manager jpress-v3.2.1.war ROOT
app1.war examples jpress-v3.2.1 manager
[root@localhost webapps]# ln -s jpress-v3.2.1 jpress
[root@localhost webapps]# cat >/etc/yum.repos.d/mysql.repo <<EOF
> [mysql57-community]
> name=MySQL 5.7 Community Server
> baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
> enabled=1
> gpgcheck=0
> EOF
[root@localhost webapps]# yum install mysql-community-server -y
[root@localhost webapps]# systemctl start mysqld
[root@localhost webapps]# grep password /var/log/mysqld.log
2024-06-28T07:51:05.218788Z 1 [Note] A temporary password is generated for root@localhost: Ektrt5%QJJo0
[root@localhost webapps]# mysql -u root -p'Ektrt5%QJJo0'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set global validate_password_policy=0; //修改密码策略
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1; //修改密码策略
Query OK, 0 rows affected (0.00 sec)
mysql> alter user root@'localhost' identified by 'Admin@123'; //修改密码
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE blog; //创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
浏览器访问192.168.100.20:8080/jpress/install进行验证
在浏览器上去创建用户
写好数据库的信息,点击下一步
创建用户
输入账号密码,进入博客
九、状态页
- server status 状态页
- manger app 管理项目 (不建议开启)
- host manger 配置虚拟主机的设置 (不建议开启
1.启用状态页 (只能本地访问)
默认的管理页面被禁用,修改用户认证的配置文件conf/tomcat-users.xml,将状态页启用。
[root@localhost tomcat]# cd conf/
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim tomcat-users.xml
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
#加下面两行,指定用户和密码
<role rolename="manager-gui"/>
<user username="lhey" password="123123" roles="manager-gui"/>
[root@localhost conf]# systemctl restart tomcat.service
注意:此时只能通过本地访问,不能进行远程访问
本地登录方法:虚拟机中,打开火狐浏览器,访问127.0.0.1:8080,输入用户名lhey、密码123123,即可登录成功。
2.开启允许远程状态页
[root@localhost tomcat]# cd /usr/local/tomcat/webapps/manager/
[root@localhost manager]# ls
images index.jsp META-INF status.xsd WEB-INF xform.xsl
[root@localhost manager]# cd META-INF/
[root@localhost META-INF]# ls
context.xml
[root@localhost META-INF]# vim context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
在此处下方修改
allow="192\.\d+\.\d+\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加允许的主机地址
[root@localhost META-INF]# systemctl restart tomcat.service
浏览器访问192.168.100.20:8080/manager/status,输入用户名lhey、密码123123,即可登录成功。
3. host manger
[root@localhost tomcat]# cd conf/
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/> //在此处添加
<user username="lhey" password="123123" roles="manager-gui,admin-gui"/> //在此处添加admin-gui
[root@localhost conf]# cd ..
[root@localhost tomcat]# cd webapps/host-manager/
[root@localhost host-manager]# ls
images index.jsp manager.xml META-INF WEB-INF
[root@localhost host-manager]# vim META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
在此处下方修改
allow="192\.\d+\.\d+\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加允许的主机地址
[root@localhost host-manager]# systemctl restart tomcat.service
浏览器访问192.168.100.20:8080/host-manager/html,输入用户名lhey、密码123123,即可登录成功。
十、Tomcat的端口号
8080: 默认接收 http 请求的端口
8005: 安全端口,可以关闭tomcat
8009: apache 和 tomcat 联动 AJP 协议
十一、端口8005/tcp安全配置管理
8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个字符串,tomcat接收到后就会关闭此Server。
此管理功能建议禁用,可将SHUTDOWN改为一串猜不出的字符串实现或者port修改成 0,会使用随机端口如:36913
port设为-1等无效端口,将关闭此功能此行不能被注释,否则无法启动tomcat服务
示例:
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">
十二、虚拟主机配置
- 创建虚拟主机前,必须先创建相关目录。
[root@localhost data]# ls
app1
[root@localhost data]# mkdir web{1,2,3}/ROOT -pv
mkdir: 已创建目录 "web1"
mkdir: 已创建目录 "web1/ROOT"
mkdir: 已创建目录 "web2"
mkdir: 已创建目录 "web2/ROOT"
mkdir: 已创建目录 "web3"
mkdir: 已创建目录 "web3/ROOT"
[root@localhost data]# echo "web1 web1" > /data/web1/ROOT/index.jsp
[root@localhost data]# echo "web2 web2" > /data/web2/ROOT/index.jsp
[root@localhost data]# echo "web3 web3" > /data/web3/ROOT/index.jsp
[root@localhost data]# chown -R tomcat.tomcat /data/
[root@localhost data]# vim /usr/local/tomcat/conf/server.xml
#找到host主机项,注意在根目录中,一定要有ROOT,这是默认 的主目录
#注意默认的结束</HOST>这段要在默认结束的后面加上
<Host name="www.a.com" appBase="/data/web1"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.b.com" appBase="/data/web2"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.c.com" appBase="/data/web3"
unpackWARs="true" autoDeploy="true">
</Host>
[root@localhost data]# systemctl restart tomcat.service
使用另外一台主机去测试一下,先添加hosts文件。
使用curl去测试,输入不同的域名可以得到不同的页面信息。
十三、context配置
Context作用:
- 路径映射:将url映射至指定路径,而非使用appBase下的物理目录,实现虚拟目录功能
- 应用独立配置,例如单独配置应用日志、单独配置应用访问控制
//映射指定路径
<Context path="/test" docBase="/data/test" reloadable="true" />
//映射站点的根目录
<Context path="/" docBase="/data/website" reloadable="true" />
//还可以添加日志等独立的配置
<Context path="/test" docBase="/data/test" reloadable="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_test_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Context>
详解:
path
:指的是访问的URL路径,如果path与appBase下面的子目录同名,context的docBase路径优先更高docBase
:可以是磁盘文件的绝对路径,也可以是相对路径(相对于Host的appBase)reloadable
:true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB应用重新加载。生产环境中,建议使用false来禁用。
[root@localhost data]# cd /usr/local/tomcat/conf/
[root@localhost conf]# ls
Catalina catalina.properties jaspic-providers.xml logging.properties tomcat-users.xml web.xml
catalina.policy context.xml jaspic-providers.xsd server.xml tomcat-users.xsd
[root@localhost conf]# vim server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
在下方添加
<Host name="www.a.com" appBase="/data/web1"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/data/test" reloadable="false" />
</Host>
[root@localhost conf]# cd /data
[root@localhost data]# mkdir test
[root@localhost data]# cd test/
[root@localhost test]# echo "hello world" > index.jsp
[root@localhost test]# chown -R tomcat.tomcat /data/
[root@localhost test]# systemctl restart tomcat.service
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.20 www.a.com //添加
[root@localhost ~]# curl www.a.com:8080/test/ //验证
hello world //置换为/data/test/内容