共计 9202 个字符,预计需要花费 24 分钟才能阅读完成。
本文目录:
1. 背景知识
1.1 Java 和 jdk 概念
1.2 jsp、servlet 是什么
1.3 web 服务器、web 容器、应用程序服务器
1.4 tomcat 体系结构
2. 安装 tomcat
2.1 安装 jdk
2.2 安装 tomcat
1. 基础背景知识
1.1 java 和 jdk 概念
无论是何种程序,要能在计算机上运行,必须能转换为二进制的机器语言才能和硬件进行交互,在机器语言的上层是汇编语言,再上层是 C /C++ 这样较底层的语言,由于它们严重依赖于平台架构,所有一般只能运行在程序源代码已编译的机器上,可移植性比较差。
Java 是一种面向对象的语言,它的层次比 C 更高一点,层次指的是离硬件更远一点。它将写好的程序文件 (.java) 通过 java 编译器 javac 编译成字节码类型的 class 文件(.class),在编译过程中涉及词法分析、语法分析、语义分析、字节码生成等过程,最终生成字节码的 class 文件。class 文件是 Java 的类文件,是编译成功后的字节码文件,字节码由 Java 虚拟机 JVM 解释执行,它将每一条字节码送给解释器,再翻译成机器语言,从而在特定的机器上运行。Java 通过 JVM 的方式实现了一次编译到处运行的功能。
即:
源码 XXX.java-->javac 编译器 --> 字节码 XXX.class-->JVM--> 机器语言(依赖于不同平台)--> 执行
JRE(Java Runtime Environment)是包含了 JVM 和其他一些简单功能的 JAVA 运行环境,它适用于只运行 java 程序时。JDK(Java Development Kit)比 JRE 包含了更多东西,它除了能作为 JAVA 运行环境,还提供了很多用于开发的工具,所以它适用于开发程序时使用。
JAVA SE 是 java 开发标准版,里面有 JDK,Java EE 是企业版,本质上 ee 只是比 se 多提供了几个类库而已。
1.2 jsp、servlet 是什么
在 web 应用程序上,早期 Java 的实现方式是服务器端放置应用程序,客户端访问时将其下载到客户端本地并执行,这样不仅不安全,而且要求客户有 java 运行环境,这种实现方式是 applet。
与 applet 相对的是 servlet,但它是服务端程序。后来,java 将应用程序放在服务器端,客户端请求此应用程序时,服务端通过 servlet 类库分析 http 协议,将请求的应用程序在服务端执行,然后将结果组织起来返回给客户端,但此时 servlet 能分析的 http 协议非常简单,且和 html 的组织方式非常不友好,它要求 java 程序员首先得懂 html 开发,于是后来出现了 JSP 类库。
JSP 可以简单的将 java 代码嵌入在 html 文档中,它们能够很友好地结合,结合后的文档类型为.jsp 文件。当客户端请求应用程序资源时,JSP 类库负责解析.jsp 文件中的 jsp 部分并通过 jasper 组件将其翻译成 servlet 代码,然后再交由 servlet 来编译并交给 JVM 来执行 。 实际上,jsp 和 servlet 本质上是一样的,jsp 类只不过是继承于 servlet 类并添加了一些和 html 友好结合的特性,最终它还是要翻译成 servlet 代码。
事实上,JSP 是 Servlet 的一种特殊形式,每个 JSP 页面就是一个 Servlet 实例,Servlet 再负责响应用户请求。JSP 其实也是 Servlet 的一种简化,使用 JSP 时,其实还是使用 Servlet,因为 Web 应用中的每个 JSP 页面都会由 Servlet 容器生成对应的 Servlet。对于 Tomcat 而言,JSP 页面生成的 Servlet 放在 work 路径对应的 Web 应用下。
1.3 web 服务器、web 容器、应用程序服务器
web 服务器用于提供 web 服务,要求能解析 http 协议,通常认为提供静态内容的服务器是 web 服务器。如 apache httpd、nginx 等。
对于 java 而言,web 容器是能提供 servlet 容器的服务器,它们是等价的概念。常见的有 tomcat、weblogic、websphere、jboss。其中 tomcat 只提供 servlet 容器,它们在功能上是等价的。除 tomcat 外,后面 3 种 web 容器还提供除 servlet 容器外的 EJB 容器,专用于大型分布式程序开发。
应用程序服务器是用于提供应用服务的服务器。这是业务逻辑上的概念划分。更具体一点的说,它提供 WEB 容器(servlet 容器)、EJB 容器以及其他功能。
它们之间的关系和功能大致如下:web 服务器提供 web 服务,主要处理 http 请求并响应给客户端,并可以将动态请求委托给其他程序,如 cgi 脚本、jsp 脚本、asp 脚本等进行处理;web 容器即 servlet 容器主要负责处理基于 http 请求的动态 jsp 内容;EJB 容器主要提供和后端数据库服务、其他服务进行交互的功能;应用服务器通常来说包括 servlet 容器或 EJB 容器,它们都运行于支持 Java 的应用服务器中,因此 tomcat/weblogic/websphere/jboss 都算是应用服务器。
1.4 tomcat 体系结构
tomcat 是 jdk+servlet(严格地说是 +jsp)实现的精简版的 java ee,由于它只在 jdk 的基础上附加了 jsp 和 servlet 类库,所以它的应用范围主要是 web 应用。tomcat 项目目前由 apache 软件基金会维护。
它是一种应用程序服务器,只提供 servlet 容器,同时还提供 apache 解析静态 HTML,只不过之它的处理能力不如独立的 apache 服务器。类似的应用程序服务还有 websphere/weblogic/jetty/resin/jboss 等,它们都是在 jdk 基础上附加各种类库实现不同程度的 java ee(tomcat=jdk+servlet)。
对于 tomcat 来说,它高度模块化,通过各个组件实现各种功能。它的体系结构如下图所示:
其中:
- server 是顶级类,一个 server 算是一个 tomcat 实例,在此层次中可定义 tomcat 服务的监听端口。
- service 是 server 下的子组件,用于封装绑定 connector 和 containor,并为它们提供一个名称属性。有了 service 就可以提供相关的服务,如监听 TCP 连接请求、处理 http 请求。注意 server 是管理整个 tomcat 实例的层次,它和提供服务没有关系。
- connector 是连接器,定义 http 协议 (默认) 以及该协议的监听端口。连接器用于 接收客户端请求并将 containor 处理的数据返回给客户端。
- containor 称为容器,它和 connector 连接器进行绑定。该容器内有 4 个子容器,包括:engine 容器、host 容器、context 容器、Wrapper 容器。容器用于分析、处理请求,并构建响应给 connector 以发送给客户端。它和 connector 是 tomcat 的心脏组件。
- engine 容器定义 servlet 引擎,用于定义引擎的名称、默认的虚拟主机。引擎用于分析 http 请求并将请求转发给对应的虚拟主机。
- host 容器用于定义虚拟主机。
- context 容器用于定义 webapp,一个 context 定义一个 webapp。它是真正管理 servlet 容器的层次。
- wrapper 容器对应的是真正的 servlet 容器,一个 wrapper 代表一个 servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,一个 context 只能包含一个 wrapper。在配置文件中,无法配置该容器的属性。
还有一些其他组件,如 session 管理组件、JMX 等。
一个 server 可以有多个 service。一个 service 可以有多个 connector 和唯一的 containor。containor 是容器类,从 containor 层次开始,真正进入 servlet 容器相关的过程 。 它包含了唯一的 engine 容器,engine 容器中包含了一个或多个 host 容器,host 容器中包含了一个或多个 context 容器,context 容器中包含了唯一的 wrapper。它们的组织结构大致如下:
<server>
<service>
<connector />
<engine>
<host>
<context />
<context />
</host>
<host>
<context />
</host>
</engine>
</service>
<service>
......
</service>
</server>
2. 安装 tomcat
tomcat 依赖于 jdk,所以需要先安装 jdk。tomcat 和 jdk 版本之间存在对应关系,应该考虑好要安装哪个版本的 jdk 以及哪个版本的 tomcat。官方给出的对应关系网址为:https://tomcat.apache.org/whichversion.html。以下是到 tomcat 9.x 版本和 jdk 的对应表。
本文 jdk 以 jdk-8u131 为例,表示版本为 8 的第 131 次更新,tomcat 以 apache-tomcat-8.5.14 为例。
2.1 安装 jdk
下载地址:http://www.Oracle.com/technetwork/java/javase/downloads/index.html
以 rpm 包的为例。
shell> yum localinstall -y jdk-8u131-linux-x64.rpm
安装路径为 /usr/java。在该路径有 3 个文件,其中两个是版本号的软链接。
shell> ll /usr/java
total 4
lrwxrwxrwx 1 root root 16 May 4 22:54 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096 May 4 22:54 jdk1.8.0_131
lrwxrwxrwx 1 root root 22 May 4 22:54 latest -> /usr/java/jdk1.8.0_131
通过这种软链接方式,以后有新版 jdk 要安装,直接改 latest 的链接对象即可。
在安装目录的 Bin 目录下,有很多可执行程序,包括 javac(java 编译器),java(java 主程序,其中包括 JVM),jps(查看当前 java 进程及 pid,所以可以查看 java 进程数)。
shell> ls latest/bin/
appletviewer idlj java javafxpackager javapackager jcmd jdb jinfo jmc
jrunscript jstat keytool pack200 rmid serialver unpack200 xjc ControlPanel
jar javac javah java-rmi.cgi jconsole jdeps jjs jmc.ini jsadebugd jstatd
native2ascii policytool rmiregistry servertool wsgen extcheck jarsigner
javadoc javap javaws jcontrol jhat jmap jps jstack jvisualvm orbd rmic
schemagen tnameserv wsimport
执行 java -version
可以验证 jdk 工具是否安装成功。
[root@xuexi jdk1.8.0_131]# bin/java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
然后再设置 JAVA_HOME 环境变量并导出 java 程序所在目录的 PATH 环境变量。
shell> echo 'export JAVA_HOME=/usr/java/latest' > /etc/profile.d/jdk.sh
shell> echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.sh
shell> . /etc/profile.d/jdk.sh
shell> java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
2.2 安装 tomcat
直接解压即可。
shell> tar xf apache-tomcat-8.5.14.tar.gz -C /usr/local/
shell> ln -s /usr/local/apache-tomcat-8.5.14 /usr/local/tomcat
安装完后,有以下几个文件和目录。
shell> cd /usr/local/tomcat
[root@xuexi tomcat]# ll -d */
drwxr-x--- 2 root root 4096 May 4 23:36 bin/
drwx------ 2 root root 4096 Apr 13 20:58 conf/
drwxr-x--- 2 root root 4096 May 4 23:36 lib/
drwxr-x--- 2 root root 4096 Apr 13 20:55 logs/
drwxr-x--- 2 root root 4096 May 4 23:36 temp/
drwxr-x--- 7 root root 4096 Apr 13 20:56 webapps/
drwxr-x--- 2 root root 4096 Apr 13 20:55 work/
logs 目录是日志目录。temp 是临时目录。webapps 是存放 web 程序的根目录。work 目录是存放编译后生成的 class 文件的目录。bin 目录下有很多脚本文件,有.sh 脚本,也有.bat 脚本。
[root@xuexi tomcat]# ls bin/
bootstrap.jar catalina.sh commons-daemon.jar configtest.bat daemon.sh digest.sh setclasspath.sh shutdown.sh startup.sh tomcat-native.tar.gz tool-wrapper.sh version.sh
catalina.bat catalina-tasks.xml commons-daemon-native.tar.gz configtest.sh digest.bat setclasspath.bat shutdown.bat startup.bat tomcat-juli.jar tool-wrapper.bat version.bat
其中:
- catalina.sh 类似于 SysV 服务管理脚本,支持 stop、start 和 configtest,但不支持 restart 和 reload,如
catalina.sh start
。 - startup.sh 等价于
catalina.sh start
。 - shudown.sh 等价于
catalina.sh stop
。 - configtest.sh 等价于
catalina.sh configtest
。 - daemon.sh 是通过指定各种 PATH 参数将 tomcat 以 daemon 的方式运行,要指定的参数 path 较多。catalina.sh 执行 start 也是在后台运行 tomcat 的,所以没有必要使用此脚本来实现 daemon 模式的 tomcat。
在安装目录下的 conf 目录下有几个配置 xml 格式的配置文件。
[root@xuexi tomcat]# ls conf/
catalina.policy catalina.properties context.xml jaspic-providers.xml jaspic-providers.xsd logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml
其中 server.xml 是主配置文件,tomcat-users.xml 是状态监控和 gui 界面管理的身份认证配置文件,后面会有相关配置说明,web.xml 是为 webapp 提供默认属性配置的文件,在 tomcat 启动时会先加载 webapp 属性的自定义配置文件 /WEB-INF/web.xml,然后再加载此文件提供默认属性,一般此文件都不用任何修改,要定义属性时修改 /WEB-INF/web.xml 即可。对于此处的 web.xml,唯一需要知道的是其内设置了主页文件名。
[root@xuexi tomcat]# grep -C 1 index conf/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
安装后,设置环境变量。
echo "export CATALINA_HOME=/usr/local/tomcat" > /etc/profile.d/tomcat.sh
echo 'export PATH=$CATALINA_HOME/bin:$PATH' >> /etc/profile.d/tomcat.sh
. /etc/profile.d/tomcat.sh
执行 bin 目录下的 version.sh 检查 PATH 环境变量是否正确。
[root@xuexi bin]# version.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.14
Server built: Apr 13 2017 12:55:45 UTC
Server number: 8.5.14.0
OS Name: Linux
OS Version: 2.6.32-504.el6.x86_64
Architecture: amd64
JVM Version: 1.8.0_131-b11
JVM Vendor: Oracle Corporation
最后启动 tomcat。
[root@xuexi tomcat]# catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@xuexi tomcat]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1879/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1415/master
tcp 0 0 :::22 :::* LISTEN 1879/sshd
tcp 0 0 ::1:25 :::* LISTEN 1415/master
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 15212/java
tcp 0 0 :::8009 :::* LISTEN 15212/java
tcp 0 0 :::8080 :::* LISTEN 15212/java
[root@xuexi tomcat]# curl -I http://localhost:8080
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 17 Oct 2017 16:49:10 GMT
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
Ubuntu 16.04 下安装 Tomcat 8.5.9 http://www.linuxidc.com/Linux/2017-06/144809.htm
Ubuntu 16.04 安装 Tomcat 8 图解 http://www.linuxidc.com/Linux/2017-10/147773.htm
Tomcat 单机多实例部署 - 多项目部署 http://www.linuxidc.com/Linux/2017-10/147259.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147942.htm