本文主要包括tomcat服务器的主要概念介绍、在systemd上的tomcat守护进程的配置、jsvc的原理介绍和systemd的并发实现原理介绍。
1、Tomcat简介
在了解tomcat之前我们需要了解一些基本的概念。
1.1 web应用
所谓Web应用,就是指需要通过编程来创建的Web站点。Web应用中不仅包括普通的静态HTML文档,还包含大量可被Web服务器动态执行的程序。用户在Internet上看到的能开展业务的各种Web站点都可看作Web应用,例如,网上商店和网上银行都是Web应用。此外,公司内部基于Web的Intranet工作平台也是Web应用。
Web应用与传统的桌面应用程序相比,具有以下特点:
- 以浏览器作为展示客户端界面的窗口。
- 客户端界面一律表现为网页形式,网页由HTML语言写成。
- 客户端与服务器端能进行和业务相关的动态交互。
- 能完成与桌面应用程序类似的功能。
- 使用浏览器—服务器架构(B/S),浏览器与服务器之间采用HTTP协议通信。
- Web应用通过Web服务器来发布。
web应用的一大好处就是可以轻易地跨平台运行,不论是windows、mac、ios、android还是linux,只要安装了浏览器,一般都可以使用web应用,而浏览器在各个平台都是标配的软件,因此给web应用的普及提供了非常良好的条件。同样的,web应用使用的是B/S架构,即Browser/Server架构,主要的计算任务都交给Server端进行,因此都客户端的性能要求较低,同时也推动了服务端的负载均衡、高可用等技术的发展。
Context
:在tomcat中一般指web应用
1.2 Servlet
**Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。**其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类别,一般情况下,我们说的Servlet为后者。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。也就是说Web服务器可以访问任意一个Web应用中所有实现Servlet接口的类。而Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。既然servlet和java关系密切,那么servlet接口的标准制定毫无疑问也是由甲骨文公司来主导。
**Servlet规范把能够发布和运行Java Web应用的Web服务器称为Servlet容器。**Servlet容器最主要的特征是动态执行Java Web应用中Servlet实现类的程序代码。由Apache开源软件组织创建的Tomcat是一个符合Servlet规范的优秀Servlet容器。
1.3 jsp
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导建立的一种动态网页技术标准。JSP是HttpServlet的扩展。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP在首次被访问的时候被应用服务器转换为servlet,在以后的运行中,容器直接调用这个servlet,而不再访问JSP页面。JSP的实质仍然是servlet。
1.4 Tomcat
Tomcat
是在Oracle公司的JSWDK(JavaServer Web DevelopmentKit,是Oracle公司推出的小型Servlet/JSP调试工具)的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java语言编写。作为一个开源软件,Tomcat除了运行稳定、可靠,并且效率高之外,还可以和目前大部分的主流Web服务器(如IIS、Apache、Nginx等)一起工作。
tomcat的版本实际上比较复杂,目前有7、8、9、10四个版本并行发布,具体的各个版本的兼容信息我们可以通过官网查询。
2、Tomcat安装配置
tomcat的配置安装需要先在系统上配置好jdk环境,这里我们使用centos7.7版本的Linux系统和jdk8版本。
2.1 配置jdk8
我们首先到官网下载JDK8的安装包,这里我们选择tar.gz
格式的压缩包下载,需要注意建议先使用浏览器下载再使用工具传输到Linux上,因为下载需要登录注册账号。
接着我们解压将安装包解压到自己想要配置的jdk安装目录下,这里我们使用/home/目录
tar -zxvf jdk-8u241-linux-x64.tar.gz -C /home/
在/etc/profile
中添加以下三个参数并导入
JAVA_HOME=/home/jdk_1.8.0_241
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME CLASSPATH PATH
重新载入配置文件
source /etc/profile
检查配置是否生效,如不生效可以重启终端试试:
[root@tiny-yun ~]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
2.2 配置tomcat
tomcat的安装配置和上面几乎一样,由于我们已经在/etc/profile
中设定了全局的java环境变量,因此在tomcat中就不用再特殊配置,直接就会使用默认的全局变量。
这里我们还是使用官网
提供的tar.gz
压缩包来安装。
# tomcat可以直接使用wget下载
wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz
# 解压到安装目录并重命名
tar -zxvf apache-tomcat-8.5.53.tar.gz /home/
cd /home
mv apache-tomcat-8.5.53 tomcat-8.5.53
tomcat目录
首先我们来看一下tomcat中的主要目录:
- /bin 存放用于启动及关闭的文件,以及其他一些脚本。其中,UNIX 系统专用的
*.sh
文件在功能上等同于 Windows 系统专用的*.bat
文件。因为 Win32 的命令行缺乏某些功能,所以又额外地加入了一些文件。 - /conf 配置文件及相关的 DTD。其中最重要的文件是 server.xml,这是容器的主配置文件。
- /log 日志文件的默认目录。
- /webapps 存放 Web 应用的相关文件。
接着我们进入tomcat目录下的bin
目录就可以看到各种各样的脚本文件,主要分为bat
和sh
两类,其中bat主要是在windows系统上使用的,我们可以把它们删掉,接着我们执行一些version.sh
这个脚本就可以看到版本信息。
接下来我们来看一下和tomcat相关的几个变量:
JRE_HOME
这里我们可以看到JRE_HOME
这个变量是之前设置了的JAVA_HOME
环境变量。
- 如果同时定义了
JRE_HOME
和JAVA_HOME
这两个变量,那么使用的是JRE_HOME
- 如果只定义了
JAVA_HOME
,那么JRE_HOME
变量值就是JAVA_HOME
的变量值 - 如果两个变量都没定义,那么tomcat无法运行
前面我们提到过tomcat是使用Java编写的,这也就意味着它在运行的时候需要创建一个JVM虚拟机,所以如果没定义JAVA环境变量,tomcat是无法运行的
CATALINA_HOME
tomcat安装目录的根目录
CATALINA_BASE
tomcat实例运行的目录,默认情况下等于CATALINA_HOME
,如果我们需要在一台机器上运行多个tomcat实例,可以设置多个