Tomcat部署
- Tomcat安装部署
- 虚拟主机配置
- Tomcat优化
介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会(Apache Software Foundation)Jakarta项目中的- -个核心项目
- 由Apache、Sun和一些公司及个人共同开发而成
- 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
-
Tomcat由一系列的组件构成,其中核心的组件有三个:
- Web容器:完成Web服务器的功能。
- Servlet 容器:名字为catalina, 用于处理Servlet 代码。
- JSP容器:用于将JSP动态网页翻译成Servlet 代码。
-
因此Tomcat 是Web应用服务器,也是一个Servlet/JSP 容器。Tomeat 作为Servlet 容器,负贵处理客户的. jsp动态页面的请求,把请求传送给servlet, 并将servlet的响应传送回给客户。
-
什么是servlet?
- Servlet是Java Servlet 的简称,可以理解为是一-个服务连接器,是用Java 编写的服务器端程序,具有独立于平台和协议的特性,
简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,而实现动态网页的创建。
- Servlet是Java Servlet 的简称,可以理解为是一-个服务连接器,是用Java 编写的服务器端程序,具有独立于平台和协议的特性,
-
什么是JSP?
- JSP 全称Java Server Pages, 是一种动态网页开发技术。它使用JSP 标签在HTML网页中插入Java 代码。标签通常以<号开头,以各>结束。
- JSP是一种Java servlet, 主要用于实现Java web应用程序的用户界面部分
- JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
-
Tomcat功能组件结构:
-
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container,其中连接器和容器相辅相成,一起构成了基本的web服务Service。每个Tomcat服务器可以管理多个Service
-
Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
-
Container:负责对内处理业务逻辑。其内部由Engine、 Host、Context和Wrapper四个容器组成,用于管理和调用_Servlet 相关逻辑。
-
Service:对外提供的Web服务。主要包含Connector 和Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个Service,且各service 之间相互独立。
-
Container结构分析:
-
每个Service 会包含一个Container 容器。在Container 内部包含了4个子容器:
-
4个子容器的作用分别是:
- Engipe: 引擎,用来管理多个虚拟主机,一个Service 最多只能有一个Engine;
- Host:代表一个虚拟主机,也可以叫站点,通过配置Host 就可以添加站点:
- Context: 代表-一 个Web. 应用,包含多个Servlet封装器:
- Wrapper: 封装器,容器的最底层。每一Wrapper 封装着-一个Servlet, 负贵对象实例的创建、执行和销毁功能。
-
Engine、Host.、Context和wrapper, 这四个容器之间属于父子关系。容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个Web应用。每个Web应用会有多个Servlet 封装器。
-
Tomcat请求过程:,
- 用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的Connector获得;
- Connector 把该请求交给它所在的Service 的Engine. (Container) 来处理,并等待Engine. 的回应:
- 请求在Engine. Host. Context 和Wrapper这四个容器之间层层调用,最后在Servlet’ 中执行对应的业务逻辑、数据存储等。
- 执行完之后的请求响应在Context、 Host、Engine 容器之间层层返回,最后返回给Connector, 并通过Connector返回给客户端。
详解:
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser
tomcat端口
- tcp 8080 负责处理http请求连接
- tcp 8443 负责处理https请求连接
- tcp 8005 关闭tomcat服务使用
- tcp 8009 AJP协议端口,与apache连接使用,apache可通过AJP协议访问tomcat的8009端口
部署Tomcat
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
cd /opt/
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm ##需要用到的软件包
安装jdk
cd /opt/
rpm -ivh jdk-8u201-linux-x64.rpm #安装一个新的RPM软件包
rpm -qpl jdk-8u201-linux-x64.rpm #查询指定软件包的文件列表
java -version #查看安装的java版本信息
cd /usr/java/jdk1.8.0_201-amd64/ ##jdk安装目录
- bin目录:包含jdk运行所需要程序和命令
- jre目录中的bin:jre运行所需要的程序和命令
- lib目录:包含java的库文件
##设置jdk环境变量
cd /etc/profile.d/
vim java.sh
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 ##启动java.sh脚本
java -version
##验证java是否安装成功
vim hello.java
public class hello{
public static void mian (String[] args) {
System.out.println("hello");
}
}
javac hello.java
安装Tomcat
cd /opt/
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat/bin
./startup.sh ##后台运行tomcat
./shutdown.sh ##后台关闭tomcat
./catalina.sh start ##后台运行tomcat
./catalina.sh run ##前台运行romcat,会占用窗口
netstat -lntp | grep :8080
添加tomcat系统服务
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload #重新加载
systemctl start tomcat #启动tomcat服务
netstat -lntp | grep :8080
优化tomcat启动速度
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/中主要目录说明:
目录名称 | 功能作用 |
---|---|
bin | 存放启动和关闭 tomcat的脚本文件,如catalina.sh、startup.sh、shutdown.sh |
conf | 存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml |
lib | 存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动 |
logs | 存放 Tomcat 执行时的日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放 Tomcat 默认的 Web 应用项目资源的目录 |
work | Tomcat 的工作目录,存放 Web 应用代码生成和编译文件 |
Tomcat部署虚拟主机
##创建不同域名的目录和文件
cd /usr/local/tomcat/webapps/
mkdir kgc
mkdir benet
echo "this is kgc tomcat web\!" > ./kgc/index.jsp
echo "this is benet tomcat web\!" > ./benet/index.jsp
##修改tomcat 主配置文件 server.xml
cd /usr/local/tomcat/conf
vim 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>
修改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 |
systemctl stop tomcat
systemctl start tomcat
netstat -lntp | grep :8080
tomcat多实例部署
systemctl disable --now firewalld
setenforce 0
##采用另外一种方法安装jdk
cd /opt/
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz
tar xf apache-tomcat-9.0.16.tar.gz
tar xf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91 /usr/local/
mkdir /usr/local/tomcat
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat2
##修改java中的配置文件
vim /etc/profile
==在最后添加==
export JAVA_HOME=/usr/local/jjdk1.8.0_91
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
##配置tomcat环境变量
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
source /etc/profile.d/tomcat.sh
##修改 tomcat2 中的server.xml文件,要求各tomcat实例配置不能有重复的端口号
cd /usr/local/tomcat/tomcat2/conf
vim server.xml
#22行,修改Server prot,默认为8005 -> 修改为8006
<Server port="8006" shutdown="SHUTDOWN">
#69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081
<Connector port="8081" protocol="HTTP/1.1"
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
##修改 tomcat1 实例中的 startup.sh 文件
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
##修改 tomcat1 实例中的 shutdown.sh 文件
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
##修改 tomcat2 实例中的 startup.sh 文件
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##修改 tomcat2 实例中的 shutdown.sh 文件
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##启动两个服务
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
netstat -natp | grep java