Jetty:配置概览-须要配置什么

上一节讲述了怎么配置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部署配置上下文的描写叙述符。

时间: 2024-10-16 06:27:58

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

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/je

Jetty学习三:配置概览-需要配置什么

上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你需要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为所有其他Jetty服务端组件提供服务和生命周期管理.在标准Jetty发布中,核心的服务端配置是在etc/jetty.xml文件中,你也能在其中包含其他服务端配置,可以包括: 1)ThreadPool Server实例提供了一个线程池,你可以在etc/jetty.xml中配置最大线程数和最小线程数. 2)Handlers Jetty服务端只能有一个H

Jetty学习六:配置连接器

连接器配置概览 连接器用于接收网络连接,配置一个连接器需要配置: 1)连接器的网络参数(例如:端口): 2)连接器使用的服务(例如:executors,schedulers): 3)为接收连接而初始化和配置协议的连接工厂. Jetty主要使用的连接器类型为ServerConnector. 标准Jetty发布使用下面的Jetty XML文件创建和配置连接器: 1)jetty-http.xml 初始化一个ServerConnector,用于接收HTTP连接(可以被升级到WebSocket连接). 2

Servlet容器之Jetty的安装和配置(Windows)

网上多说Jetty轻量级,好用.好吧,本着好奇就打算学习一下.不过这里还是要抱怨一句,关于Jetty的学习资料真心不多. 前提:必须安装jdk. 1.下载Jetty安装包:http://dist.codehaus.org/jetty/jetty-6.1.22/ 2.解压至任意目录 3.直接进入bin目录,双击Jetty-Service.exe.启动成功 4.地址栏直接输入http://localhost:8080 ps: 1.修改E:\jetty-6.1.22\etc\ jetty.xml文件中

Centos6.4配置总结--网络配置(Ⅱ)

Linux的网络配置,常见的就是IP.NETMASK.GATEWAY.DNS的配置. 下面开始给新装的Linux系统配置网络. 通过ifconfig命令发现网络还没有启动起来 [[email protected] ~]# ifconfig lo        Link encap:Local Loopback             inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host      

web.xml的配置中&lt;context-param&gt;配置作用

<context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将&l

理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)

理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)   本文截自于博主CCNP交换技术稿件内容   BPDU Guard(BPDU保护),简单的讲它的意义就是一个不该接收BPDU的端口,比如被启动了portfast的端口,一旦收到BPDU报文,那么BPDU保护功能将会立即关闭该端口,并将端口状态置为error-disabled状态.BPDU Guard的配置分为全局型的配置和接口级的配置,注意这两种配置将带来一些不同的效果. 全局配置BPDU Guard 全局配置

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

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

ubuntu环境配置之vi 配置【转载】

ubuntu环境配置之vi 配置 [日期:2014-02-10] 来源:Linux社区  作者:zhonghe1114 [字体:大 中 小] Android的源码开发,几乎离不开Linux,Linux系统当然首推Ubuntu了,linux自带的编辑工具VI,相信用过的人都知道它的强大之处了,但是,系统自带的vi,功能比较有限,用起来当然不怎么方便,所以我们需要对它进行优化配置.1.安装增强版vi:sudo apt-get install vim2.做一个软链接:sudo ln -sf /usr/