上一节讲述了怎么配置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来配置上下文,例如以下:

  1. package org.eclipse.jetty.embedded;
  2.  
  3. import org.eclipse.jetty.server.Server;
  4. import org.eclipse.jetty.server.handler.ContextHandler;
  5.  
  6. public class OneContext {
  7.  
  8. public static void main(String[] args) throws Exception {
  9. Server server = new Server(8080);
  10. ContextHandler context = new ContextHandler();
  11. context.setContextPath("/");
  12. context.setResourceBase(".");
  13. context.setClassLoader(Thread.currentThread().getContextClassLoader());
  14. context.setHandler(new HelloHandler());
  15. server.setHandler(context);
  16. server.start();
  17. server.join();
  18. }
  19. }

通过IoC XML配置上下文

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE Configure PUBLIC
  3. "-//Mort Bay Consulting//DTD Configure//EN"
  4. "http://www.eclipse.org/jetty/configure_9_0.dtd">
  5.  
  6. <!--
  7. Configure a custom context for serving javadoc as static resources
  8. -->
  9.  
  10. <Configure class="org.eclipse.jetty.server.handler.ContextHandler">
  11. <Set name="contextPath">/javadoc</Set>
  12. <Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/javadoc/</Set>
  13. <Set name="handler">
  14. <New class="org.eclipse.jetty.server.handler.ResourceHandler">
  15. <Set name="welcomeFiles">
  16. <Array type="String">
  17. <Item>index.html</Item>
  18. </Array>
  19. </Set>
  20. <Set name="cacheControl">max-age=3600,public</Set>
  21. </New>
  22. </Set>
  23. </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文件设置上下文路径:

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

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

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

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

设置鉴权域

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

  1. ...
  2. <login-config>
  3. <auth-method>BASIC</auth-method>
  4. <realm-name>Test Realm</realm-name>
  5. </login-config>
  6. ...

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

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

  1. <?xml version="1.0"?>
  2. <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
  3. <Configure id="Server" class="org.eclipse.jetty.server.Server">
  4. <!-- =========================================================== -->
  5. <!-- Configure Authentication Login Service -->
  6. <!-- Realms may be configured for the entire server here, or -->
  7. <!-- they can be configured for a specific web app in a context -->
  8. <!-- configuration (see $(jetty.home)/webapps/test.xml for an -->
  9. <!-- example). -->
  10. <!-- =========================================================== -->
  11. <Call name="addBean">
  12. <Arg>
  13. <New class="org.eclipse.jetty.security.HashLoginService">
  14. <Set name="name">Test Realm</Set>
  15. <Set name="config"><Property name="demo.realm" default="etc/realm.properties"/></Set>
  16. <Set name="refreshInterval">0</Set>
  17. </New>
  18. </Arg>
  19. </Call>
  20.  
  21. <Get class="org.eclipse.jetty.util.log.Log" name="rootLogger">
  22. <Call name="warn"><Arg>demo test-realm is deployed. DO NOT USE IN PRODUCTION!</Arg></Call>
  23. </Get>
  24. </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. Oracle 快照及 dblink使用 (两台服务器数据同步)

    /*一.创建dblink:*/ --1.在目的数据库上,创建dblin drop database link dblink_anson; Create public database link dbl ...

  2. C++_template_栈的链式存储及实现

    由于在C++数据结构中的代码不完整,特补全.等日后当工程库调用. 若有疑问,请留言. #include<iostream> using namespace std; template< ...

  3. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

  4. JavaScript中cookie的路径(path)和域(domain)

    cookie虽然是由一个网页所创建,但并不只是创建cookie的网页才能读 取该cookie.在默认情况下,与创建cookie的网页在同一目录或子目录下的所有网页都可以读取该cookie.但如果在这个 ...

  5. 带参数的存储过程和标量Function

    在SQL Server中,我们通常会使用NEWID(),GETDATE(),等一些数据库函数,这些函数是很有帮助的,然后数据库也能够让我们自己写函数,即Function,下面简单说说Function的 ...

  6. jQuery+Ajax+Jsp做二级级联

    终于弄懂了这个级联,我去!必须得在博客记下来. 1, JS代码: $(document).ready(function(){ $("#select1").change(functi ...

  7. ios 面试题 经典(比较全) 根据重点总结

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

  8. 【转】从底层了解ASP.NET体系结构

    从底层了解ASP.NET体系结构 原文:http://blog.csdn.net/zhoufoxcn/article/details/1890158 Java体系架构的书多如牛毛,比如SSH架构什么的 ...

  9. Publisher/Subscriber 订阅-发布模式

    Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WC ...

  10. java.lang.ClassNotFoundException: javax.servlet.Filter

    java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是 ...