Jetty9架构解析-Jetty配置及部署(一)

2.1. Jetty配置概述

对于Web服务器来说,可配置性是一项非常重要的指标(从软件设计层面,我们也可以称之为架构要素),它在很大程度上也会影响一款服务器的适用范围。之所以这么说,是因为真实的部署场景千变万化,只有做到灵活可配,我们才可以对其进行深度定制(调整内存分配、链接限制、I/O、安全配置等等),从而使服务器能够最大程度的满足我们不同的运维部署要求。

作为轻量级Web服务器及Servlet容器的代表,Jetty提供了出色的可配置能力,通过本章的讲解,你会充分了解其强大、便捷的配置。而且Jetty的配置方案也在架构上为我们应用程序模块化架构提供了一个不错的范本。

对于Jetty来说,其提供的配置内容与Tomcat类似,主要分为四部分:

  • 服务器启动配置,主要是启动命令参数,如环境变量、JVM参数和加载模块等。
  • 服务器定义配置,如链接器、Servlet容器。Jetty启动时,将会根据这些配置文件实例化服务器对象。相对于Tomcat对Catalina容器的配置,Jetty已经拆解为多个独立的模块配置。
  • Web应用配置。与Tomcat类似,Jetty也支持对每个部署应用提供独立的配置文件,用于描述其Context路径、部署包等信息。
  • Servlet规范配置,即我们熟知的WEB-INF/web.xml。

但是在具体的配置文件组织形式和加载上,Jetty和Tomcat体现了两种不同的架构理念。

Tomcat对于每一部分的配置都采用集中式管理,主要配置文件都包含在conf目录下。之所以如此,是由于Tomcat采用传统架构模式,而且这种方案操作更加方便,也便于学习掌握。

而Jetty完全采用模块化架构,这一点也充分体现到了它对配置文件的管理上。
首先,对于启动参数,Jetty支持三种方式:

  • 直接在命令行启动时指定。
  • 在$JETTY_BASE/start.ini中指定。
  • 在$JEETY_BASE/start.d/*.ini文件中指定。在start.d目录下,每个文件对应于一个模块的配置,如http模块相关的参数文件为http.ini。

其次,Jetty对于服务器定义的配置(如链接器、容器、线程池、会话管理等)则通过$JETTY_BASE/etc/*.xml完成,同样是分模块管理,如http模块的定义文件为jetty-http.xml。这些XML文件是Jetty实现的一套IoC框架,用于实例化和装配服务器对象。

注意:如果你对启动配置和服务器定义配置的关系还不是很清楚的话,我们可以做一个形象的比较,etc/*.xml之于Jetty就好比Bean配置文件之于SpringFramework,主要用于维护服务器对象的创建以及对象之间的注入依赖关系。而启动配置(*.ini)就好比Properties文件之于Spring,在Bean创建和注入过程中,可以直接引用Properties资源文件中配置的属性。

另外,Jetty支持为每个Web应用添加一个Context配置文件用于配置其请求根路径(即Context路径)、应用文件路径、WAR包解压甚至安全等等,即那些与Web应用部署密切相关但是又不属于Servlet规范之内的配置信息。这一点与Tomcat类似,但是管理方式略微不同,例如Tomcat不允许部署目录既有配置文件又有同名部署包,而Jetty则允许。也就是说Jetty把Web应用和配置文件并列放置到了部署目录下,而Tomcat则是将其放置到Web应用的META-INF目录下。从这个角度看,Tomcat的方案更便于部署管理(因为维护单个目录和文件总要比两个简单)。

对于Servlet规范配置,Jetty与Tomcat基本相同。它们都提供了默认的配置(Jetty为$JETTY_HOME/etc/webdefault.xml)以及继承关系,这样对于一些常见配置(如JSP处理、MIME type),我们不需要在每个Web应用中都添加一遍。

最后,Jetty对于各种配置提供了一套完善的覆盖规则,便于我们在默认配置的基础上添加自己的定制化配置,既做到配置工作最小化,避免重复工作,又提供最大的灵活性。

下一篇文章将重点讲述服务器定义相关的配置

猜你喜欢

转载自blog.csdn.net/elinespace/article/details/52879587
今日推荐