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开发(实际上现在还是如此,java程序员至少要懂简单的html/css/javascript等前端技术),于是后来出现了JSP类库。

JSP可以简单的将java代码嵌入在html文档中,它们能够很友好地结合,结合后的文档类型为.jsp文件。当客户端请求应用程序资源时,JSP类库负责解析.jsp文件中的jsp部分并通过jasper组件将其翻译成servlet的java源代码,然后再编译成class文件并交给JVM来执行。实际上,jsp的本就就是servlet,jsp类只不过是继承于servlet类并添加了一些和html友好结合的特性,最终它还是要翻译成servlet代码。

JSP的本质还是Servlet,每个JSP页面就是一个Servlet对象(当然也可能引用了其他servlet对象),Servlet再负责响应用户的动态请求数据(其实也包括静态数据,因为jasper翻译jsp代码时,静态标签也被翻译到servlet的java源文件中以待输出)。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。

考虑到tomcat和httpd、nginx等http服务程序的对比,有两点需要明确:

(1).一个java程序只有一个进程,但是可以有多个线程,也就是说java程序的开发是基于线程的。那唯一的进程就是JVM进程,每个应用程序都开启一个JVM进程,根据开发时设计的多线程代码,在这个JVM进程中会启动多个线程。它不像httpd或nginx,能开启多进程(对于tomcat而言,这意味着多个不同的应用程序甚至意味着开启多个tomcat实例)。

(2).tomcat可以处理动态请求,也可以处理静态资源请求。但无论是动态资源,还是静态资源的请求,都是经过servlet处理并响应给客户端的,只不过请求静态资源时使用的是默认的servlet。虽然它能像httpd和nginx一样处理静态资源,但显然,它既要处理动态请求,又要处理静态请求,压力会很大。因此tomcat前一般使用httpd或nginx专门处理静态请求,而动态请求则通过反向代理的方式代理至tomcat。

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

进入 Tomcat 官方下载地址 选择合适版本下载,并解压到本地。

Windows

添加环境变量 CATALINA_HOME ,值为 Tomcat 的安装路径。

进入安装目录下的 bin 目录,运行 startup.bat 文件,启动 Tomcat

Linux / Unix

下载地址: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进程数)。

执行java -version可以验证jdk工具是否安装成功。

[root@andyoung 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.shshell> 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@andyoung 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@andyoung 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@andyoung 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@andyoung 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@andyoung 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@andyoung 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@andyoung 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@andyoung 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(一):背景知识和安装tomcat相关推荐

  1. cent 8.0 安装tomcat 9.0_Linux服务器:安装tomcat并部署war应用

    1 前言 现在一般情况下,很少需要单独部署``tomcat,毕竟Spring boot打的jar包,可以用自带的内置tomcat`,用这个不香吗? 不过有些项目还是使用Spring MVC的,所以还是 ...

  2. centos7中使用yum安装tomcat以及它的启动、停止、重启

    centos7中使用yum安装tomcat 介绍 Apache Tomcat是用于提供Java应用程序的Web服务器和servlet容器. Tomcat是Apache Software Foundat ...

  3. Linux | Liunx安装Tomcat(Ubuntu版)

    目录 一.下载并上传Tomcat压缩包到Ubuntu 1.1 下载并解压 1.2 执行 startup.sh 文件 二.验证Tomcat启动是否成功 2.1 查看启动日志 2.2 查看启动进程 三.W ...

  4. 本地安装Tomcat详细步骤

    本地安装Tomcat详细步骤 Win10下载安装Tomcat及配置环境变量 一.官网下载Tomcat 二.配置环境变量 三.安装Tomcat 四.检验是否安装成功 五.注意事项 六.问题与解决 Win ...

  5. 在linux下安卸载tomcat,Linux下卸载与安装配置Tomcat

    1.卸载 找到tomcat的安装目录 rm -rf /usr/local/tomcat/apache-tomcat-7.0.96 2.安装 Tomcat下载地址:http://tomcat.apach ...

  6. Tomcat详解(七)——Tomcat使用https配置实战

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Tomcat使用https配置实战. 一.tomcat证书配置 首先,要实现https,就必须先具有tomcat证书.我们在安装tomcat的时 ...

  7. cent 8.0 安装tomcat 9.0_Tomcat部署及优化

    原文章地址:https://www.cnblogs.com/happy-king/p/9193257.html 一.Tomcat安装部署 一.安装jdk和Tomcat 1.上传jdk和Tomcat m ...

  8. 在Windows下如何安装Tomcat服务器搭建

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选服务器. 在Windows下安 ...

  9. Tomcat在Linux上的安装

    1.下载JDK和Tomcat jdk下载地址:    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

最新文章

  1. Docker 1.3.2发布:修复重大安全问题
  2. 更新字典 (Updating a Dictionary,UVa12504)
  3. 高品质低成本 佳能发布4款加墨式打印新品
  4. kafka集群安装配置
  5. Python条件分支语法
  6. Windows小技巧 – Win+R提高Windows使用效率
  7. red5流媒体服务器安装
  8. 支持ipv6路由器有什么优点?路由器应用了哪些技术?
  9. [电影]《指环王》新老三部曲完全赏析(王者归来)
  10. C# 四舍五入 (解决四舍六入五成双的问题)
  11. Flask教程(十六)RESTful-API
  12. python magic number_编程中的「魔数」(magic number)是什么意思?平时我们能接触到哪些魔数?...
  13. 获取保存在路由器中的ADSL账号和密码
  14. 关于Acad的cui(研究adobe pdf)
  15. Java 知识点整理-7.StringBuffer类+冒泡排序+选择排序+二分法+Arrays类+基本数据类型的包装类
  16. php抓取天眼查,python用xpath采集天眼查内容,有反爬,zip拼数据
  17. DEDEcms终极SEO优化教程
  18. 浙大计算机复试上机成绩,浙大计算机研究生复试上机考试-2006年
  19. 100ml干胶能带上地铁吗_定型喷雾可以带上地铁吗
  20. Postgresql 1小时快速入门

热门文章

  1. Cell:无症状新冠患者阳性持续105天
  2. QIIME 2教程. 14数据评估和质控q2-quality-control(2020.11)
  3. Prodigal:原核基因识别和翻译起始位点鉴定
  4. python使用matplotlib可视化函数曲线、设置y轴为对数坐标(log scale)、默认情况下坐标轴为线性坐标
  5. R语言配对图可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接和左连接(left join)、配对图可视化(根据分类变量的值为散点图上的数据点添加颜色)
  6. R安德森-达令检验( Anderson-Darling Test)
  7. 高斯混合模型图像聚类、图像生成、可视化分析实战
  8. 生物信息学是干啥的?
  9. GATK 无法下载的问题
  10. 三代测序的基本原理、组装方法和应用场景