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
作者:jann8
出处:https://www.cnblogs.com/jann8/p/17422243.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)