目录
Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
一、Tomcat服务器简介
Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
1、什么是Servlet
Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
2、什么是 JSP?
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java
代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
3、tomcat核心组件
通常意义上的 web 服务器接受请求后,只是单纯地响应静态资源,如HTMI文件,图片文件等,不能在后端进行一定的处理操作。Tomcat是 Apache 下的一个子项目,它具备 web服务器的所有功能(WEB容器嵌入Servlet-》动态请求),不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码servlet,同时将执行的结果以HTML代码的形式写回客户端。
Tomcat由一系列的组件构成,其中核心的组件有三个:
(1)Web容器:完成Web服务器的功能HTTP HTTPS请求的接收和响应
描述:①接收、响应请求②展示动态页面
(2)JSP容器:用以将index.jsp文件中的java代码翻译成Servlet代码。
描述:index.jsp文件里面有静态展示的html语言,还有一些java类代码,但是文件中java代码无法直接被tomcat执行,所以需要先翻译为可以执行的代码方式,也就是翻译成Servlet代码格式
(3)Servelet容器:由名称为Catalina的脚本来处理Servlet代码。
描述:使用catalina进行处理JSP容器翻译过来的Servelet代码
简介:
Web容器:1.接受、响应请求2.展示动态页面
JSP容器:翻译Java→servlet
Servlet容器:借助于catalina来执行servlet代码(动态任务执行的标准格式)
3.1Tomcat功能组件机构
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container。其中连接器和容器相辅相成,一起构成了基本的Web服务Service。每个Tomcat服务器可以管理多个Service。
Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用Servlet 相关逻辑。
Service:对外提供的 Web 服务。主要包含 Connector 和 Container
两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。
3.2Container结构分析
每个 Service 会包含一个 Container 容器,在 Container 内部包含了 4 个子容器
4个子容器的作用分别是
(1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
(3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
(4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。
容器由一个引擎可以管理多个虚拟主机。
每个虚拟主机可以管理多个 Web 应用。
每个 Web 应用会有多个 Servlet 封装器。
3.3Tomcat请求过程
1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过Connector 返回给客户端
二、Tomcat数据流向
1.Tomcat数据流向
用户请求(访问80端口)——》
发送请求发送给tomcat——》
tomcat有一个端口在监听8080端口)
从8080端口进入流量的会被在此端口的线程监听到
给与我们的web容器进行处理(有index.html页面显示出来 从8080端口来时会有交互界面 会读取到index.jsp这种java代码)
但是java代码无法直接使用——》
需要利用到jsp容器
将index.jsp中的java的servlet代码进行翻译
servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码
并不是直接对接mysql数据库
而是直接对接用户的请求例如app中的某个功能模块
比方说看个人信息 servlet容器与app接是api进行对接(具体的URL)
数据流向最终会通过用户请求内容 去mysql数据库寻找相应的内容
最后返回给用户
2.Nginx-Tomcat数据流向图
首先,客户请求nginx页面,就是访问80端口
nginx进行反向代理,去请求连接Tomcat的8080端口
Tomcat里面有一个负责接收和反馈外部请求的连接器 Connector
Connector中有前端页面和协议会监听8080端口,从8080端口进入的请求会被监听到
Tomcat接收到请求之后,然后把这个请求交给负责处理请求的容器Container中的Engine来处理
Engine接收到请求之后,会匹配所有的虚拟主机Host
Host相当于站点,就相当于我们正常去访问一个域名一样
不同的需求会有不同的路径,这时候就让Context来确定访问路径
找到访问路径之后,里面有一个index.jsp文件,它会把这个文件的Java代码提取出来
然后交给sercvet来翻译这个代码,用Catalina来处理这个代码
最后将执行结果一层一层原路返回
三、Tomcat服务部署及安装
在部署Tomcat之前必须安装好jdk,因为jdk是Tomcat’运行的必要环境
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
1、将所需的安装包拖入/opt目录下准备安装
2、关闭防火墙
3、安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm ###可以查看指定文件的文件列表
rpm -ivh jdk-8u201-linux-x64.rpm ###使用rpm -ivh进行安装
java -version
4.设置JDK的环境变量
vim /etc/profile.d/java.sh #编写一个java文件来验证
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 #输出指定java所需的类文件
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar #可执行文件的位置
export PATH=$JAVA_HOME/bin:$PATH #输出重新定义环境变量。$PATH一定要放在$Java_HOME
source /etc/profile.d/java.sh
java -version
5.安装启动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文件及说明
我们如果要执行、持续运行一个java开发应用服务,在经过简单配置之后,可以直接将war包、jar包,放入到webapps中,来让tomcat运行。
主要目录说明
1、bin :存放启动和关闭Tomcat的脚本文件,比较常用的是:catalina.sh 、 startup.sh 、 shutdown.sh
2、conf: 存放Tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml
3、lib: 存放Tomcat服务器的jar包,一般不做任何改动,除非连接第三方服务,比如redis,那就需要添加对应的jar包。
4、logs:存放Tomcat日志
5、temp:存放Tomcat运行时产生的文件
6、webapps:存放项目资源的目录
7、work: Tomcat工作目录,一般清除Tomcat缓存的时候会使用到
8、src: 存放Tomcat 的源代码
9、doc: 存放Tomcat文档
Tomcat配置文件详解
1、catalina.policy :权限控制配置文件
2、catalina.properties: Tomcat的属性配置文件
3、context.xml : 上下文配置文件
4、logging.properties:日志相关配置文件
5、server.xml : 主配置文件,通过配置文件,可以修改tomcat的启动端口,网站目录,虚拟主机,开启https等功能
6、tomacat-user.xml/.xsd: 管理用户配置文件
7、web.xml: tomcal的servlet、servlet-mapping、filter、MIME等相关配置
将启动脚本放入环境中方便启动
后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start
前台启动(终端关闭,tomacat停止运行)
/usr/local/tomcat/bin/catalina.sh run
关闭
6 浏览器访问Tomcat的默认主页 http://192.168.111.100:8080
7、优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
securerandom.source=file:/dev/urandom #修改117行
将random修改为urandom 可以优化启动速度
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ll /usr/local/tomcat/
四、Tomcat虚拟主机配置
很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.zyy.com 和 www.rich.com,希望通过这两个域名访问到不同的项目内容。
1.创建两个目录和文件
添加地址映射
2.修改配置文件
将这两段注释
在165行插入以下内容
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、 重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
4、添加域名映射
echo "192.168.111.100 www.zyy.com www.rich.com" >> /etc/hosts
5、测试