java6新特性简介.ppt

上传人:laozhun 文档编号:2214277 上传时间:2023-01-31 格式:PPT 页数:36 大小:990.83KB
返回 下载 相关 举报
java6新特性简介.ppt_第1页
第1页 / 共36页
java6新特性简介.ppt_第2页
第2页 / 共36页
java6新特性简介.ppt_第3页
第3页 / 共36页
java6新特性简介.ppt_第4页
第4页 / 共36页
java6新特性简介.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《java6新特性简介.ppt》由会员分享,可在线阅读,更多相关《java6新特性简介.ppt(36页珍藏版)》请在三一办公上搜索。

1、JAVA6新特性简介,1、JAXB2、STAX3、Compiler API4、轻量级Http Server5、用Console开发控制台程序6、Common Annotations7、Web服务元数据(Web Services metadata)8、JAX-WS9、脚本语言支持(Scripting),JAXB(Java Architecture for XML Binding)是一种特殊的序列化/反序列化工具。它可以使XML数据以Java Objects的形式直接应用于Java程序之中,使Java Objects与XML数据之间的转换成为可能。在JAXB中将Java Objects到XML数据

2、的转换称为marshal;XML数据到Java Objects的转换称为unmarshal。,JAXB,xjc命令行程序xjc用于编译DTD或Schema生成与XML数据结构对应的JavaBeans类。操作方法如下:xjc-xmlschema|-dtd d 保存java文件的目录 p java文件所在的包,JAXB,常用注解及其作用,JAXB,XmlAccessorType控制字段或属性的序列化。XmlAccessType.FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由XmlTransient标注)字段到XML。其他值还有XmlAccessType.P

3、ROPERTY和XmlAccessType.NONE。XmlJavaTypeAdapter使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。XmlElementWrapper对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。XmlRootElement将Java类或枚举类型映射到XML元素。XmlElement将Java类的一个属性映射到与属性同名的一个XML元素。XmlAttribute将Java类的一个属性映射到与属性同名的一个XML属性。,序列化(Marsha

4、lling)与反序列化(Unmarshalling),JAXB,/创建JAXB环境JAXBContext context=JAXBContext.newInstance(Student.class);/创建编组Marshaller marshaller=context.createMarshaller();/设置编组属性,使得输出的XML文档进行格式化(提供缩进)marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);/编组到文件marshaller.marshal(student,file);/从文件解组到一

5、个新对象中Student newStudent=(Student)context.createUnmarshaller().unmarshal(file);,STAX(JSR 173)是JDK6.0中除了DOM 和SAX之外的又一种处理XML文档的API。,STAX,STAX的来历在JAXP1.3(JSR 206)有两种处理XML文档的方法:DOM(Document Object Model)和SAX(Simple API for XML).由于JDK6.0中的JAXB2(JSR 222)和JAX-WS 2.0(JSR 224)都会用到STAX所以Sun决定把STAX加入到JAXP家族当中来,

6、并将JAXP的版本升级到1.4(JAXP1.4是JAXP1.3 的维护版本).JDK6 里面JAXP的版本就是1.4.,STAX简介,STAX,STAX是The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API.STAX通过提供一种基于事件迭代器(Iterator)的API让程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符;SAX 也是基于事件处理xml 文

7、档,但却是用推模式解析,解析器解析完整个xml 文档后,才产生解析事件,然后推给程序去处理这些事件;DOM 采用的方式是将整个xml文档映射到一颗内存树,这样就可以很容易地得到父节点和子结点以及兄弟节点的数据,但如果文档很大,将会严重影响性能。,几种XML文档解析方式比较:,STAX,DOM(Document Object Model)文档对象模型分析方式。以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取和操作文档的任意部分。是W3C的官方标准。优点:1、允许应用程序对数据和结构做出更改。2、访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。缺点

8、:1、通常需要加载整个XML文档来构造层次结构,消耗资源大。,几种XML文档解析方式比较:,STAX,SAX(Simple API for XML)流模型中的推模型分析方式。通过事件驱动,每发现一个节点就引发一个事件,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成。优点:1、不需要等待所有数据都被处理,分析就能立即开始。2、只在读取数据时检查数据,不需要保存在内存中。3、可以在某个条件得到满足时停止解析,不必解析整个文档。4、效率和性能较高,能解析大于系统内存的文档。缺点:1、需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),使用麻烦。2、单向导航,很难同时访问同一

9、文档的不同部分数据,不支持XPath。,几种XML文档解析方式比较:,STAX,JDOM(Java-based Document Object Model)Java特定的文档对象模型。自身不包含解析器,使用SAX。优点:1、使用具体类而不是接口,简化了DOM的API。2、大量使用了Java集合类,方便了Java开发人员。缺点:1、没有较好的灵活性。2、性能较差。,几种XML文档解析方式比较:,STAX,DOM4J(Document Object Model for Java)简单易用,采用Java集合框架,并完全支持DOM、SAX和JAXP。优点:1、大量使用了Java集合类,方便Java开发

10、人员,同时提供一些提高性能的替代方法。2、支持XPath。3、有很好的性能。缺点:1、大量使用了接口,API较为复杂。,几种XML文档解析方式比较:,STAX,StAX(Streaming API for XML)流模型中的拉模型分析方式。提供基于指针和基于迭代器两种方式的支持。优点:1、接口简单,使用方便。2、采用流模型分析方式,有较好的性能。缺点:1、单向导航,不支持XPath,很难同时访问同一文档的不同部分。,由上面的测试结果可以看出,性能表现最好的是SAX,其次是StAX Stream和StAX Event,DOM和DOM4J也有着不错的表现。性能最差的是JDOM。所以,如果你的应用程

11、序对性能的要求很高,SAX当然是首选。如果你需要访问和控制任意数据的功能,DOM是个很好的选择,而对Java开发人员来讲,DOM4J是更好的选择。如果只需要做XML文档解析的话,综合性能、易用性、面向对象特征等各方面来衡量,StAX Event无疑是最好的选择。,STAX,JDK6 的Compiler API(JSR 199)可以动态编译Java源文件,Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。这个特性对于某些需要用到动态编译的应用程序相当有用,比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web S

12、erver 才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件,当然,现在的JSP Web Server也是支持JSP热部署的,现在的JSP Web Server通过在运行期间通过Runtime.exec 或ProcessBuilder 来调用javac 来编译代码,这种方式需要我们产生另一个进程去做编译工作,不够优雅而且容易使代码依赖与特定的操作系统;Compiler API通过一套易用的标准的API提供了更加丰富的方式去做动态编译,而且是跨平台的。,Compiler API,JDK6 提供了一个简单的Http Server API,据此我们可以构建自己的嵌

13、入式Http Server,它支持Http 和Https 协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现,程序员必须自己实现HttpHandler接口,HttpServer 会调用HttpHandler 实现类的回调方法来处理客户端请求,在这里,我们把一个Http 请求和它的响应称为一个交换,包装成HttpExchange类,HttpServer负责将HttpExchange传给HttpHandler实现类的回调方法.,轻量级Http Server,JDK6 中提供了java.io.Console 类专用来访问基于字符的控制台设备

14、.你的程序如果要与Windows 下的cmd 或者Linux 下的Terminal交互,就可以用Console类代劳.但我们不总是能得到可用的Console,一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用.如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。,用Console开发控制台程序,Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中.随着Annotation元数据功能(JSR

15、 175)加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务),如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设,所以,为其他相关的Java技术定义一套公共的Annotation是有价值的,可以避免重复建设的同时,也保证Java SE和Java EE 各种技术的一致性.,Common Annotations,Common Annotations,Web服务元数据(Web Services metadata),自从JDK

16、5添加了元数据功能(Annotation)之后,SUN几乎重构了整个J2EE体 系,由于变化很大,干脆将名字也重构为Java EE,Java EE(当前版本为5.0)将元数据纳入很多规范当中,这其中就包括Web Services的相关规范,比以前的JAX-RPC编程模型简单(当然,Axis的编程模型也很简单).这里要谈的Web服务元数据(JSR 181)只是Java Web 服务规范中的一个,它跟Common Annotations,JAXB2,StAX,SAAJ和JAX-WS等共同构成Java EE 5的Web Services技术堆栈.,下面介绍JSR-181里面各个元数据的相关参数及用途

17、:,Web服务元数据(Web Services metadata),如何在JDK6环境下发布Web Services和查看生成的WSDL:,Web服务元数据(Web Services metadata),1、将/bin加入path环境变量2、执行如下代码发布WSProvider到http:/localhost:8888/lj/WSProvider,wsgen-cp.WebServices.WSProvider 在这里可以执行WSProvider类的main方法就可以.在这个例子中会生成以下3个类的源代码文件及class文件SayHiSayHiResponsePrintTime3、在浏览器输入h

18、ttp:/localhost:8888/lj/WSProvider?wsdl就可以看到生成的WSDL,wsgen:,Web服务元数据(Web Services metadata),wsgen是在JDK的bin目录下的一个exe文件(Windows版),该命令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件。命令参数说明:-cp 定义classpath-r 生成 bean的wsdl文件的存放目录-s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会

19、生成该异常的描述类源文件)-d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)命令范例:wsgen-cp./bin-r./wsdl-s./src-d./bin-wsdl org.jsoso.jws.server.Example,JAX-WS2.0的来历,JAX-WS,JAX-WS(JSR-224)是Java Architecture for XML Web Services的缩写,简单说就是一种用Java和XML开发Web Services应用程序的框架,目前版本是2.0,它是JAX-RPC 1.1的后续版本,J2EE 1.4 带的就是JAX-

20、RPC1.1,而Java EE 5里面包括了JAX-WS 2.0,但为了向后兼容,仍然支持JAX-RPC.现在,SUN 又把JAX-WS 直接放到了Java SE 6里面,由于JAX-WS 会用到Common Annotation(JSR 250),Java Web Services Metadata(JSR 181),JAXB2(JSR 222),StAX(JSR 173),所以SUN也必须把后几个原属于Java EE范畴的Components下放到Java SE,现在我们可以清楚地理解了为什么Sun要把这些看似跟JavaSE没有关系的Components放进来,终极目的就是要在Java S

21、E里面支持Web Services.,JAX-WS2.0的架构,JAX-WS,JAX-WS不是一个孤立的框架,它依赖于众多其他的规范,本质上它由以下几部分组成1、用来开发Web Services的Java API2、用来处理Marshal/Unmarshal的XML Binding机制,JAX-WS2.0用JAXB2来处理Java Object与XML之间的映射,Marshalling就是把Java Object 映射到XML,Unmarshalling则是把XML映射到Java Object.之所以要做Java Object与XML的映射,是因为最终作为方法参数和返回值的Java Objec

22、t要通过网络传输协议(一般是SOAP)传送,这就要求必须对Java Object做类似序列化和反序列化的工作,在SOAP中就是要用XML来表示Java object的内部状态3、众多元数据(Annotations)会被JAX-WS 用来描述Web Services 的相关类,包括Common Annotations,Web Services Metadata,JAXB2的元数据和JAX-WS2.0规范自己的元数据.4、Annotation Processing Tool(APT)是JAX-WS重要的组成部分,由于JAX-WS2.0规范用到很多元数据,所以需要APT 来处理众多的Annotati

23、ons.在/bin 下有两个命令wsgen 和wsimport,就是用到APT 和Compiler API 来处理碰到的Annotations,wsgen可以为Web Services Provider产生并编译必要的帮助类和相关支持文件,wsimport以WSDL作为输入为Web Service Consumer 产生并编译必要的帮助类和相关支持文件.5、JAX-WS还包括JAX-WS Runtime与应用服务器和工具之间的契约关系,JAX-WS2.0的编程模型,JAX-WS,现在用JAX-WS2.0 来编写Web Services 非常简单,不像JAX-RPC,JAX-WS 可以把任意PO

24、JO暴露为Web Services,服务类不需要实现接口,服务方法也没有必要抛出RMI异常.下面介绍在JDK6环境下用JAX-WS2.0开发和测试Web Services的步骤1、编写服务类,并用Web Services Metadata(JSR-181)标注这个服务类,用Web 服务元数据中的WSProvider类作为服务类的例子,源代码可见上文。2、用wsgen生成上面服务类的必要的帮助类,然后调用用EndPoint类的静态方法publish发布服务类(请参考Web服务元数据),我在这里是将服务类发布到http:/localhost:8888/lj/WSProvider,JAX-WS2.0

25、的编程模型,JAX-WS,3、用wsimport为服务消费者(也就是服务的客户端)生成必要的帮助类,命令如下:wsimport-d./bin-s./src-p WebServices.client http:/localhost:8888/lj/WSProvider?wsdl这会在netcsdnbloglj下生成客户端的帮助类,在这个例子中会生成7个类HelloService.classObjectFactory.classpackage-info.classPrintSystemTime.classSayHi.classSayHiResponse.classWSProvider.class,

26、JAX-WS2.0的编程模型,JAX-WS,4、在客户端用下面代码即可调用步骤1定义的Web ServiceHelloService hs=new HelloService();WSProvider ws=hs.getWSProviderPort();System.out.println(ws.sayHi(lj);ws.printSystemTime();调用上述代码后客户端控制台输出hi,lj服务端控制台输出服务器当前系统时间,wsimport,JAX-WS,wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及

27、框架,负责 与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C#编写的web service,通过wsimport则生成Java的客户端实现。命令参数说明:-d 生成客户端执行类的class文件的存放目录-s 生成客户端执行类的源文件的存放目录-p 定义生成类的包名命令范例:wsimport-d./bin-s./src-p org.jsoso.jw

28、s.client.refhttp:/localhost:8080/hello?wsdl,概述:,脚本语言支持(Scripting),JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode 后再执行,所以比原来边解释边执行效率要高很多。,加入对脚本语言的支持后,对Java语言也提供了以下好处。,脚本语言支持(Scripting),1、许多脚本语言都有动态特性,比如,你不需要用一个变量之前先声明它,你可以用一个变量存放完全不同类型的对象,你不需要做强制类型转

29、换,因为转换都是自动的。现在Java语言也可以通过对脚本语言的支持间接获得这种灵活性。,加入对脚本语言的支持后,对Java语言也提供了以下好处。,脚本语言支持(Scripting),2、可以用脚本语言快速开发产品原型,因为现在可以Edit-Run,而无需Edit-Compile-Run,当然,因为Java 有非常好的IDE 支持,我们完全可以在IDE 里面编辑源文件,然后点击运行(隐含编译),以此达到快速开发原型的目的,所以这点好处基本上可以忽略。,加入对脚本语言的支持后,对Java语言也提供了以下好处。,脚本语言支持(Scripting),3、通过引入脚本语言可以轻松实现Java应用程序的扩

30、展和自定义,我们可以把原来分布在在Java应用程序中的配置逻辑,数学表达式和业务规则提取出来,转用JavaScript 来处理。Sun的JDK6实现包含了一个基于Mozilla Rhino的脚本语言引擎,支持JavaScript,这并不是说明JDK6只支持JavaScript,任何第三方都可以自己实现一个JSR-223 兼容的脚本引擎使得JDK6支持别的脚本语言,比如,你想让JDK6支持Ruby,那你可以自己按照JSR 223 的规范实现一个Ruby 的脚本引擎类,具体一点,你需要实现javax.script.ScriptEngine(简单起见,可以继承javax.script.Abstrac

31、tScriptEngine)和javax.script.ScriptEngineFactory 两个接口。当然,在你实现自己的脚本语言引擎之前,先到 project 这里看看是不是有人已经帮你做了工作,这样你就可以直接拿来用就行。,Scripting API,脚本语言支持(Scripting),Scripting API是用于在Java 里面编写脚本语言程序的API,在Javax.script 中可以找到Scripting API,我们就是用这个API来编写JavaScript程序,这个包里面有一个ScriptEngineManager 类,它是使用Scripting API的入口,Scrip

32、tEngineManager可以通过jar 服务发现(service discovery)机制寻找合适的脚本引擎类(ScriptEngine),使用Scripting API的最简单方式只需下面三步1、创建一个ScriptEngineManager 对象2、通过ScriptEngineManager获得ScriptEngine对象3、用ScriptEngine的eval方法执行脚本,利用Scripting API实现以下功能:,脚本语言支持(Scripting),1、暴露Java对象为脚本语言的全局变量2、在Java中调用脚本语言的方法3、脚本语言可以实现Java的接口4、脚本语言可以像Java一样使用JDK平台下的类。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号