上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你须要配置些什么。

配置Server

Server实例是Jetty服务端的中心协调对象,它为全部其它Jetty服务端组件提供服务和生命周期管理。在标准Jetty公布中,核心的服务端配置是在etc/jetty.xml文件里,你也能在当中包括其它服务端配置,能够包括:

 1)ThreadPool

 Server实例提供了一个线程池,你能够在etc/jetty.xml中配置最大线程数和最小线程数。

 2)Handlers

 Jetty服务端仅仅能有一个Handler实例处理HTTP请求。然而一个handler能够是一个容器或者是其他多个handler的包装,这些handler能够形成一棵树,一般是树的一个分支的根到叶子节点的全部handler协作处理一个请求。默认的handler树设置在etc/jetty.xml文件里,包括一个Context Handler集合和默认Handler。Context Handler集合通过上下文路径和部署Context Handler和Web Application Context的路径选择下一个handler。默认Handler处理其他handler不处理的请求和产生404页面的请求。其他一些配置文件能够加入�handler到handler树(比如:jetty-rewrite.xml、jetty-requestlog.xml)或者配置组件到热部署handler(比如:jetty-deploy.xml)。

 3)Server Attributes

 server拥有一个字符串和对象的map,以供其他Jetty组件能把指定的对象和server联系在一起,假设这些对象实现了LifeCycle接口,他们将和server一起開始和停止。

 4)Server fields

 server也有一些特性的配置域,在etc/jetty.xml中设置,用于控制其他事情中,HTTP响应的日期和版本号。

 5)Connectors

 Server拥有一个connector的集合,用于接收HTTP和Jetty支持的其他协议的连接。

 6)Services

 server能拥有额外的服务对象,有时作为attributes,但很多其它是作为LifeCycle beans。比如Login Services和DataSources,你在server级配置,然后注入它们到web应用使用它们。

配置Connectors

Jetty Server Connector是一个网络终端,用于接收一个或多个协议发起的连接,这个协议为Jetty Server产生请求和/或消息。在标准Jetty Server公布版本号中,支持多种协议和协议的融合:jetty-http.xml,jetty-https.xml和jetty-spdy.xml。你通常须要配置:

 1)Port

 连接器监听的TCP/IP端口,相应属性jetty.port(或者jetty.tls.port),假设没有发现,则使用默认值8080(TLS默觉得8443).

 2)Host

 你能配置主机作为主机名或者IP地址。假设不设置,或者设置为0.0.0.0,连接器将监听全部本地接口。相应属性jetty.host。

 3)Idle Timeout

 连接处于空暇状态达到这个时间,连接将被连接器关闭,单位毫秒。

 4)HTTP Configuration

 HTTP配置。标准Jetty Server公布版本号在jetty.xml文件里创建了一个HttpConfiguration,能在连接器文件里通过XML Ref元素使用。

 5)SSL Context Factory

 假设使用TLS连接器类型(HTTPS和SPDY),须要配置SSL Context Factory,用于获取服务端认证信息。

配置上下文

Jetty上下文是一个处理器,一个上下文尅包括标准Jetty处理器或者自己定义应用处理器。全部上下文都须要配置:

 1)contextPath

 contextPath是URL前缀,用于标识一个HTTP请求相应的上下文。比如,假设一个上下文有一个上下文路径/foo,它处理请求:/foo、/foo/index.html、/foo/bar/,和/foo/image.png,可是它不处理请求:/、/other/,或者/favicon.ico。上下文路径为/的上下文被叫做根上下文。

 上下文能通过部署器默认设置(用文件名称作为上下文路径的基础);或者通过编码设置;或者通过Jetty IoC XML设置,这个能够通过部署器或者在标准web app上下文的WEB-INF/jetty-web.xml文件里配置。

 2)virtualHost

 上下文能够有一个或者多个虚拟主机设置,虚拟主机不须要设置不论什么网络參数,相当于都应一个IP地址的服务的别名,一个服务能够有多个别名。有虚拟主机的上下文仅仅会处理请求头中有匹配这个虚拟主机的请求。

 3)classPath

 上下文能够设置classPath。标准web应用通过 WEB-INF/lib和WEB-INF/classes目录指定classpath,而且能够附加关于委派类载入到付clasloader的规则。

 4)attributes

 属性是随意命名的对象,与一个上下文联系在一起,被频繁用于在一个web应用和他的container之间传输实体。比如属性javax.servlet.context.tempdir被用于传输为web应用分配的暂时目录的File实例。

 5)resourceBase

 resource base是一个目录(或目录集合或URL),包括上下文的静态资源。能够是图片和HTML文件,或者JSP源文件。在传统的webserver中,这个值叫做docroot。

通过API配置上下文

你能直接调用ContextHandler来配置上下文,例如以下:

package org.eclipse.jetty.embedded;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler; public class OneContext { public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ContextHandler context = new ContextHandler();
context.setContextPath("/");
context.setResourceBase(".");
context.setClassLoader(Thread.currentThread().getContextClassLoader());
context.setHandler(new HelloHandler());
server.setHandler(context);
server.start();
server.join();
}
}

通过IoC XML配置上下文

部署器发现和热部署上下文IoC描写叙述符,IoC XML的格式例如以下:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC
"-//Mort Bay Consulting//DTD Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd"> <!--
Configure a custom context for serving javadoc as static resources
--> <Configure class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/javadoc</Set>
<Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/javadoc/</Set>
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.ResourceHandler">
<Set name="welcomeFiles">
<Array type="String">
<Item>index.html</Item>
</Array>
</Set>
<Set name="cacheControl">max-age=3600,public</Set>
</New>
</Set>
</Configure>

配置Web应用

Jetty支持WAR文件和未打包的web应用作为一个指定的上下文,配置方法包含:

 1)採用标准布局,设置resourceBase位置(WAR的根文件夹)和初始化classpath为jar包放置在WEB-INF/lib,classes放置在WEB-INF/classes;

 2)标准WEB-INF/web.xml定义了配置初始化參数、过滤器、servlets、监听器、安全约束、欢迎文件和被注入的资源;

 3)默认web.xml(被Jetty提供,或者通过配置)配置JSP Servlet和处理静态内容的默认servlet。标准web.xml能够覆盖默认web.xml;

 4)在WEB-INF/lib中的jar包中的类能够使用凝视定义附加的过滤器、servlet和监听器;

 5)在WEB-INF/lib中的jar包中的标准部署描写叙述符片段能够定义附加的初始化參数、过滤器、servlet、监听器、安全约束、欢迎文件和被注入的资源;

 6)WEB-INF/jetty-web.xml(可选)能够包括Jetty IoC配置,用于配置上下文和处理器的Jetty指定API。

设置上下文路径

默认情况下,部署器设置上下文路径为:假设你部署一个WAR文件叫foobar.WAR,则上下文路径为/foobar;假设你部署一个WAR文件叫ROOT.WAR,上下文路径为/。Jetty也同意在WAR内部(WAR自己)或者外部(WAR的部署器)设置上下文路径。

为了设置上下文路径在WAR文件内,你能使用WEB-INF/jetty-web.xml文件设置上下文路径:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC
"-//Mort Bay Consulting//DTD Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/contextpath</Set>
</Configure>

或者你能够在WAR外部使用IoC文件设置,并在当中指定WAR文件:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC
"-//Mort Bay Consulting//DTD Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test.war</Set>
<Set name="contextPath">/test</Set>
</Configure>

一个设置上下文路径的样例能够在 $JETTY_HOME/webapps/test.xml中看到。

设置鉴权域

标准web应用的鉴权方法和域名能够在web.xml中设置,例如以下:

...
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Test Realm</realm-name>
</login-config>
...

这个样例展示BASIC认证机制将被用于域名为“Test Realm”的域。然而标准没有形容域自身怎么被实现或者配置,在Jetty总,有几个域实现方式(叫做LoginServices),这些中最简单的是HashLoginService,从一个Java属性文件里读取username和证书。

为了配置一个匹配上面的“Test Realm”的HashLoginService实例,以下的$JETTY_HOME/etc/test-realm.xml IoC XML文件能够在命令行中指定,或者在start.ini中设置。

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- =========================================================== -->
<!-- Configure Authentication Login Service -->
<!-- Realms may be configured for the entire server here, or -->
<!-- they can be configured for a specific web app in a context -->
<!-- configuration (see $(jetty.home)/webapps/test.xml for an -->
<!-- example). -->
<!-- =========================================================== -->
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Test Realm</Set>
<Set name="config"><Property name="demo.realm" default="etc/realm.properties"/></Set>
<Set name="refreshInterval">0</Set>
</New>
</Arg>
</Call> <Get class="org.eclipse.jetty.util.log.Log" name="rootLogger">
<Call name="warn"><Arg>demo test-realm is deployed. DO NOT USE IN PRODUCTION!</Arg></Call>
</Get>
</Configure>

这创建和配置LoginService 作为一个服务端的聚合的bean。当一个web应用被部署为域名“Test Realm”时,为匹配Login Service,将在服务端beans中查找name为域名的bean。

Web应用部署

Jetty能部署多种Web应用格式,Jetty通过扫描${jetty.home}/webapps目录部署上下文信息。

Context能是以下的当中一种:

 1)标准WAR文件(扩展名必须是“.war”);

 2)包括一个展开的WAR文件的目录(必须包括{dir}/WEB-INF/web.xml文件);

 3)包括静态内容的目录;

 4)一个XML描写叙述符,使用Jetty XML语法,而且配置了一个ContextHandler实例(比如一个WebAppContext)。

新的WebAppProvider在目录扫描过程中将尝试避免反复部署,使用以下的规则:

 1)隐藏文件(以“.”开头的文件)将被忽略;

 2)目录名称以".d"结尾的将被忽略;

 3)假设一个目录和和WAR文件有相同的base名称(比如:foo/和foo.war),那么目录将被觉得是解压的WAR,而且仅WAR被部署(能够重用解压的目录);

 4)假设一个目录和XML文件有相同的base名称(比如:foo/和foo.xml),那么目录将被觉得是解压的WAR,而且仅XML被部署(能够在它自己的配置中使用这个目录);

 5)假设一个WAR文件和XML文件同一时候存在(比如:foo.war和foo.xml),那么WAR被觉得被XML文件配置,而且仅XML文件被部署。

一个Context是一个ContextHandler的实例,它集合了其他带有处理HTTP请求的资源的handlers(比如resource base,class loader,configuration attributes)。一个标准web应用是一个特定的上下文实例(叫做WebAppContext),使用标准布局和web.xml部署配置上下文的描写叙述符。

Jetty:配置概览-须要配置什么的更多相关文章

  1. Jetty学习二:配置概览-怎么配置Jetty

    Jetty POJO配置 Jetty的核心组件是Plain Old Java Objects(POJOs):配置Jetty的大部分工作就是在Jetty POJOs上的初始化.装配和设置域的处理,你能通 ...

  2. Jetty:配置概览-怎么配置Jetty

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/liuy_98_1001/article/details/27544671 Jetty POJO配置 ...

  3. jetty之安装,配置,部署,运行

    上篇文章中详解了关于什么是jetty,后续文章主要是介绍jetty的使用.本章介绍jetty环境的配置及部署war包. 1. 安装 1. 先下载一个jetty的压缩包,下载地址:http://www. ...

  4. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  5. .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?

    配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个 ...

  6. .NET Core采用的全新配置系统[2]: 配置模型设计详解

    在<.NET Core采用的全新配置系统[1]: 读取配置数据>中,我们通过实例的方式演示了几种典型的配置读取方式,其主要目的在于使读者朋友们从编程的角度对.NET Core的这个全新的配 ...

  7. Hibernate实现有两种配置,xml配置与注释配置

    hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...

  8. Windows Server 2008 R2组策略设置计算机配置和用户配置

    一.认识Windows Server 2008 R2域控组策略管理 1.域控服务器zhuyu.com的组策略管理默认会读取AD用户和计算机目录下创建的OU容器(组织单元), 在对应的OU容器创建对应的 ...

  9. TestNg线程池配置、执行次数配置、超时配置

    使用注解的方式对TestNg线程池配置.执行次数配置.超时配置 注:使用注解来控制测试方法运行的次数和超时时间,timeOut在单线程或者多线程模式下都可用,threadPoolSize设置了线程池的 ...

随机推荐

  1. android搭建环境错误 daemon not running. starting it now on port 5037 ADB server didn't ACK

    android搭建环境错误 daemon not running. starting it now on port 5037 ADB server didn't ACK ADB server didn ...

  2. BZOJ 1874 取石子游戏 (NIM游戏)

    题解:简单的NIM游戏,直接计算SG函数,至于找先手策略则按字典序异或掉,去除石子后再异或判断,若可行则直接输出. #include <cstdio> const int N=1005; ...

  3. 开源html5_kiwijs_helloworld

    本次须要的下载文件已经共享出来 网盘地址 由于我使用的是黑苹果系统, window我就无视了. 开发工具使用 网盘里的 dmg :Sublime Text 打开开发工具后在helloworld中找到 ...

  4. Android Material Design-Creating Apps with Material Design(用 Material Design设计App)-(零)

    转载请注明出处:http://blog.csdn.net/bbld_/article/details/40400031 翻译自:http://developer.android.com/trainin ...

  5. 4种Java引用浅解

    近期研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型 ...

  6. BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛( dp )

    状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) =  Σ dp( i , S - { i } )  ( i ∈ S , ...

  7. Laravel 5.1 ACL权限控制 二 之策略类

    随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...

  8. Lake Counting(poj 2386)

    题目描述: Description Due to recent rains, water has pooled in various places in Farmer John's field, wh ...

  9. 利用Adapter对象将数据填充到DataTable(或DataSet)的例子

    前: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataAdapter ...

  10. gdb图形化调试工具总结

    gdb除了命令行方式等的调试之外,还有图形化的调试工具,下面列举一些供参考 1:insight 2: ddd 3: kgdb 4: xxgdb 其它的工具欢迎补充