jetty的配置介绍

半兽人 发表于: 2016-03-15   最后更新时间: 2016-03-18 11:19:29  
{{totalSubscript}} 订阅, 13,012 游览

第3章. Jetty配置介绍


如何配置jetty

要明白jetty的配置,你需要先明白“如何做”和“怎么做”,这一节介绍如何配置jetty在什么样的机制下去执行配置,下一节介绍你如何配置这些机制。


jetty POJO配置

jetty的核心组件是简单传统的JAVA对象(POJO),配置jetty的过程其实就是实例化对象的过程。

  • 编写JAVA代码直接实例化装配到jetty对象,这被称为嵌入jetty。
  • 使用XML配置,这种是控制反转(Ioc)框架,在XML中实例化和装配jetty对象。etc/jetty.xml是主的Jetty XML配置文件,但也很多其他的etc/feature.xml 文件包含在jetty中。
  • 使用第三方的Ioc框架,像Spring,实例化和装配jetty对象到Spring bean.

因为jetty配置文件是通过Ioc完成的,Jetty API文档是最标准的配置参考。


Jetty启动配置文件

Jetty通过以下配置文件实例化,通过start.jar注射和启动服务器。 


ini files
jetty启动采用命令行的方式。 $JETTY_BASE/start.ini 或 $JETTY_BASE/start.d/*.ini 文件去创建有效参数的命令行。参数可能是:

  • 在jetty Ioc(或spring)XML格式中的XML文件。
  • 模块激活形式 --module=name
  • 属性的格式 name=value,用参数表示Jetty Ioc XML
  • 一个标准的JAVA属性文件包含附加的启动属性。
  • 其他的start.jar选项(参见java -jar start.jar --help)
  • 一些JVM选项

ini文件位于jetty的安装地址(如果jetty home不同),通过编辑去更改配置(例如,修改端口)。


mod文件

 $JETTY_HOME/modules/*.mod文件包含模块的定义,可以通过- -module=name激活使用,每个模块文件的定义如下:

  • 订购和激活模块依赖关系
  • 模块所需要的库添加到classpath。
  • 模块所需要的XML文件添加到有效的命令行。
  • 通过激活模块所需要的文件。
  • 用—add-to-start=name选项激活时,要使用模板ini文件。

通常模块文件很少编辑,只有重大的结构性变化才会修改。*.mod文件通常放在$JETTY_HOME/modules/,但是额外的和编辑过的模块可能在$JETTY_BASE/module。如果需要模块改动,最好在修改之前,从$JETTY_HOME/modules/复制到$JETTY_BASE/modules/目录,在修改。


XML files

Jetty IoC XML格式或spring IoC格式的XML文件有2种,在ini文件或通过模块定义增加命令行。XML文件和Java对象组成了服务器,连接器和环境。因为Jetty IoC XML文件使用属性,最常见的配置可以在不修改这些XML文件来完成,而是可以通过编辑相应的ini文件属性来实现。


这些XML文件通常位于 $JETTY_HOME/etc/,额外或编辑的XML文件可以添加到 $JETTY_BASE/etc/.如果配置需要改变,最好先从$JETTY_HOME/etc/ 复制到 $JETTY_BASE/etc/,在进行修改。


web.xml
Servlet规范定义了定义和配置Web应用程序使用的过滤器,servlet和资源web.xml部署描述符。Jetty WebAppContext组件使用这种XML格式:

  • web应用上下文的默认配置。
  • 解释在WEB-INF/web.xml文件的web应用程序所提供的特定的配置。
  • 解释描述符代码段,包含Jar文件中的WEB-INF/lib的META-INF目录。
Normally the web.xml file for a web application is found in the WEB-INF/web.xml location within the war file/directory or as web.xml fragments with jar files found in WEB-INF/lib. Jetty also supports multiple web.xml files so that a default descriptor may be applied before WEB-INF/web.xml (typically set to etc/webdefault.xml by the deploy module) and an override descriptor may be applied after WEB-INF/web.xml (typically set by a context XML file see test.xml)


Property Files

标准的Java属性文件也用于jetty配置

  • 通过使用属性元素的jetty IoC XML的参数。
  • 要配置默认的日志记录机制(StdErrLog),你也可以引入其他日志记录框架,并且还可以使用属性文件。(例如,log4j)
  • 作为一个简单的数据库登录用户名和凭据。


Jetty IoC XML format

要明白Jetty Ioc XML的格式,下面是一个嵌入式的jetty服务器和配置在Java里的例子。
package org.eclipse.jetty.embedded;
 
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;
 
public class ExampleServer {
 
    public static void main(String[] args) throws Exception {
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8080);
        server.setConnectors(new Connector[] { connector });
        ServletContextHandler context = new ServletContextHandler();
        context.setContextPath("/");
        context.addServlet(HelloServlet.class, "/hello");
        context.addServlet(AsyncEchoServlet.class, "/echo/*");
        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
        server.setHandler(handlers);
        server.start();
        server.join();
    }
}
Jetty ioc XML格式允许你在XML中实例化和配置完全相同的服务器,而无需编写任何Java代码:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_9_3.dtd">
 
<Configure id="ExampleServer" class="org.eclipse.jetty.server.Server">
 
  <Set name="connectors">
    <Array type="org.eclipse.jetty.server.Connector">
      <Item>
        <New class="org.eclipse.jetty.server.ServerConnector">
          <Arg><Ref refid="ExampleServer"/></Arg>
          <Set name="port">8080</Set>
        </New>
      </Item>
    </Array>
  </Set>
 
  <New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler">
    <Set name="contextPath">/hello</Set>
    <Call name="addServlet">
      <Arg>org.eclipse.jetty.embedded.HelloServlet</Arg>
      <Arg>/</Arg>
    </Call>
  </New>
 
  <Set name="handler">
    <New class="org.eclipse.jetty.server.handler.HandlerCollection">
      <Set name="handlers">
        <Array type="org.eclipse.jetty.server.Handler">
          <Item>
            <Ref refid="context" />
          </Item>
          <Item>
            <New class="org.eclipse.jetty.server.handler.DefaultHandler" />
          </Item>
        </Array>
      </Set>
    </New>
  </Set>
</Configure>

在实践中,最常用的是在etc目录中的标准XML文件,因此,配置jetty通常只需要修改存在的XML文件和修改它们注入的属性值。


更新于 2016-03-18

查看jetty更多相关的文章或提一个关于jetty的问题,也可以与我们一起分享文章