-
Notifications
You must be signed in to change notification settings - Fork 11
Doc003.BasicUse
Ping.X edited this page Feb 1, 2016
·
5 revisions
我们假设有这样一个需求:
一个资源网站,提供两个REST接口,分别是
GET /thing和POST /thing,其中POST请求需要鉴权。另外,我们需要统计接口的访问次数。
我们建议这么做:
- 设计一个统计接口访问次数的filter。
uriPattern=^/thing - 设计一个用于鉴权的filter,鉴权失败返回403,鉴权成功流向下一个节点。
method=POST,uriPattern=^/thing - 设计一个处理
GET /thing的handler。method=GET,uriPattern=^/thing - 设计一个处理
POST /thing的handler。method=POST,uriPattern=^/thing - 设计一个默认controller,可以返回404。
代码如下:
StatisFilter类,实现接口次数统计:
public class StatisFilter extends HttpNormalFilter {
...
}AuthFilter类,实现鉴权:
public class AuthFilter extends HttpNormalFilter {
...
}GetThingHandler类:
public class GetThingHandler extends HttpNormalHandler {
...
}PostThingHandler类:
public class PostThingHandler extends HttpNormalHandler {
...
}DefaultHandler类:
public class DefaultHandler extends HttpNormalHandler {
...
}设置happor运行环境然后启动webservice:
public static void main(String[] args) {
// TODO Auto-generated method stub
HapporContext context = new HapporManualContext();
context.setWebserverHandler(new WebserverHandler() {
...
})
.addController(StatisFilter.class, null, "^/thing")
.addController(AuthFilter.class, "POST", "^/thing")
.addController(GetThingHandler.class, "GET", "^/thing")
.addController(PostThingHandler.class, "POST", "^/thing")
.addController(DefaultHandler.class);
context.getServer().setPort(8080);
context.getServer().setExecuteThreads(16);
context.getServer().setMaxHttpSize(1000000);
context.getServer().setTimeout(60);
context.runServer();
}说明:
- filter类型的controller需要继承
HttpNormalFilter基类,handler类型的controller需要继承HttpNormalHandler基类。 - 使用
HapporManualContext类创建运行环境。 -
WebserverHandler是webserver的回调处理接口,在例如webserver启动时,会回调上来。 - 使用
addController依次加入所有controller,并设置匹配条件。 - 设置webserver的参数,包括:
setPort监听端口setExecuteThreads业务执行线程数setMaxHttpSizeHTTP消息最大长度setTimeoutHTTP连接最大超时时间 - 最后,调用
runServer启动webserver。
在上面的例子中,代码中省略了controller的实现。我们会在下一节介绍controller的类型与使用方式。