Tomcat8.5简介
1. Tomcat简介[1]
Apache Tomcat是Servlet/JSP的容器。Tomcat8.5 实现了由 JCP 组织 (Java Community Process) 制定的Servlet3.1 规范[2]和 JSP2.3 (JavaServer Pages2.3) [3]规范,并包含很多额外的功能,是开发和部署web应用程序和web服务的有用平台。
2. 一个简单的webapp应用
2.1 简介
下面简单介绍使用Tomcat的基本步骤:安装和配置开发环境、按目录组织源代码以及构建和测试应用。主要介绍在不使用IDE,只使用文本编辑器和命令行工具时,如何开发调试应用。介绍的方法是通用的,你可以很容易将它们用在Windows和Unix开发环境下。如果你使用IDE工具,需要将下面的方法和建议进行转换,以在使用IDE工具时适用。
2.2 环境安装
2.2.1 JDK
Tomcat8.5需要运行Java 7或更新的版本上。你可以在官方上下载适用于不同平台的JDK。
2.2.2 Tomcat
在官网上下载Tomcat8.5。
2.2.3 Ant
你可以在官网[4]上下载Ant构建工具。下载的Ant版本应与其它的软件的版本兼容。我下载的是源码包 apache-ant-1.10.13-src.tar.gz 。Ant的使用可参考官方文档。Ant的源码用java写的,源码包下载好后,需要先运行安装目录下的build.bat,运行后会生成“\apache-ant-1.10.13\bootstrap”目录。然后,运行“\apache-ant-1.10.13\bootstrap\bin\ant.bat”即可进行项目构建。项目构建的配置在build.xml文件中,比如可将项目构建分为编译、打包、部署等步骤。
如果你想在shell窗口中直接使用ant命令,需要将ant的安装目录下的\bootstrap\bin\目录配置在系统环境变量PATH中。
2.2.4 Maven
Maven是Yiddish语(犹太人的语言),意为知识的积累者,起源于人们对简化一个java项目构建的尝试。这个项目包含几个工程,每个工程有独立的Ant构建文件,每个构建文件略有不同。该项目使用CVS进行版本控制。我们希望有一个标准方式去构建这个项目,一个清晰的对项目内容的定义,一个简单地发布项目的方式,一个轻松地在几个项目间共享jar包的方式[5]。
这使得Maven诞生了,它可以用于构建和管理所有java项目。我们希望java开发者的日常工作更简单,对java项目有更好的理解。Maven帮助开发者在更短时间内掌握项目开发的完整状态。
在官网下载Maven的安装包,我下载的是apache-maven-3.8.8。如果你想在shell中直接使用mvn命令,需要将Maven的安装目录下的bin目录配置在系统环境变量PATH中。Maven使得构建项目变得更简单[10]。你只需要按照Maven对源代码目录层级结构要求创建项目,Maven对源代码目录的层级结构要求如图1。创建Maven项目后,既可以使用mvn compile等命令对项目进行编译(compile)、打包(package)、部署(deploy)等。默认情况下maven使用老版本的maven-compiler-plugin插件进行编译,它与java9及以后版本不兼容;如果你使用java9及以上,你需要在pom进行配置,使用maven-compiler-plugin的3.6.0以上版本,如图2所示。
my-app
|-- pom.xml
|-- src
|-- main
`|-- java
`-- com
`-- mycompany
`-- app
`-- App.java
|-- webapp
-- WEB-INF
-- web.xml
-- index.jsp
|-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
图1 Maven对源代码目录的要求
<properties>
<maven.compiler.release>11</maven.compiler.release>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</pluginManagement>
</build>
图2 在pom进行配置,使用maven-compiler-plugin的3.6.0以上版本(默认使用老版本)
如果你在pom.xml配置了依赖,在mvn compile的时候会将依赖下载到指定的mvn仓库中,mvn仓库应在maven安装目录下/conf/setting.xml中进行配置,如果未配置,maven仓库的默认目录是“C:\Users\用户名\.m2\repository”。
如果pom.xml中引用的依赖包在编译的时候被使用,那么这些jar包在mvn package时会被打包到war包的/WEB-INF/lib目录下。

图3 执行mvn compile时被引用的jar包会被打包进/WEB-INF/lib目录下
2.2.5 Git
除了上面的工具以外,强烈建议下载安装源码控制系统,比如Git、Subversion和CVS等。通过这些工具检出源码,提交修改代码;你需要安装服务端软件或者向云提供商申请账户。我本地安装的是git version 2.13.0。如果你想在shell中直接使用git命令,需要将git的安装目录下的bin目录配置在系统环境变量PATH中。
2.3 部署文件目录[6]
在介绍源码目录前,先检查web应用的运行时目录是很有必要的。运行时目录在servlet2.2以前不同的web服务器下通常是不同的;在servlet2.2及以后版本规定了Web应用发布物(archive)的标准格式。Web发布物可以是war文件(tomcat会自动解压),也可以是解压后的文件;但项目文件的目录必须满足规定的层级结构。
当应用部署到tomcat后,tomcat为应用分配context路径(context path)。context路径是可以进行配置的(可在/conf/server.xml中配置),如果你未配置,则tomcat自动分配一个与发布物文件同名的context路径。context路径是项目的根目录。根目录下项目的结构要求如图4。
context path
|--*.html,*.jsp等
|--WEB-INF
|--web.xml 应用部署描述文件
|--classes
|--lib 包含项目使用的jar包
图4 servlet规范定义的部署文件目录
web.xml是应用部署的描述文件,它定义了服务器需要知道的关于应用的除context path外的所有配置。它描述了组成应用的sevlet和其它组件,应用的启动参数以及容器管理的安全性(比如session超时时间配置)。servet 2.3的API规范中定义了web.xml文件的格式,有一个基础的web.xml可供参考[7]。一些开发工具为自动为用户创建web.xml文件。
2.4 源文件目录[8]
源文件目录可以是随意的。但我们建议如图5。强烈建议将源文件目录和部署文件目录区分开,这便于对源文件的管理,包括文件复制、执行应用打包等。源文件目录中的dist文件夹应是独立的,不要放在源代码的文件夹(比如src和web)下。如果你使用Maven工具,源文件目录应按照Maven的要求来(详见2.2.4)节,Maven对目录的要求与官方建议的目录有所不同,但是也是满足官方所表述的原则的。
project path
|--docs
|--src
|--web
--WEB-INF
|--dist 默认ant dist命令的目标路径,存放应用的发布物等
图5 tomcat建议的源文件目录
2.5 项目编译、打包、部署
在这里介绍使用ant对项目进行编译、打包和部署等。使用MAVEN工具进行这些操作是更简单的(详见2.2.4节),但使用ant可以更好的了解编译、打包和部署是怎么回事。
项目编译是将源文件目录中的文件,使用java的javac命令将java文件编译为class文件,并存放到部署文件目录的指定文件夹下,同时将源文件目录中的其他文件复制到部署文件目录中。
项目打包是将部署文件目录下的文件,使用java的jar命令将源文件打包为jar(可被其他项目引用的文件)或war(可在tomcat上部署的文件)文件。
项目部署是将打包好的war文件,通过tomcat的部署界面或URL接口;上传到tomcat的应用目录下。Tomcat也是有部署界面[9]的,只是不像Weblogic的部署界面那样常用。Tomcat部署界面的地址是http://localhost:8080/manager/html。进入该界面是需要登录的,你需要在$CATALINA_BASE/conf/tomcat-users.xml对用户进行配置,比如我添加了如下一行配置。添加后重新启动tomcat,即可使用添加的用户名密码登录部署界面,部署界面如图6。
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,admin-gui,admin-script"/>
Demo1 Tomcat部署界面用户名密码配置

图6 Tomcat的部署界面
你也可以使用URL接口http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo进行项目的远程部署。
Ant工具基于上面的编译、打包和部署的过程,通过build.xml脚本对项目编译、打包和部署的过程进行配置。基本的build.xml的格式如Demo2。对编译、打包的配置是直接的,只需要按格式配置源路径、目标路径以及要编译或打包的内容就可以了。为了使用tomcat的自定义任务进行项目的部署,你需要在build.xml中引入(Demo2中的import标签)tomcat的配置文件[9]。
<project name="My Application" default="compile" basedir=".">
<!-- Configure the directory into which the web application is built -->
<property name="build" value="${basedir}/build"/>
<!-- Configure the context path for this application -->
<property name="path" value="/myapp"/>
<!-- Configure properties to access the Manager application -->
<property name="url" value="http://localhost:8080/manager/text"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
<!-- Configure the path to the Tomcat installation -->
<property name="catalina.home" value="/usr/local/apache-tomcat"/>
<!-- Configure the custom Ant tasks for the Manager application -->
<import file="${catalina.home}/bin/catalina-tasks.xml"/>
<!-- Executable Targets -->
<target name="compile" description="Compile web application">
<!-- ... construct web application in ${build} subdirectory -->
</target>
<!-- Executable Targets -->
<target name="dist" description="Package web application">
<!-- ...package the web application in ${build} subdirectory to a ${path}.war ... -->
</target>
<target name="deploy" description="Install web application"
depends="compile">
<deploy url="${url}" username="${username}" password="${password}"
path="${path}" war="file:${build}${path}.war"/>
</target>
<target name="reload" description="Reload web application"
depends="compile">
<reload url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
<target name="undeploy" description="Remove web application">
<undeploy url="${url}" username="${username}" password="${password}"
path="${path}"/>
</target>
</project>
Demo2 Ant的build.xml的基本配置
在了解了项目编译、打包和部署的过程后,为了简化这些过程,后面使用MAVEN替换ant对项目进行管理。在MAVEN中编译、打包通常是不需要任何配置的(详见2.2.4),部署只需要配置部署的路径即可。MAVEN的pom.xml文件中远程部署的配置如Demo3所示[11]。
<!-- 发布到远程仓库的配置 -->
<distributionManagement>
<repository>
<id>my-releases</id>
<url>http://artifactory.test.com:80/artifactory/myapp/</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>http://artifactory.test.com:80/artifactory/myapp/</url>
</snapshotRepository>
</distributionManagement>
Demo3 在Maven的pom.xml中配置远程部署路径
3. 基于Idea工具搭建tomcat项目与热部署
但基于IDE开发是更快捷的。Idea中代码的联想,与maven、tomcat、jdk和git等工具的整合以及热部署使得开发更简单高效。所以后来将项目迁移到了Idea2021工具上进行开发。
在Idea上配置Tomcat的热部署是简单的,只需进行如图7的配置即可。配置的含义是当我们修改源代码,比如java文件或jsp文件时,idea会自动编译java文件并将生成的class文件和jsp文件更新到tomcat应用的目录中。如果Tomcat的server.xml文件中host的autodeploy配置为true,当tomcat应用目录(webapps/应用名)下应用的文件有改动时,Tomcat会自动重新部署该应用。也就是说,在应用的源代码文件改动后,idea会重新编译这些文件并放到Tomcat的应用目录下,Tomcat会重新部署这个应用[9]。这里的热部署不适用与Springboot项目,因为Springboot是内置了tomcat的。

图7 Idea上基于Tomcat开启项目的热部署
参考资料:
[1] https://tomcat.apache.org/tomcat-8.5-doc/index.html
[2] https://jcp.org/aboutJava/communityprocess/final/jsr340/index.html
[3] https://jcp.org/aboutJava/communityprocess/mrel/jsr245/index2.html
[5] https://maven.apache.org/what-is-maven.html
[6] https://tomcat.apache.org/tomcat-8.5-doc/appdev/deployment.html
[7] https://tomcat.apache.org/tomcat-8.5-doc/appdev/web.xml.txt
[8] https://tomcat.apache.org/tomcat-8.5-doc/appdev/source.html
[9] https://tomcat.apache.org/tomcat-8.5-doc/manager-howto.html
[10] https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
Tomcat8.5简介的更多相关文章
- nginx之 nginx-1.9.7 + tomcat-8.5.15 反向代理+应用负载均衡 安装配置
环境说明:nginx 反向代理服务器 ip 为: 10.219.24.26tomcat1 应用服务器 ip 为: 10.219.24.21tomcat3 应用服务器 ip 为: 10.219.24.2 ...
- 知识小罐头08(tomcat8启动源码分析 上)
前面好几篇都说的是一个请求是怎么到servlet中的service方法的,这一篇我们来看看Tomcat8是怎么启动并且初始化其中的组件的? 相信看了前面几篇的小伙伴应该对Tomcat中的各个组件不陌生 ...
- solr简介、学习详细过程!(超详细~)
solr是什么呢? 一.Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. 二.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出 ...
- CentOS7.5安装Tomcat8
一.tomcat的简介 这是Apache Tomcat Servlet / JSP容器的文档包的顶级入口点 .的Apache Tomcat 8.0版实现了Servlet 3.1和JavaServer ...
- linux下源码安装jdk1.8和tomcat8.5
Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 0.java简介 1)tomcat运行需要对应的Java环境,Java环境通过安装jdk来获得2)为了防止兼容性问题 ...
- linux下yum安装jdk1.8(rpm包)和tomcat-8.5
Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 ========= 完美的分割线 ========= 0.java简介 1)tomcat运行需要对应的Java环境, ...
- 配置Tomcat && Http简介
WEB环境搭建 1. Web服务器 Web服务器主要用来接收客户端发送的请求和响应客户端请求. 作为JavaWeb程序来说,还需要有Servet容器,容器的主要作用就是调用java程序处理用户发送的请 ...
- Windows环境下设置Tomcat8以服务的形式运行,不再打开Tomcat窗口
内容简介 在Windows操作系统下,设置Tomcat8以服务的形式运行,按照以下3步来操作即可.前提条件:已安装好Java环境,并配置好java的环境变量:已下载好Tomcat8并解压到某目录. s ...
- 配置Tomcat-8.5 JVM内存参数
配置Tomcat-8.5 JVM内存参数 apache-tomcat-8.5与之前的版本存在些许差异,配置方式有所改变,并且针对JVM一些参数不再支持.故本文档主要简介一下如何在apache-tomc ...
- 01 . Tomcat简介及部署
Tomcat简介 Tomcat背景 tomcat就是常用的的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中.而tomcat本 ...
随机推荐
- vue全局事件总线和消息订阅详细讲解
全局事件总线 在写组件的时候,我们都知道父传递子 也知道子传递给父 但是组件间嵌套复杂的时候我们应该怎么通信呢? 有的小伙伴会说适用vuex,的确是可以解决问题的 下面我们说一下全局事件总线 一种组件 ...
- echarts的初始化和销毁dispose
容器节点被销毁以及被重建时 假设页面中存在多个标签页, 每个标签页都包含一些图表. 当选中一个标签页的时候,其他标签页的内容在 DOM 中被移除了. 这样,当用户再选中这些标签页的时候,就会发现图表& ...
- echarts中x轴文字太长换行的几种方式
我们在使用echarts中,可能会遇见文字太长.导致显示不完全. 我们可以使用换行来处理 第一方式直接使用 \n 文字直接换行显示 使用\n <!DOCTYPE html> <htm ...
- vue中v-show你不知道的用法 created computed mounted的执行顺序
我们都知道,v-show的值是一个布尔类型的. 我通过这个值进行显示或者隐藏. 但是有些时候,这个值是true还是false,我们需要去进行计算 此时我们就可以使用v-show="XXX() ...
- IDM全版本激活工具
前往IDM官网下载IDM IDM官网 下载破解工具 IDM激活工具.zip 解压打开激活工具选择1 然后回车耐心等待激活完成即可
- 3.0 熟悉IDAPro静态反汇编器
IDA Pro 是一种功能强大且灵活的反汇编工具,可以在许多领域中发挥作用,例如漏洞研究.逆向工程.安全审计和软件开发等,被许多安全专家和软件开发者用于逆向工程和分析二进制代码.它支持大量的二进制文件 ...
- FileReader读取文件(文本和图片)
1.读取文本 let file = input_file.files[0] let fr = new FileReader(); fr.readAsText(file,'gb2312'); //设置文 ...
- 小知识:杜绝明文密码,OGG的credentialstore特性
之前OGG配置文件中都会明文记录密码,而在OGG12c及以上版本中,有一个特性credentialstore,可以用来杜绝明文密码,提升安全性. 这里测试添加credentialstore并配置数据库 ...
- TDBLookupComboboxEh 一些设置项,自己总结
注意:如果top_seller_nick有重复的值的时候,keyfield 也为top_seller_nick的话,就会造成,选中最下面的那个阿里巴巴的,默认也是第一个天猫的各项值. 因为选后是根据k ...
- kafka-Kafka3.4版本创建topic出现zookeeper is not a recognized option
问题描述:在linux云服务器上搭建了一套kafka3.0集群,然后按照以前的创建topic指令: ./kafka-topics.sh --zookeeper hadoop01:2181,hadoop ...