1.2.3IDE 启动
在项目开发过程中,我们经常需要将服务器集成到IDE中,以便直接将工程发布到服务器环 境并启动,从而进行系统调试。
下面将详细展示如何将Tomcat集成到IDE (以Eclipse为例)并启动。
第一步,在Eclipse中添加Tomcat的运行环境。选择Windows —+ Preferences,弹出Preferences 对话框,如图1-2所示。
Tomcat介绍(三)完结,即将进入正文_第1张图片

选择Server —> Runtime Environments,显示当前已经安装的服务器运行环境。点击“Add”, 弹出添加服务器运行环境对话框,如图1・3所示。(图1-3添加服务器运行环境对话框)
Tomcat介绍(三)完结,即将进入正文_第2张图片
选择Apache —Apache Tomcat v8.0,点击"Next”,显75如图1-4所示(图1-4新建服务器对话框)。
Tomcat介绍(三)完结,即将进入正文_第3张图片

点击"Browse"选择Tomcat的安装根目录,点击uFinish,,完成添加服务器运行环境。
第二步,新建服务器配置。选择File - New - Other弹出新建对话框,然后选择Server 一 Server,如图1-5所示。(图1-5新建服务器配置对话框)
Tomcat介绍(三)完结,即将进入正文_第4张图片
Tomcat介绍(三)完结,即将进入正文_第5张图片

点击“Next”,如图1-6所示。

选中"Tomcat v8.0 Server”,并且在 uServer runtime environment,, 中选择我们第一步新建的 Tomcat运行环境。

点击“Next”,如图1-7所示,选择需要部署的Web工程,点击“Finish”完成新建工作。(图1-7选择项目)

Tomcat介绍(三)完结,即将进入正文_第6张图片
除了在添加服务器时指定部署包(如图1-7所示),还可以在Servers视图中选择服务器,右键 点击"Add and Remove”弹出应用选择对话框进行添加。
第三步,选择Window —> Show View-Servers,打开Servers视图,显示当前已经添加的服务器 列表,如图1-8所ZK。

Tomcat介绍(三)完结,即将进入正文_第7张图片

选中服务器,点击“Debug/Run”运行Tomcat,启动日志信息将同步输出到Eclipse的控制台 中,如图1.9所示。

Tomcat介绍(三)完结,即将进入正文_第8张图片

双击Servers视图中的服务器,将会打开服务器配置界面,可通过该界面修改Tomcat的端口号 以及超时时间等信息,如图1-10所示。(图1-10服务器配置界面)
Tomcat介绍(三)完结,即将进入正文_第9张图片
如果希望修改Tomcat启动配置,可以打开运行配置对话框进行编辑,如图1-11所示。
Tomcat介绍(三)完结,即将进入正文_第10张图片

1.2.4嵌入式启动

除了上述启动方式之外,我们还可以将Tomcat嵌入到应用程序中,作为应用程序提供网络服 务的组件使用。这主要考虑到如下几个应用场景。
□系统以安装包的形式独立提供。此时,不再适合将应用系统以WAR包的形式发布到应用 服务器,而是将应用服务器(甚至JRE)集成到系统当中再统一发布。这样可以为客户提 供一站式的安装体验,简化系统安装部署,提高系统的易用性。
□为了满足PAAS环境下应用的研发、交付、管理,近两年业界提出了微服务(Microservice ) 架构①以及十二要素应用(The Twelve-Factor App )气这两者均要求应用是自包含的 (self-contained ),也就是说完全不依赖于一个应用服务器运行环境,而是通过绑定一个端 口将HTTP导出为服务,以监听请求。此种情况下,将Tomcat作为处理HTTP请求的组件 集成到应用中是个不错的选择。(当然,另外可选择的方案是Jetty。)SpringBootflE架同时 支持釆用Tomcat和Jetty作为导岀HTTP服务的组件。
后续章节将详细介绍如何以嵌入的方式启动Tomcato。
① 微服务架构:Martin Fowler的一篇文章(http://martinfowler.com/articles/microservices.html)详细介绍%e8%af%a6%e7%bb%86%e4%bb%8b%e7%bb%8d) 了微服务的概 念。Spring Framework通过子项目Spring Boot支持快速构建微服务应用。

② 十二要素应用:Adam Wiggins于2012年发布了 “十二要素应用宣言”,旨在为构建SAAS应用提供一套方法论。通 过使用标准化流程自动配置,以降低学习成本。与操作系统之间尽可能划清界限,确保应用的最大可移植性。

适合将应用部署到现代的云计算平台,从而在服务器和系统管理方面节省资源。将开发环境和生产环境的差异 降至最低,并使用持续交付实施敏捷开发。可以在工具、架构和开发流程不发生明显变化的前提下实现扩展- 具体参见 http://12factor.net/ 0

1.2.5 Debug 启动
在项目发布之后,我们有时候需要对基于生产环境部署的应用进行调试,以解决在开发环境 无法重现的BUG。这时我们便用到了应用服务器的远程调试功能,这主要依赖于JDK提供的 JPDA1 ( Java Platform Debugger Architecture, Java平台调试体系结构)。在绝大多数情况下,我 们并不需要接触JPDA的相关API,仅需要对服务器和IDE做相关的配置即可。
以调试模式启动Tomcat非常简单,只需要在命令行执行如下命令(以Windows为例,Linux 类似):
C:\apache-tomcat-8.5.6\bin>catalina jpda start
此时,我们会在Tomcat的启动控制台看到如下日志:
Listening for transport dt_socket at address: 8000
当Tomcat以调试模式启动后,我们还需要一个调试前端来进行具体的功能调试。由于现代IDE 均已提供了远程调试功能的集成,因此我们可以很容易将其作为前端进行远程调试。
以Eclipse为例,选中需要远程调试的项目,点击"DebugConfigurations",弹出Debug配置对 话框。选择“Remote Java Application",右键"New”,创建远程调试。填写需要调试的Tomcat 的主机以及端口,点击“Debug”即启动远程调试。
Tomcat介绍(三)完结,即将进入正文_第11张图片
① JPDA:具体参见http://docs.oracle.eom/javase/8/docs/technotes/guidesJpda/architecture.htmlo
对于Tomcat,默认的调试端口为8000,我们可以通过设置JPDA_ADDRESS环境蚤量来指定其他端 口。(当然,你也可以直接修改catalina.bat和catalina.sh 文件,尽管这种方式对应用服务器有侵入。)

1.3 Tomcat目录结构
接下来我们简单介绍一下Tomcat的目录结构,以方便读者能够对Tomcat的基本结构有个初步 认识,也有利于后续章节的深入讲解。
Tomcat的目录结构及主要文件如表1-2所示。

Tomcat介绍(三)完结,即将进入正文_第12张图片

1.4 Tomcat 8.5之后的新特性
在本章的最后,我们扼要说明一下Tomcat 8.5之后的新特性,以使读者有个初步的认识,这 些新特性在后续章节中会详细讲解。
□自8.0版本开始,Tomcat支持Servlet3.1 , JSP2.3、EL3.0> WebSocket 1.1;并且自9.0版本 开始支持Servlet 4.0。
□为了让用户提前体验Servlet 4.0的新特性,在8.5版本中,Tomcat提供了一套Servlet 4.0预览 API ( servlet4preview,它们并不属于规范,而是Tomcat的一部分,也不会包含到9.0版本 当中)。
□自8.0版本开始,默认的HTTP、AJP链接器采用NIO,而非Tomcat7以及之前版本的BIO; 并且自8.5开始,Tomcat移除了对BIO的支持。
口在8.0版本中,Tomcat提供了一套全新的资源实现,采用单独、一致的方法配置Web应用 的附加资源,以替代原有的Aliases. VirtualLoader、VirtualDirContext、JARO新的资源方 案可以用于实现覆盖。例如可以将一个WAR作为多个Web应用的基础,同时这些Web应用 各自拥有自己的定制功能。
□自8.0版本开始,链接器新增支持JDK 7的NIO2。
□自8.0版本开始,链接器新增支持HTTP/2协议。
□默认釆用异步日志处理方式。
除了新增功能,Tomcat8.5也进行了大量的代码重构。在讲解相关组件时,与旧版本(Tomcat7) 相比发生了显著变更的地方,我们会进行补充说明。
1.5小结
本章简单介绍了Tomcat的历史及现状,讲解了如何安装启动Tomcat服务器以及在Tomcat环境 下部署Web应用。此外,还介绍了Tomcat的目录结构及其核心文件,使读者能够对Tomcat有个基 本的认识。最后,列举了Tomcat 8.5之后的几项新特性。
从下一章开始,我们将开始重点讲解Tomcat的架构及其组件相关知识,对Tomcat进行详细解 构,以使读者能够深入理解Tomcat的架构设计以及相关的组件特性、工作原理。
下一章主要侧重于Tomcat的总体架构:主要的设计方式、启动过程、请求处理过程以及Tomcat 的类加载机制。

介绍部分终于完结啦,持续更,每天学习一点点,慢慢来,加油~