返回到文章

采纳

编辑于

jetty的配置介绍

jetty
jetty_ introduce


第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"&gt;

<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文件和修改它们注入的属性值。