Tomcat顶层架构、服务部署、虚拟主机配置
- 一、Tomcat概述
- 1、Tomcat介绍
- 2、Tomcat三个核心组件
- 3、Java Servlet
- 4、JSP
- 二、Tomcat顶层架构
- 三、Tomcat请求过程
- 四、Tomcat服务部署
- 1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
- 2、安装JDK
- 3、设置JDK环境变量
- 4、安装启动Tomcat
- 5、优化tomcat启动速度
- 五、Tomcat 虚拟主机配置
- 1、创建 xc 和 benet 项目目录和文件
- 2、修改 Tomcat 主配置文件
- 3、客户端浏览器访问验证
一、Tomcat概述
- Tomcat 是 Java 语言开发的,Tomcat服务器是一个免费的开放的源代码的 Web 应用服务器,是Apache软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
- Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP程序的首选。
- 一般来说,Tomcat 虽然和 Apzche或者 Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
1、Tomcat介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
- 由Apache、Sun和一些公司及个人共同开发而成
- 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
2、Tomcat三个核心组件
- Tomcat 由一系列的组件构成,其中核心的组件有三个
名称 | 功能 |
---|---|
Web 容器 | 完成 Web 服务器的功能 |
Servlet 容器 | 名字为 catalina,用于处理 Servlet 代码 |
JSP 容器 | 用于将 JSP 动态网页翻译成 Servlet 代码 |
3、Java Servlet
- Servlet是Java Servlet. 的简称,可以理解为是一个服务连接器,是用Java 编写的服务器端程序,具有独立于平台和协议的特性,简单的理解:
- servlet 就是服务器上的数据库或应用程序之间一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
4、JSP
- JSP全称Java Server Pages,一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
- JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
- JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
二、Tomcat顶层架构
- 1、Tomcat中最顶层的容器是Tomcat, 代表着整个服务器,一 个Tomcat可以包含至少一 个Service,用于具体提供服务。
- 2、**Service主要包含两个部分:Connector和Container。**Tomcat的心脏就是这两个组件,这两个组件的作用: Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Container用于封装和管理Servlet,以及具体处理Request请求。
- 3、一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接。
- 4、多个Connector 和一个Container 就形成了一个Service,有了Service 就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server 莫属了!所以整个Tomcat的生命周期由Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件(主配置文件)中看出。
- 5、server.xml中定义
这会让Tomcat6启动一 个server实例(即一 个JVM),它监听在8005端口以接收“SHUTDOWN"命令,如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
Container容器
- Container 用于封装和管理 Servlet,以及具体处理 Reques t请求,在 Connector 内部把喊了4个子容器。
- 4个子容器的作用分别是:
子容器名称 | 作用 |
---|---|
Engine | 引擎,用来管理多个站点,一个Service最多只能由一个Engine |
Host | 代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点 |
Context | 代表一个应用程序,对应着平时开发的一套程序, 或者一个WEB-INE目录以及下面的web. xml文件 |
Wrapper | 每一Wrapper封装着一 个Servlet |
三、Tomcat请求过程
1、用户在浏览器中输入该网址,请求被发送到本机端口8080,被在那里监听的CoyoteHTTP/1.1Connector获得;
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为* . j sp的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服务部署
1、下载并安装JDK
2、安装并启动Tomcat
3、配置虚拟主机
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
3、设置JDK环境变量
/etc/profile.d/ 是/etc/profile/配置目录的子目录
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 #java的工作目录
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar #java的运行的编译环境
export PATH=$JAVA_HOME/bin:$PATH #
source /etc/profile.d/java.sh
java -version
CLASSPATH | 编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件 |
---|---|
dt.jar | 是关于运行环境的类库,主要是可视化的 swing 的包 |
tools.jar | 主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。 |
JDK | java development kit (java开发工具) |
JRE | java runtime environment (java运行时环境) |
JVM | java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。 |
首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。
vim Hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class Hello {
public static void main(String[] args){
System.out.println("Hello world!!!");
}
}
javac Hello.java
java Hello
4、安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start
#前台启动
/usr/local/tomcat/bin/catalina.sh run
netstat -natp | grep 8080
浏览器访问Tomcat的默认主页 http://192.168.92.11:8080
5、优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
-------------说明-------------
/dev/urandom是/dev/random的非阻塞版本,即当熵池中没有可取的随机数时,读取/dev/urandom设备仍然会返回一个随机数,只是该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ll /usr/local/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 缓存的时候会使用到 |
五、Tomcat 虚拟主机配置
- 很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.lic.com 和 www.accp.com,希望通过这两个域名访问到不同的项目内容。
1、创建 xc 和 benet 项目目录和文件
mkdir /usr/local/tomcat/webapps/xc
mkdir /usr/local/tomcat/webapps/benet
echo "This is xc page\!" > /usr/local/tomcat/webapps/xc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp
2、修改 Tomcat 主配置文件
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.xc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/xc" 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>
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
Host name | 主机名 |
---|---|
appBase | Tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps |
unpackWARs | 是否解压war包 |
autoDeploy | 指示Tomcat运行时,如有新的WEB应用是否允许自动部署 |
xmlValidation | 是否验证xml文件执行有效性检验的标志 |
xmlNamespaceAware | 是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验 |
docBase | WEB应用的目录 |
path | 设置访问的URI为WEB应用的根目录 |
reloadable | 是否在程序有改动时重新载入 |
3、客户端浏览器访问验证
echo "192.168.92.11 www.xc.com www.benet.com" >> /etc/hosts
浏览器访问 http://www.xc.com:8080 页面显示this is xc test web\!
浏览器访问 http://www.benet.com:8080 页面显示this is benet test web\!