Jetty服务配置.doc_第1页
Jetty服务配置.doc_第2页
Jetty服务配置.doc_第3页
Jetty服务配置.doc_第4页
Jetty服务配置.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Jetty服务配置文件 首先让我们回顾一下jetty的启动。命令“java -jar start.jar etc/jetty.xml” 中指定的文件 etc/jetty.xml 就是我们本章讨论的主要对象,我们称这种文件叫“服务配置文件”。下文中有时候我们说jetty.xml配置文件并不是特指这个文件而是通指“服务配置文件”。 Jetty其实提供一个IOC/DI(反转控制和依赖注射)容器,jetty.xml配置文件就是这个容器的配置文件,和Jetty本身服务没有直接关系,你甚至可以独立使用该组件。由次可见Jetty组件化设计发挥到了极致,组件之间也没有多少依赖性。相信熟悉springframework的朋友都知道它是 IOC领域的佼佼者之一。有趣的是虽然Jetty的IOC容器实现只是在内部使用,但它却是在springframework之前就存在了。Jetty的IOC容器实现代码非常少,只涉及到两个类: org.mortbay.xml.XmlConfiguration org.mortbay.xml.XmlParser 其本质是解析服务配置文件的组件为我们提供一个动态调用Java代码的工具,Jetty利用这个工具实现所谓的IOC容器配置Server对象和相关组件。如果我们手写这些jetty.xml配置对应的Java代码的话,其实就是嵌入式使用Jetty的方法,这里也体现了Jetty设计精妙之处。 在本章节中我们先展示下Jetty默认的jetty.xml文件,让大家对它有关大概的了解;然后详细介绍jetty xml Configuration的语法;最后我们使用org.mortbay.xml.XmlConfiguration编写写测试用例来更深入的了解jetty.xml和jetty启动配置过程。 4.1jetty.xml 示例剖析 50 50 30000 2 false 8443 5000 5000 /contexts 5 /webappsfalsetruefalse /etc/webdefault.xml Test Realm /etc/perties 0 /yyyy_mm_dd.request.log yyyy_MM_dd 90 true false false GMT true true true 10004.2Jetty xml Configuration语法 jetty.xml 的xml语法就好比一个编程语言,几乎就是Java语言的xml编程形式。 标签 标签作为jetty.xml根元素,表示org.mortbay.xml.XmlConfiguration需要配置的对象。 属性 id:可选;如果XmlConfiguration上下文环境 中存在该ID的话就对已存在的对象进行配置,反之创建一个class属性指定的类对象,同时以id为key保存在上下文环境中。 (其实所谓的上下文环境 就是java.util.HashMap 对象) class:必选;被配置的类。 可包含其他标签 : New, Set, Put, Call 和 Ref 例子 :8080 指定ID属性后,通过命令java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml 启动多个配置文件时,这些配置文件都会对同一Server对象进行配置。这段xml对应的java代码是org.mortbay.jetty.Server server = new org.mortbay.jetty.Server(); server.setPort(8080); 标签 设置目标对象的属性(property),目标对象是Set标签的父标签所指的对象。如果name属性为xxx,那么就会调用目标对象的setXxx方法,如果setXxx方法不存在就会直接设置xxx属性字段。 如果标签内容是普通文本,那么它会尽量尝试转型,如setXxx(int xxx)就会转成相应的int行。属性 name: 对象的属性名称 可包含对象 不同文本, Call, New and SystemProperty,Ref 标签 普通文本也可以和其他四个标签混合使用,所得的值是字符串相加的结果。示例 jetty 等价于Java代码:foo.Bar bar = new foo.Bar(); bar.setXxxDepartment(jetty );foo.Cat temp = new foo.Cat();temp.doSomething();bar.setCat(temp);标签 返回目标对象的属性。假如name属性为xxx,则调用目标对象的getXxx方法,如果getXxx方法不存在,那么就直接访问xxx字段。属性 id: 如果设置id属性,那么get获得的对象将以id值为key保存在 上下文环境 name:目标对象的属性名。 class:如果指定该属性,则调用该类上的静态的get方法或者字段。 可包含对象 Set, Put 和Call get所取得的对象将作为这3个标签的目标对象。示例 等价Java代码:/ foo.Bar bar = new foo.Bar(); x = bar.getXxx();env.put(xid,x);/env 为上下文环境 对象 等价Java代码:Server server = new org.mortbay.jetty.Server();String s = server.toString();env.put(s,s);/env 为上下文环境 对象org.mortbay.log.L(env.get(s); 标签 该标签是用来实现Map接口的对象上,调用Map接口的put(Object key,Object value)方法。属性 name:必选;作为put方法的key参数 type: 可选;如果设置一个类型,那么会进行类型检查。可包含对象 普通 文本,Call , New ,SystemProperty 标签 普通文本也可以和其他三个标签混合使用,所得的值是字符串相加的结果。 这些内容或者标签所产生、返回的对象作为put(Object key,Object value)方法的value参数示例 admin 标签 Call标签会调用目标对象的方法或者调用指定Class的静态方法。Call标签是通过name属性和标签存在个数来确定哪个方法被调用。属性 name:必选;指定调用的方法的方法名 class: 可选;如果设置该属性,则会调用该Class对象的静态方法可包含对象 0.*个标签,然后后面可跟随Set , Put ,Call标签, 这三个标签的目标对象便是Call标签所调用方法的返回对象。示例 xx value等级Java代码:Server server = new Server();Object x = server.doSomething(xx);x.setKey(value)如果使用class属性 xx value等级Java代码:Object x = foo.bar.Utils.doSomething(xx);x.setKey(value)标签 在New和Call标签中使用,为它们确定参数列表。Arg标签还可以通过type属性来强制参数类型。属性 type:可选;如果指定该值,那么会强制该参数对象的类型可包含对象 普通文本 ,Call , New , SystemProperty,Ref 普通文本也可以和其他四个标签混合使用,所得的值是字符串相加的结果。示例 11 aa 等价于Java代码:foo.Bar.doSomething(new foo.Bar2(11),new foo.Bar3(aa);标签 作用和Java关键字“new”一样,调用构造方法来新建一个对象。属性 id:可选;如果设置id,那么被创建的对象会以id为key保存在 上下文环境中 class: 必选;指明新建对象的类型。可包含对象 0.*个标签,然后后面可跟随Set ,Put ,Call标签, 这三个标签的目标对象便是New标签所新建的对象。 Arg标签用来确定使用哪个构造方法。示例 等价于Java代码:foo.Bar bar = new foo.Bar() /调用默认构造方法 bar 等价于Java代码:foo.Bar bar = new foo.Bar( bar ) 标签 从上下文环境 中取得指定的对象。然后使用Set,Put,Call等标签来操作该对象。还有另外一个用法是,在标签和中使用Ref标签来引用某个对象来作为Arg或者Set的值对象,如 。 属性 id:必选;要从 上下文环境获取对象的key 可包含对象 Set,Put,Call。 Ref所引用的对象作为这三个标签的操作对象。示例 等价Java代码:Object obj = env.get(key)/env表示上下文环境 对象obj.SetXxx(new foo.Bar()标签 创建一个List对象。当Set,Put或Arg标签需要使用List对象时,该标签就会派上用场。用Item来表示一个数组元素,并且Array只能包含Item标签。 属性 type:必选;用来指定数组元素的类型。 id:可选;如果存在id属性,那么被创建的List对象会以id值为key保存在 上下文环境中 。 可包含对象 Item标签 示例 org.mortbay.jetty.webapp.WebInfConfiguration org.mortbay.jetty.plus.webapp.EnvConfiguration org.mortbay.jetty.plus.webapp.Configuration org.mortbay.jetty.webapp.JettyWebXmlConfiguration org.mortbay.jetty.webapp.TagLibConfiguration等价Java代码:List plusConfig = new ArrayList();plusConfig.add( org.mortbay.jetty.webapp.WebInfConfiguration );plusConfig.add( org.mortbay.jetty.plus.webapp.EnvConfiguration );plusConfig.add( org.mortbay.jetty.plus.webapp.Configuration );plusConfig.add( org.mortbay.jetty.webapp.JettyWebXmlConfiguration );plusConfig.add( org.mortbay.jetty.webapp.TagLibConfiguration );env.put(plusConfig ,plusConfig ); /env表示上下文环境 对象 标签 和Array类似,Map标签是用来创建一个HashMap对象。我们这样使用: keyName value Entry标签包含了两个Item,第一个Item包含的内容为key,第二个为value。 对应的Java代码: java.util.Map map = new java.util.Map(); map.put(keyName,value); 属性 id:可选;如果存在id属性,那么被创建的List对象会以id值为key保存在 上下文环境中 。 可包含对象 两个Item标签 标签 Item被用作Array标签和Map的Entry标签中。 属性 type:可选;如果指定该值,那么会强制该参数对象的类型 可包含对象 普通文本,Call ,New ,SystemProperty 普通文本也可以和其他三个标签混合使用,所得的值是字符串相加的结果。标签 取得JVM的系统属性。相当于调用Java的System .getProperty(Test ,value )方法。 属性 name:系统属性名 default:可选;当指定系统属性不存在,则返回该默认值。 示例 /contexts 5 等价Java代码: ContextDeployer deployer = new org.mortbay.jetty.deployer.ContextDeployer(); deployer.setContexts(env.get( Contexts ); deployer.setConfigurationDir( System.getProperty(jetty.home,.) + /contexts ) deployer.setScanInterval(5); 4.3 org.mortbay.xml.XmlConfiguration 要学习一个新事物最快且最有效的方式是自己动手做实验。之前已经说过Jetty配置功能的实现代码只有两个类,那么我们可以使用它们写一些是实验程序,来帮组你更好地了解如何配置。 首先新建一个Java项目(这里我们使用Eclipse),导入 $jetty_home/lib下面的jetty-6.1.22.jar和jetty-util-6.1.22.jar两个jar包。 新建类TestObject.javapublic class TestObject public static void printString(Object x) System.out.println(x);int port;public void setPort(int port) this.port = port;public int getPort() return port;public static Map static_method() return new HashMap();public void doStringAdd(String a, String b) System.out.println(gogo(String a,String b)= + a + b);public void doStringAdd() System.out.println(call gogo();新建类 ConfigTest.javaimport .URL;import org.mortbay.xml.XmlConfiguration;public class ConfigTest public static void main(String args) throws Exception URL url = ConfigTest.class.getClassLoader().getResource(configure.xml);XmlConfiguration configuration = new XmlConfiguration(url);TestObject testObject = (TestObject) configuration.configure();System.out.println(configuration.getIdMap();最后在src目录下新建文件configure

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论