基于JDK HttpServer的RESTEasy
来源:互联网 发布:软件测试员简历模板 编辑:程序博客网 时间:2024/05/09 17:31
原文: http://bluedash.net/spaces/%E5%9F%BA%E4%BA%8EJDK%20HttpServer%E7%9A%84RESTEasy
从RESTEasy 2.3开始,加入了一种新的无需Servlet容器的运行方式-通过使用JDK自带的轻量级HTTP Server进行加载。
HttpServer介绍
首先介绍一下JDK中自带的HttpServer,下面是一个例子:
01
import
com.sun.net.httpserver.Headers;
02
import
com.sun.net.httpserver.HttpExchange;
03
import
com.sun.net.httpserver.HttpHandler;
04
import
com.sun.net.httpserver.HttpServer;
05
06
import
java.io.IOException;
07
import
java.io.OutputStream;
08
import
java.net.InetSocketAddress;
09
import
java.util.Iterator;
10
import
java.util.List;
11
import
java.util.Set;
12
import
java.util.concurrent.Executors;
13
14
public
class
HttpServerDemo {
15
public
static
void
main(String[] args)
throws
IOException {
16
InetSocketAddress addr =
new
InetSocketAddress(
8080
);
17
HttpServer server = HttpServer.create(addr,
0
);
18
19
server.createContext(
"/"
,
new
MyHandler());
20
server.setExecutor(Executors.newCachedThreadPool());
21
server.start();
22
System.out.println(
"Server is listening on port 8080"
);
23
}
24
}
25
26
class
MyHandler
implements
HttpHandler {
27
public
void
handle(HttpExchange exchange)
throws
IOException {
28
String requestMethod = exchange.getRequestMethod();
29
if
(requestMethod.equalsIgnoreCase(
"GET"
)) {
30
Headers responseHeaders = exchange.getResponseHeaders();
31
responseHeaders.set(
"Content-Type"
,
"text/plain"
);
32
exchange.sendResponseHeaders(
200
,
0
);
33
34
OutputStream responseBody = exchange.getResponseBody();
35
Headers requestHeaders = exchange.getRequestHeaders();
36
Set<String> keySet = requestHeaders.keySet();
37
Iterator<String> iter = keySet.iterator();
38
while
(iter.hasNext()) {
39
String key = iter.next();
40
List values = requestHeaders.get(key);
41
String s = key +
" = "
+ values.toString() +
"\n"
;
42
responseBody.write(s.getBytes());
43
}
44
responseBody.close();
45
}
46
}
47
}
JDK自带的HttpServer是一个非常轻量级的Http服务端框架,但是它非常灵活,易于扩展,组成框架的核心类及框架为:
1
com.sun.net.httpserver.HttpExchange;
2
com.sun.net.httpserver.HttpHandler;
3
com.sun.net.httpserver.HttpServer;
其中,HttpHandler框架是我们要实现的服务接口:通过处理HttpExchange中包含的Request,Response及各种HTTP协议信息,实现我们的处理逻辑。上面的例子中,在MyHandler中实现了服务器端的处理逻辑:将用户的请求信息打印出来。
最后,通过将HttpServer绑定至服务端口,进行启动:
1
InetSocketAddress addr =
new
InetSocketAddress(
8080
);
2
HttpServer server = HttpServer.create(addr,
0
);
3
server.start();
执行上面的例子,访问:
1
http://localhost:8080
返回如下:
1
Host = [localhost:8080]
2
Accept-encoding = [
gzip
, deflate]
3
Connection = [keep-alive]
4
Accept-language = [en-us]
5
User-agent = [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3]
6
Accept = [text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
RESTEasy + HttpServer
从RESTEasy 2.3.3开始,添加了对JDK的HttpSever支持,使得RESTEasy容器可以脱离Servlet容器(比如Tomcat或JBoss),基于HttpSever启动。新的机制主要依赖于:
1
org.jboss.resteasy.plugins.server.sun.http.HttpContextBuilder;
通过使用RESTEasy新提供的HttpContextBuilder,便可将RESTFul WebService注册进HttpServer。假设我们有resouce如下:
01
@Path
(
"/"
)
02
public
class
SimpleResource
03
{
04
@GET
05
@Path
(
"basic"
)
06
@Produces
(
"text/plain"
)
07
public
String getBasic()
08
{
09
System.out.println(
"getBasic()"
);
10
return
"basic"
;
11
}
12
}
则结合HttpServer的具体调用方式如下:
1
InetSocketAddress addr =
new
InetSocketAddress(
8080
);
2
HttpServer httpServer = HttpServer.create(addr,
0
);
3
...
4
contextBuilder =
new
HttpContextBuilder();
5
contextBuilder.getDeployment().getActualResourceClasses().add(SimpleResource.
class
);
6
contextBuilder.bind(httpServer);
7
...
8
httpServer.start();
RESTEasy的这一新模块位于RESTEasy源代码目录中的server-adapters/resteasy-jdk-http子项目:
1
https://github.com/resteasy/Resteasy/tree/master/jaxrs/server-adapters/resteasy-jdk-http
- 基于JDK HttpServer的RESTEasy
- 基于JDK HttpServer的RESTEasy
- 基于Python的HttpServer
- JDK 内置的轻量级 HTTP 服务器 --- HttpServer
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于Netty4的HttpServer和HttpClient的简单实现
- 基于RestEasy开发环境搭建
- HttpServer的一些经验
- JDK6 HttpServer的使用
- 简单的HttpServer
- HttpServer的简单运用
- jdk6 HttpServer的使用
- resteasy的使用
- java 中用户角色权限判定方法
- java IO流之四 使用转换流InputStreamReader和OutputStreamWriter
- 黑马程序员—基本数据类型转换
- 放弃
- 开源网页截屏工具 CutyCapt Linux 下安装和使用
- 基于JDK HttpServer的RESTEasy
- Java 点点滴滴
- STL中删除和替换算法 (15 个)
- Linux音频系统分析(一)
- 设置listview中item项的高度
- C# 删除DataTable技巧
- json-lib 出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法
- oracle下sqlplus历史命令的回调功能
- QT事件