下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JDK1.6 新特性1、说明JDK1.6 的新特性,集中在网络操作和性能方面方面。如增加了对WebService 的支持、线程调度、HttpServer 等。2、Web 服务元数据Java 里的 Web 服务元数据跟微软的方案基本没有语义上的区别,自从 JDK5 添加了元数据功能(Annoion)之后,SUN 几乎重构了整个 J2EE 体系, 由于变化很大,干脆将名字也重构为 Java EE, Java EE(当前版本为5.0)将元数据纳入很多规范当中,这其中就包括 Web Servi的相关规范, 加入元数据之后的 Web Servi服务器端编程模型就跟上面看到的 C#片断差不多了, 这显然比
2、以前的 JAX-RPC 编程模型简单(当然, Axis 的编程模型也很简单).这里要谈的 Web 服务元数据(JSR 181)只是 Java Web 服务规范中的一个,它跟Common Annoions, JAXB2, StAX, SAAJ 和 JAX-WS 等共同Java EE 5 的Web Servi示例代码如下:技术堆栈.package cn.jdk6;import import import import import/*javax.jws.WebMethod;javax.jws.Wram;javax.jws.WebResult;javax.jws.WebService;javax.x
3、ml.ws.Endpo;* 发布一个WebServiceauthorver*/通过注解 WebServi播客-1.0 2012-3-1erviceName=oServiceoService)public class/方法同时设置参数WebMethod(operationName=sayHi)public WebResult(name=value)String sayHi(Wreturn o:+name;ram(name=name)String name)public sic void main(String args) oService hs = new/发布服务oService();Endp
4、o/.publish(,hs);可以获取服务说明3、轻量级的 HttpServerJDK6 提供了一个简单的Http Server API,据此可以构建自己的Http Server,它支持Http 和 Https 协议,提供了HTTP1.1 的部分实现,没有被实现的那部分可以通过扩展已有的 Http Server API 来实现,程序员必须自己实现 HttpHandler 接口,HttpServer 会调用 HttpHandler 实现类的回调方法来处理客户端请求,在这里, 把一个 Http 请求和它的响应称为一个交换,包装成 HttpExchange 类,HttpServer 负责将 Htt
5、pExchange 传给 HttpHandler 实现类的回调方法。示例代码 1:简单服务器package cn.jdk6;import import import import import import import import/*java.io.IOException; java.io.OutputStream; .InetSocketAddress; java.text.SimpleDateFormat; java.util.Date; .httpserver.HttpExchange; .httpserver.HttpHandler;.httpserver.HttpServer;*
6、 HttpServer开发的简单服务器JDK1.6新特性* 实现简单的服务器的搭建,接收T/GET请求,返回当前时间authorver播客-1.0 2012-2-29*/public class HttpServerDemo public sic void main(String args) throws Exception HttpServer server = HttpServer.create(new InetSocketAddress(9999),0);/启动以后,:即可以server.createContext(/o,new HttpHandler() /以下是类直接获取信息publ
7、ic void handle(HttpExchange exc) throws IOException System.err.prln(okok);SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); String tm = df.format(new Date();String str = 你好,现在时间是:+tm;/这句必须要在sendResponseHeaders(200)以前设置 exc.getResponseHeaders().set(Content-Type,text/html;charset=UTF-8)
8、;/在所有头信息设置完成以后才可以设置此信息,为了输出中文应该计算字节长度 exc.sendResponseHeaders(200,str.getBytes().length); OutputStream out = exc.getResponseBody(); out.write(str.getBytes(UTF-8);out.flush();olose(););server.start(); System.err.prln(OK);示例代码 2:获取请求头、请求体信息package cn.jdk6;import import import import import import impo
9、rt import import import import import/*java.io.BufferedReader; java.io.IOException; java.io.InputStream; java.io.InputStreamReader; java.io.OutputStream; .InetSocketAddress; java.text.SimpleDateFormat; java.util.Date; java.util.Iterator;.httpserver.HttpExchange;.httpserver.HttpHandler; .httpserver.H
10、ttpServer;* HttpServer开发的简单服务器JDK1.6新特性获取用户的GET/获取所有请求头信息T请求如果是authorver*/t请求,获取请求正文播客-1.0 2012-2-29public class HttpServerDemo2 public sic void main(String args) throwsExceptionHttpServer server = HttpServer.create(new InetSocketAddress(9999),0);server.createContext(/Overrideo,new HttpHandler() pub
11、lic void handle(HttpExchange exc) throws IOException /获取请求的首行信息String StringStringremoteAddress = exc.getRemoteAddress().getHostName();/remotePortmethod= +exc.getRemoteAddress().getPort();= exc.getRequestMethod();System.err.prln(方法:+method+,者的Ip:+remoteAddress+,者的端口:+remotePort);String pro = exc.get
12、Protocol();System.err.prln(协议:+pro);/以下是获取请求头信息System.err.pr/遍历所有请求头ln(大小:+exc.getRequestHeaders().size();Iterator it = exc.getRequestHeaders().keySet().iterator();while(isNext()String key = it.next();Object val = exc.getRequestHeaders().get(key);System.err.prln(key+:+val);/如果是t请求,可以获取请求的正文信息InputSt
13、ream in = exc.getRequestBody();BufferedReader bf = new BufferedReader(new InputStreamReader(in); String str1=null;while(str1=bf.readLine()!=null)System.err.prln(str1);System.err.prln(okok);SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); String tm = df.format(new Date();String str =
14、你好,现在时间是:+tm;/这句必须要在sendResponseHeaders(200)以前设置 exc.getResponseHeaders().set(Content-Type,text/html;charset=UTF-8);/在所有头信息设置完成以后才可以设置此信息 exc.sendResponseHeaders(200,str.getBytes().length); OutputStream out = exc.getResponseBody(); out.write(str.getBytes(UTF-8);out.flush();olose(););server.start();
15、System.err.prln(OK);示例代码 3:使用线程package cn.jdk6;import import import import import import import import import import/*java.io.IOException; java.io.OutputStream; .InetSocketAddress; java.text.SimpleDateFormat; java.util.Date; java.util.concurrent.ExecutorService; java.util.concurrent.Executors; .http
16、server.HttpExchange; .httpserver.HttpHandler;.httpserver.HttpServer;HttpServer开发的简单服务器JDK1.6新特性测试设置线程调试播客-1.0 2012-2-29authorver*/public class HttpServerDemo3 public sic void main(String args) throwsException/线程调度ExecutorService pool = Executors.newCachedThreool();HttpServer server = HttpServer.crea
17、te(new InetSocketAddress(9999),0);server.createContext(/Overrideo,new HttpHandler() public void handle(HttpExchange exc) throws IOException System.err.prln(okok);SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); String tm = df.format(new Date();String str = 你好,现在时间是:+tm;exc.getRespons
18、eHeaders().set(Content-Type,text/html;charset=UTF-8); exc.sendResponseHeaders(200,str.getBytes().length);OutputStream out = exc.getResponseBody(); out.write(str.getBytes(UTF-8);/会输出不同的线程名System.err.prtryln(线程名:+Thread.currentThread().getName();Thread.sleep(2000);catch(Exception e) out.flush();olose(
19、););/可以通过设置一个线程组由线程来决定执行的过程 server.setExecutor(pool);server.start();System.err.prln(OK);4、使用 JAXB2 来实现对象与 XML 之间的JAXB 是 Java Architecture for XML Binding 的缩写,可以将一个 Java 对象转变成为XML 格式,反之亦然。把对象与关系数据库之间的称为 ORM,其实也可以把对象与XML 之间的称为 OXM(Object XML Map)。原来 JAXB 是 Java EE的一部分,在 JDK1.6 中,SUN 将其放到了 Java SE 中,这也
20、是SUN 的一贯做法。JDK1.6 中自带的这个 JAXB 版本是 2.0,比起 1.0(JSR 31)来,JAXB2(JSR 222)用 JDK5 的新特性 Annoion 来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在 Java EE 5.0 中,EJB 和 Web Servi也通过 Annoion 来简化开发工作。另外,JAXB2 在底层是用 StAX(JSR 173)来处理 XML 文档。除了 JAXB 之外,还可以通过 XMLBeans 和 Castor 等来实现同样的功能。示例代码,简单绑定:package c;import import import impo
21、rt import import/*java.io.StringReader; java.io.StringWriter; javax.xml.bind.JAXBContext; javax.xml.bind.Marshaller; javax.xml.bind.Unmarshaller;javax.xml.bind.annoion.XmlRooement;必须添加以下注解author*/XmlRooementpublic classprivate String name;privateeger age;public String getName() return name;public vo
22、id setName(String name) = name;publiceger getAge() return age;public void setAge(this.age = age;eger age) public sic void main(String args) throws Exception /获取上下文对像JAXBContext ctx = JAXBContext.newInstance(Marshaller marsh = ctx.createMarshaller();.class);p = newp.setName(Jack); p.setAge(99);();Str
23、ingWriter w = new StringWriter();marsh.marshal(p,w);/转成xml字符串输出StringBuffer sb System.err.pr System.err.prString xml = :+sb);ln();80Rose;Unmarshaller unmarshObject o = unmars= ctx.createUnmarshaller();marshal(new StringReader(xml);/将xml文件转成JavaBean o;pp = (System.err.pr)ln(pp.getName()+,+pp.getAge()
24、;5、StAXStAX(JSR 173)是 JDK1.6.0 中除了 DOM 和SAX 之外的又一种处理 XML 文档的API。StAX 的来历:在 JAXP1.3(JSR 206)有两种处理 XML 文档的方法:DOM(Object M)和SAX(Simple API for XML)。由于 JDK1.6.0 中的 JAXB2(JSR 222)和 JAX-WS 2.0(JSR 224)都会用到 StAX 所以 Sun 决定把 StAX 加入到 JAXP当中来,并将 JAXP 的版本升级到 1.4(JAXP1.4 是 JAXP1.3 的版本)。JDK1.6 里面 JAXP 的版本就是 1.4。
25、StAX 是The Streaming API for XML 的缩写,一种利用拉模式(pull-parsing)XML 文档的API.StAX 通过提供一种基于事件迭代器(Iterator)的API让程序员去控制 xml 文档过程,程序遍历这个事件迭代器去处理每一个事件,事件可以看做是程序拉出来的,也就是程序促使器产生一个事件然后处理该事件,之后又促使器产生下一个事件,如此循环直到碰到文档结束符;关于 StAX 的具体操作,请见别一文档StAX.doc。(需要补充代码)6、内置对 JavaScript 的支持JSR 233 为 Java 设计了一套语言API。这一套API 提供了在 Java
26、 程序中调用语言引擎的接口。任何实现了这一接口的语言引擎都可以在 Java 程序中被调用。在 Mustang 的的 JavaScript 实现。他的名字来源于 OReilly。版本中包括了一个基于 Mozilla Rhino 的 JavaScript引擎。Rhino 是一个纯 Java 的开源在 Mustang 中对引擎的检索使用了工厂模式。首先需要实例化一个工厂 ScriptEngineManager。ScriptEngineManager factory = new ScriptEngineManager();以下是测试代码:package cn.script;import import
27、import import import import import public/*java.io.InputStreamReader; java.util.List; javax.script.Invocable; javax.script.ScriptEngine; javax.script.ScriptEngineFactory; javax.script.ScriptEngineManager;.junit.Test;class ScriptDemo * 6.1、测试支持的语言*/ Testpublic void testSupport() ScriptEngineManager s
28、em = new ScriptEngineManager(); List list= sem.getEngineFactories(); for(ScriptEngineFactory sef : list)System.err.prln(+sef.getLanguageName();/只输出EMAScript/用Jdk1.6运行JS代码 Testpublic void testGo() throws ExceptionScriptEngineManager sem = new ScriptEngineManager();ScriptEngine en = sem.getEngineByNam
29、e(javascript);/根据语言名称获取引擎enen en=sem.getEngineByName(js);/根据语言获取引擎(js); /根据文件扩展名获取引擎sem.getEngineByExtensem.getEngineByMimeType(application/javascript);/根据文档类型获取引擎/直接输出o在控制台en.eval(pr(o););String js = if(true)pren.eval(js);(Good);/* 用JDK6运行一个外部的js文件,在本类的目录下保存一个o.js如下:* pr(o这是语言rn);function abc(str)p
30、r(str);abc(这是新数据);*/ Testpublic void testFile() throws ExceptionScriptEngineManager sem = new ScriptEngineManager();ScriptEngi= sem.getEngineByName(javascript);se.eval(new InputStreamReader(this.getClass().getResourceAsStream(o.js);/将一个类当成一段 Test运行,给了另一种以类似反射形式调用Java代码的方法public void testCls() throws
31、 Exceptionclass Onepublic String say()System.err.prln(o.);return o;public void o(String name,eger age)System.err.prln(o:+name+,age:+age);ScriptEngineManager sem = new ScriptEngineManager();ScriptEngi= sem.getEngineByExten(js);到外而后,也可以使用反射Object one = new One();se.put(two, one);/将One类/通过put方法将one对象,成
32、JS的变量Object o = se.eval(two.say(););/调用且获取返回值ln(返回的值是:+o);/输出返回值o(中国,50););/调用带有两个参数的方法System.err.prse.eval(two./* 也可以调用JS的任意方法*/ Testpublic void testInvocation() throws ExceptionScriptEngineManager sem = new ScriptEngineManager();ScriptEngi/定义一两个方法= sem.getEngineByExten(js);String js = function abc
33、(arg1,arg2)pr(arg1+,+arg2); +function say()return se.eval(js);o;Invocable invo = (Invocable) se;/将se转成Invocable可执行对象invo.invokeFunction(abc,Jack,90);/调用abc方法,将传递两个参数 Object res = invo.invokeFunction(say);System.err.prln(返回值是:+res);也可以使用 JavaScript 代码,实现一个 Java 的接口:/* 以下是JS实现Java的一个接口*/erface IOne/定义一个接口public void say(String abc);Testpublic void testImpl() throws ExceptionString js = function say(str)pr(str);/此JS实现IOne接口,拥有与Java代码相同的方法ScriptEngineManager sem = new ScriptEngineManager();Sc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省徐州市铜山区2023-2024学年高二上学期期中考试政治试题(选择考)
- 跨国公司财务管理制度的国际比较
- 四年级音乐微课教案
- 2024年共创未来:五位合伙人协议范本
- 2024-2025学年人教版物理八年级下册 8.2二力平衡教案
- 2023-2024学年三年级下学期数学第一单元第二课时《两位数乘两位数的笔算》(学案)
- 建筑企业财务管理制度的项目控制
- 大班教案:春雨
- 二年级下册数学教案 第六单元【第四课时】 有余数的除法复习 人教新课标
- STEAM教育课程开发方案
- 2024-2024部编版九年级语文上册期末考试测试卷(附答案)
- 争做“四有好老师”-当好“四个引路人”
- 2024-2025学年八年级生物上册第一学期 期末综合模拟测试卷( 人教版)
- 2024-2030年中国生物炭行业市场发展趋势与前景展望战略分析报告
- 中国融通地产社招笔试
- YDT 4565-2023物联网安全态势感知技术要求
- 营养风险筛查与评估课件(完整版)
- 【工商企业管理专业实操实训报告2600字(论文)】
- 主播薪资核算方案
- 【正版授权】 ISO 3585:1998 EN Borosilicate glass 3.3 - Properties
- 凉山彝族自治州2022-2023学年七年级上学期期末地理试题【带答案】
评论
0/150
提交评论