天天看點

Jetty學習二:配置概覽-怎麼配置Jetty

Jetty POJO配置

Jetty的核心元件是Plain Old Java Objects(POJOs);配置Jetty的大部分工作就是在Jetty POJOs上的初始化、裝配和設定域的處理,你能通過以下的方式來實作:

 1)直接通過Java代碼初始化和裝配Jetty對象。這個在後面Embedding Jetty講。

 2)用Jetty XML配置(一個控制反轉(IoC)架構)初始化和裝配Jetty對象。etc/jetty.xml檔案是基本的Jetty XML配置檔案,但有一些其它的etc/jetty-feature.xml檔案包括在jetty中。

 3)用第三方庫IoC架構如Spring初始化和裝配Jetty對象作為Spring beans。

由于基本的Jetty配置通過IoC來做,是以Jetty API文檔是終于的配置參考。

Jetty Start配置檔案

Jetty用以下尾随的配置檔案來初始化、注入和啟動server:

ini檔案

 Jetty Start機制用指令行,start.ini檔案和不論什麼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.base(假設不同于jetty.home),通過改動它們改變配置。

mod檔案

 modules/*.mod檔案包括了子產品的定義,這些子產品能通過--module=name激活。每一個mod檔案定義:

 ------為排序和激活定義的子產品依賴

 ------須要被子產品加入�到classpath的庫

 ------須要被子產品加入�到指令行的XML檔案

 ------須要被激活子產品的檔案

 ------一個模闆ini檔案,當使用--add-to-start=name激活是使用

 mod檔案通常被放在jetty.home,可是能夠被jetty.base中的覆寫。通常非常少編輯子產品檔案除非大的結構改變。

XML檔案

 Jetty支援Jetty IoC和Spring IoC格式的XML檔案,能夠在指令行中指定,也能夠在ini檔案裡指定,或者通過子產品定義加入�到指令行中。XML檔案執行個體化和注入Java對象,包含server、connectors和contexts。由于Jetty IoC XML檔案常常使用properties,一些通常的配置任務不須要編輯這些XML檔案就能完畢。假設XML配置被要求改變,XML檔案應該從jetty.home/etc複制到jetty.base/etc,再做改動。

其他配置檔案

服務端配置還能使用以下的檔案:

Context XML檔案

Jetty IoC或者Spring IoC格式的XML檔案,放置在webapps目錄下,部署子產品用它來執行個體化和注入HttpContext執行個體以建立一個特定的context。

Property檔案

Jetty配置支援标準Java property檔案。

Jetty IoC XML格式

為了了解Jetty IoC XML格式,先看以下在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;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
 
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("/hello");
        context.addServlet(HelloServlet.class, "/");
        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
        server.setHandler(handlers);
        server.start();
        server.join();
    }
}      

以下是上面的Java代碼相應的使用Jetty IoC XML初始化和配置相同的server的樣例:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.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>      

在實踐中,通常使用Jetty XML檔案,一般放置在标準公布版本号的etc檔案夾中。是以配置Jetty一般是編輯已經存在的XML檔案,改變配置的值。

配置Jetty公布版本号

通常Jetty的公布版本号,包含以下的配置:

$JETTY_HOME/start.ini

全局指令行選項。從Jetty 9.1開始,start.ini的内容被移動到子產品的start.d/下的ini檔案裡。

$JETTY_HOME/start.d

子產品ini檔案的目錄,用于為Jetty modules設定OPTION、parameters和配置檔案。這些modules能夠通過重命名檔案或者在9.1之後使用start.jar的--enable或者--disable選項來激活或者停止。

$JETTY_HOME/lib/*.xml

Jetty IoC XML檔案,配置個體特性;如jetty.xml(為server),jetty-http.xml,jetty-https.xml,jetty-jmx.xml。

$JETTY_HOME/webapps/*

用于部署标準WAR檔案、web應用和上下文IoC XML檔案。

Jettyport配置執行個體

以下是一個樣例用于測試Jetty配置機制,展示如何設定HTTPport。為了執行Jetty,我們通常執行以下的指令:

>java -jar start.jar      

start.d/http.ini子產品預設被激活,當中包括以下的行:

--module=http
  jetty.port=8080      

這裡設定了Jetty端口(jetty.port),并激活了http子產品(在modules/http.mod 檔案裡定義),http子產品的配置檔案為etc/jetty-http.xm,在這個配置檔案裡,調用server的addConnector加入�一個ServerConnector類的新執行個體,這個執行個體配置包括以下的行:

 <Set name="port"><Property name="jetty.port" default="80" /></Set>

這行表示使用jetty.port屬性值或者預設值80(假設沒有配置jetty.port)調用ServerConnector.setPort(int)。jetty.port能夠配置在start.ini或者http.ini中,僅僅能配置一次,這裡http.ini中配置了jetty.port的值為8080,是以Jetty将用8080作為連接配接器的端口。

假設你希望改變這個端口,那麼你能夠編輯start.d/http.ini檔案,改變jetty.port的值。然而這樣更新可能會導緻問題,是以最好的做法是建立一個新的jetty.base目錄,配置一個新的server執行個體。

繼續閱讀