Tomcat 安装及组件、目录结构介绍

2 Tomcat 基本介绍和安装

2.1 tomcat 历史

起始于 SUN 的一个 Servlet 的参考实现项目 Java Web Server ,作者是 James Duncan Davidson,后将项目贡献给了ASF。和 ASF 现有的项目合并,并开源成为顶级项目,官网http://tomcat.apache.org/

Tomcat 仅仅实现了 Java EE 规范中与 Servlet、JSP 相关的类库,是 JavaEE 不完整实现

著名图书出版商O’Reilly约稿该项目成员,Davidson希望使用一个公猫作为封面,但是公猫已经被另一本书使用,书出版后封面是一只雪豹。

《Tomcat权威指南》封面如下

1999 年发布初始版本是 Tomcat 3.0,实现了 Servlet 2.2 和 JSP1.1规范。

Tomcat 4.x 发布时,内建了 Catalina(Servlet容器)和 Jasper(JSP engine)等。

商用的有 IBM WebSphere、Oracle WebLogic(原属于BEA公司)、Oracle Oc4j、Glassfish、JBoss

等。

开源实现有Tomcat、Jetty、Resin。

2.1.2 Tomcat、Servlet、JSP 之间是什么关系

  • Tomcat:Servlet的容器,Servlet 运行在Tomcat容器当中,Servlet 容器有很多 (tomcat,Jboss,jetty)

  • JSP: 全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

  • Serlvet: 全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。

2.1.2.1 Servlet 是什么

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  • 性能明显更好。

  • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

  • Servlet 是独立于平台的,因为它们是用 Java 编写的。

  • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。

  • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互

2.1.2.2 servlet 的任务

Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。

  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。

  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。

  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。

  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

2.2 安装 Tomcat

2.2.1 通过 yum 安装

yum 安装 tomcat 是自动将依赖的 jdk 进行了安装

可以使用Centos7 yum源自带的安装。yum源中是Tomcat 7.0版本。安装完通过浏览器可以观察一下首页。

1、使用 yum 安装 tomcat yum install tomcat tomcat-admin-webapps tomcat-webapps -y

[10:28:45 root@a7 ~]#yum install tomcat-admin-webapps tomcat-webapps -y

2、创建测试 index.html 并启动 tomcat 进行测试

#我在/var/lib/tomcat/webapps/ROOT 这个目录创建了一个index.html的默认网页显示页面内容为hello magedu。

[10:32:54 root@a7 ~]#echo '<h1>hello magedu</h1>' > /var/lib/tomcat/webapps/ROOT/index.html

3、将 tomcat 设置为开机启动并且启动 tomcat

# 设置为开机启动
[10:46:22 root@a7 ~]#systemctl enable --now tomcat

# 端口 8080 打开
[10:48:24 root@a7 ~]#ss -ntl | grep 8080
LISTEN     0      100       [::]:8080                  [::]:*

4、测试:现在通过浏览器去访问A7主机的8080端口

5、访问 tomcat 默认主页面

访问地址:http://10.0.0.7:8080/index.jsp

2.2.2 使用清华源安装二进制 tomcat 10.0.0 版本

清华源地址: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-10/v10.0.0-M9/bin/

2.2.2.1 解决 JDK 环境问题

1、解决 jdk 环境问题,我们将甲骨文官方下载得 jdk-8u271-linux-x64.rpm 包上传至服务器

[11:03:23 root@a7 ~]#ll jdk-8u271-linux-x64.rpm 
-rw-r--r-- 1 root root 112994496 Oct 26 16:06 jdk-8u271-linux-x64.rpm

2、使用 yum 安装

[11:03:35 root@a7 ~]#yum install jdk-8u271-linux-x64.rpm -y

3、然后生成全局配置从而解决了jdk环境问题

# 编写一个全局变量
[11:04:44 root@a7 ~]#vim /etc/profile.d/jdk.sh
#!/bin/bash
export JAVA_HOME=/usr/java/default 
export PATH=$JAVA_HOME/bin:$PATH

# 使其生效
[11:05:43 root@a7 ~]#.  /etc/profile.d/jdk.sh

# 查看 jdk 版本为 1.8.0_271
[11:05:57 root@a7 ~]#java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

解决了 jdk 问题就要安装 tomcat

2.2.2.2 下载安装二进制 tomcat

到清华源下载 tomcat 10.0.0

1、复制下载地址通过 wget 进行下载

[11:06:06 root@a7 ~]#wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-10/v10.0.0-M9/bin/apache-tomcat-10.0.0-M9.tar.gz

2、创建一个 tomcat 的安装目录

[11:17:38 root@a7 ~]#mkdir /app/tomcat -p

3、指定解压到我们的/app/tomcat目录下

[11:19:32 root@a7 ~]#tar xf apache-tomcat-10.0.0-M9.tar.gz -C /app/tomcat/

4、进入/app/tomcat目录对我们解压的这个文件做一个tomcat的软链接

# 进入解压目录
[11:20:12 root@a7 ~]#cd /app/tomcat/

# 已经解压
[11:21:31 root@a7 tomcat]#ls
apache-tomcat-10.0.0-M9

# 生成 tomcat 软连接
[11:21:39 root@a7 tomcat]#ln -sv apache-tomcat-10.0.0-M9/ tomcat
‘tomcat’ -> ‘apache-tomcat-10.0.0-M9/’

# 通过查看软连接已经生成
[11:21:55 root@a7 tomcat]#ll
total 0
drwxr-xr-x 9 root root 220 Oct 28 11:20 apache-tomcat-10.0.0-M9
lrwxrwxrwx 1 root root  24 Oct 28 11:21 tomcat -> apache-tomcat-10.0.0-M9/

5、进入到 tomcat 的 bin 启动目录下全是 tomcat 的各种脚本,各个脚本介绍。

  • catalina.sh:用于启动和关闭tomcat服务器,是最关键的脚本。

  • startup.sh:使用不同的参数调用了该脚本,如 startup.bat 启动 tomcat 服务文件

  • shutdown.sh:使用不同的参数调用了该脚本,如果 shutdown.bat 停止 tomcat 服务文件

[11:25:18 root@a7 tomcat]#cd tomcat/bin/

6、创建一个 tomcat 的用户,并且等会使用该用户来进行运行 tomcat。

# 创建 tomcat 用户
[11:30:59 root@a7 bin]#useradd tomcat -r

# 授权 tomcat 用户文件权限
[11:31:43 root@a7 bin]#chown -R tomcat.tomcat /app/tomcat/tomcat/

7、启动 tomcat

# 通过临时切换 tomcat 用户 -c 执行命令启动 tomcat 启动脚本
[11:32:05 root@a7 bin]#su - tomcat -c '/app/tomcat/tomcat/bin/startup.sh'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /app/tomcat/tomcat
Using CATALINA_HOME:   /app/tomcat/tomcat
Using CATALINA_TMPDIR: /app/tomcat/tomcat/temp
Using JRE_HOME:        /usr/java/default
Using CLASSPATH:       /app/tomcat/tomcat/bin/bootstrap.jar:/app/tomcat/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

# 查看端口 8080 已经打开
[11:40:46 root@a7 bin]#ss -ntl | grep 8080
LISTEN     0      100       [::]:8080                  [::]:* 

8、浏览器访问测试

http://10.0.0.7:8080/index.jsp

已经是 Apache Tomcat/10.0.0-M9 版本

2.3 tomcat 目录结构

目录 说明
bin 服务启动、停止等相关
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录
work jsp编译后的结果文件

2.3.1 tomcat 目录结构分析

我们有必要去了解一下Tomcat目录结构,这有助与我们更好的学习Tomcat。

# tomcat 目录结构

[14:16:37 root@a7 ~]#ll /app/tomcat/tomcat/
total 128
drwxr-x--- 2 tomcat tomcat  4096 Oct 28 11:20 bin
-rw-r----- 1 tomcat tomcat 19008 Oct  6 20:27 BUILDING.txt
drwx------ 3 tomcat tomcat   254 Oct 28 11:40 conf
-rw-r----- 1 tomcat tomcat  5466 Oct  6 20:27 CONTRIBUTING.md
drwxr-x--- 2 tomcat tomcat  4096 Oct 28 11:20 lib
-rw-r----- 1 tomcat tomcat 60269 Oct  6 20:27 LICENSE
drwxr-x--- 2 tomcat tomcat   132 Oct 28 11:40 logs
-rw-r----- 1 tomcat tomcat  2333 Oct  6 20:27 NOTICE
-rw-r----- 1 tomcat tomcat  3372 Oct  6 20:27 README.md
-rw-r----- 1 tomcat tomcat  7011 Oct  6 20:27 RELEASE-NOTES
-rw-r----- 1 tomcat tomcat 16272 Oct  6 20:27 RUNNING.txt
drwxr-x--- 2 tomcat tomcat    30 Oct 28 11:20 temp
drwxr-x--- 7 tomcat tomcat    81 Oct  6 20:24 webapps
drwxr-x--- 3 tomcat tomcat    22 Oct 28 11:40 work
  • bin:该目录下存放的是可执行文件,有startup.batshutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOMEshutdawn.bat用来停止Tomcat

    [11:55:19 root@a7 tomcat]#ll /app/tomcat/tomcat/bin/
    
    -rw-r----- 1 tomcat tomcat   2020 Oct  6 20:24 shutdown.bat
    -rwxr-x--- 1 tomcat tomcat   1902 Oct  6 20:24 shutdown.sh
    -rw-r----- 1 tomcat tomcat   2022 Oct  6 20:24 startup.bat
    -rwxr-x--- 1 tomcat tomcat   1904 Oct  6 20:24 startup.sh
    ...省略...

  • conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

    • server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;

    • tomcatusers.xml:存储 tomcat 用户的文件,这里保存的是 tomcat 的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加 tomcat 用户,然后就可以在 Tomcat 主页中进入Tomcat Manager页面了;

    • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!

    • context.xml:对所有应用的统一配置,通常我们不会去配置它。

[11:55:29 root@a7 tomcat]#ll /app/tomcat/tomcat/conf/
-rw------- 1 tomcat tomcat   7588 Oct  6 20:27 server.xml
-rw------- 1 tomcat tomcat 172576 Oct  6 20:27 web.xml
...省略...
  • lib:Tomcat 的类库,里面是一大堆 jar 文件。如果需要添加 Tomcat 依赖的 jar 文件,可以把它放到这个目录中,当然也可以把项目依赖的 jar 文件放到这个目录中,这个目录中的 jar 所有项目都可以共享之;

[14:13:21 root@a7 tomcat]#ll lib/
total 9572
-rw-r----- 1 tomcat tomcat   13426 Oct  6 20:24 annotations-api.jar
-rw-r----- 1 tomcat tomcat   54695 Oct  6 20:24 catalina-ant.jar
-rw-r----- 1 tomcat tomcat  123402 Oct  6 20:24 catalina-ha.jar
-rw-r----- 1 tomcat tomcat 1683573 Oct  6 20:24 catalina.jar
...省略...
  • logs:这个目录中都是日志文件,记录了 Tomcat 启动和关闭的信息,如果启动 Tomcat 时有错误,那么异常也会记录在日志文件中。

[14:13:27 root@a7 tomcat]#ll logs/
total 24
-rw-r----- 1 tomcat tomcat 5911 Oct 28 11:40 catalina.2020-10-28.log
-rw-r----- 1 tomcat tomcat 5911 Oct 28 11:40 catalina.out
-rw-r----- 1 tomcat tomcat  408 Oct 28 11:40 localhost.2020-10-28.log
-rw-r----- 1 tomcat tomcat  639 Oct 28 11:42 localhost_access_log.2020-10-28.txt
  • temp:存放Tomcat的临时文件,这个目录下的东西可以在停止 Tomcat 后删除!

[14:16:39 root@a7 ~]#ll /app/tomcat/tomcat/temp/
total 0
-rw-r----- 1 tomcat tomcat 0 Oct  6 20:24 safeToDelete.tmp
  • webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是 tomcat 自带的项目。其中 ROOT 是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是 ROOT项目。也就是说 ROOT 目录下的类似于 nginx 默认的html页面文件

[14:17:08 root@a7 ~]#ll /app/tomcat/tomcat/webapps/
total 4
drwxr-x--- 15 tomcat tomcat 4096 Oct 28 11:20 docs
drwxr-x---  6 tomcat tomcat   83 Oct 28 11:20 examples
drwxr-x---  5 tomcat tomcat   87 Oct 28 11:20 host-manager
drwxr-x---  6 tomcat tomcat  114 Oct 28 11:20 manager
drwxr-x---  3 tomcat tomcat  283 Oct 28 11:20 ROOT
  • work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。

    1、现在我们进入work目录下将Catalina文件删除,然后我们通过浏览器对A7主机的8080端口进行访问

# 查看 work 目录下有个 Catalina 文件
[14:18:17 root@a7 ~]#ll /app/tomcat/tomcat/work/
total 0
drwxr-x--- 3 tomcat tomcat 23 Oct 28 11:40 Catalina

# 删除 Catalina 文件
[14:22:28 root@a7 ~]#rm -fr /app/tomcat/tomcat/work/Catalina/

# 查看 Catalina 文件已被删除
[14:22:48 root@a7 ~]#ll /app/tomcat/tomcat/work/
total 0

2、浏览器访问 http://10.0.0.7:8080/index.jsp

3、再次使用ll命令对work目录下,会发现有又生成了Catalina文件

[14:22:56 root@a7 ~]#ll /app/tomcat/tomcat/work/
total 0
drwxr-x--- 3 tomcat tomcat 23 Oct 28 14:24 Catalina

 

你应该已经发现,访问 ROOT 根项目时无需给出项目名,其实 localhost 是一个主机名,每个主机都会对应一个项目空间,localhost 对应的就是 Tomcat 目录下的 webapps,每个项目空间都可以有一个名为 ROOT 项目,这个 ROOT 项目被访问时无需给出项目名称。

2.3.2 tomcat 目录结构之重点目录

bin、conf、webapps、work

  • bin:目录中东西我们只关心启动和停止 Tomcat,现在大家也应该掌握了!

  • webapps:目录下存放的是项目,每个文件夹都对应一个项目,而且在访问项目时,其中包含了项目名,而项目名往往都对应项目目录名。这个也应该可以掌握了!还有就是 JavaEE Web 项目的目录结构,这个必须必须背下来!

  • work:这个东西有点小难度,现在只需要知道它存放的文件是通过 webapps 目录下的项目在运行时产生的,最终运行的都是 work 目录下的文件。这个目录下的东西可以删除,然后再次运行时还会产生!

2.4 tomcat 简介

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,它早期的名称为 catalina,后来由 Apache、Sun 和其他一些公司及个人共同开发而成,并更名为Tomcat。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的 Web 应用服务器。Tomcat 是应用(java)服务器,它只是一个 servlet 容器,是 Apache 的扩展,但它是独立运行的。

Tomcat 不是一个完整意义上的 Jave EE 服务器,它甚至都没有提供对哪怕是一个主要 Java EE API(接口)的实现;但由于遵守 apache 开源协议,tomcat 却又为众多的 java 应用程序服务器嵌入自己的产品中构建商业的 java应用程序服务器,如 JBoss 和 JOnAS 。尽管 Tomcat 对 Jave EE API 的实现并不完整,然而很企业也在渐渐抛弃使用传统的 Java EE 技术(如EJB)转而采用一些开源组件来构建复杂的应用。这些开源组件如 Structs、Spring 和Hibernate,而 Tomcat 能够对这些组件实现完美的支持。

Tomcat的架构:

Tomcat 6 支持 Servlet 2.5 和 JSP 2.1 的规范,它由一组嵌套的层次和组件组成,一般可分为以下四类:

  • 顶级组件:位于配置层次的顶级,并且彼此间有着严格的对应关系;

  • 连接器:连接客户端(可以是浏览器或Web服务器)请求至Servlet容器,

  • 容器:包含一组其它组件;

  • 被嵌套的组件:位于一个容器当中,但不能包含其它组件;

2.4.1 Tomcat 常见组件

服务类型组件

1、服务器(server):Tomcat 的一个实例,通常一个 JVM(java虚拟机)只能包含一个 Tomcat 实例;因此,一台物理服务器上可以在启动多个 JVM 的情况下在每一个 JVM 中启动一个 Tomcat 实例,每个实例分别属于一个独立的管理端口。这是一个顶级组件。

2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个 server 可以包含多个 service 组件,但通常情下只为一个service 指派一个 server。

连接器类组件:

1、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至 Servlet 容器内的 Web 应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是 HTTP 协议的 8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于 HTTP/1.1 的 Coyote 。同时,Tomcat 也支持 AJP、JServ 和 JK2 连接器。

容器类组件:

1、引擎(Engine):引擎通是指处理请求的 Servlet 引擎组件,即 Catalina Servlet 引擎,它检查每一个请求的HTTP 首部信息以辨别此请求应该发往哪个 host 或 context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

2、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。

3、上下文(Context):Context 组件是最内层次的组件,它表示Web应用程序本身。配置一个 Context 最主要的是指定 Web 应用程序的根目录,以便 Servlet 容器能够将用户请求发往正确的位置。Context 组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。

被嵌套类(nested)组件:

这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。

1、阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于 Servlet 规范中定义的过滤器。Valve 可以定义在任何容器类的组件中。Valve 常被用来记录客户端请求、客户端 IP 地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储 valve 记录请求客户端请求数据包中的 HTTP 首部信息和 cookie 信息文件中,响应转储 valve 则记录响应数据包首部信息和cookie信息至文件中。

2、日志记录器(Logger):用于记录组件内部的状态信息,可被用于除 Context 之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的 Logger 将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的 Logger 组件。

3、领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm 的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

4、引擎(Engine):引擎是指处理请求的 Servlet 引擎组件,即 Catalina Servlet 引擎,它从 HTTPconnector 接收请求并响应请求。它检查每一个请求的 HTTP 首部信息以辨别此请求应该发往哪个 host 或 context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个

host组件

Tomcat连接器架构:

基于 Apache 做为 Tomcat 前端的架构来讲,Apache 通过 mod_jk、mod_jk2 或 mod_proxy 模块与后端的Tomcat 进行数据交换。而对 Tomcat 来说,每个Web容器实例都有一个Java语言开发的连接器模块组件,在Tomcat6中,这个连接器是org.apache.catalina.Connector类。这个类的构造器可以构造两种类别的连接器:HTTP/1.1负责响应基于HTTP/HTTPS协议的请求,AJP/1.3负责响应基于AJP的请求。但可以简单地通过在server.xml配置文件中实现连接器的创建,但创建时所使用的类根据系统是支持APR(Apache Portable Runtime)而有所不同。

APR 是附加在提供了通用和标准 API 的操作系统之上一个通讯层的本地库的集合,它能够为使用了 APR 的应用程序在与 Apache 通信时提供较好伸缩能力时带去平衡效用。 同时,需要说明的是,mod_jk2 模块目前已经不再被支持了,mod_jk 模块目前还被 apache 支持,但其项目活跃度已经大大降低。因此,目前更常用 的方式是使用 mod_proxy 模块。

点赞