Skip to content

Doc003.BasicUse

Ping.X edited this page Feb 1, 2016 · 5 revisions

我们假设有这样一个需求:

一个资源网站,提供两个REST接口,分别是GET /thingPOST /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 业务执行线程数 setMaxHttpSize HTTP消息最大长度 setTimeout HTTP连接最大超时时间
  • 最后,调用runServer启动webserver。

在上面的例子中,代码中省略了controller的实现。我们会在下一节介绍controller的类型与使用方式

Clone this wiki locally