java和tornado_TornadoJ

#TornadoJ是一个纯JAVA Web框架

##小巧精致,很少的依赖,注解配置,可插接,易于内嵌到现有系统##

需要JDK1.5,Servlet 2.5支持

##快速开始##

TornadoJ就像大多数插件系统一样,会在Web服务器启动时加载注解的类及插件接口,并缓存起来,所以第一步需要做的是指定一个Java包前缀,在tornadoj.properties中,

plugin.package.prefix = test,可以指定多个,以;分割。

我们从五个部分来熟知TornadoJ,路由配置、API创建、插件系统、页面布局以及安全认证。

@WebModule(name = "user")

public class RouteTest {

/**

* url:/user/profile/1.html

*

* @param context

*/

@Route(name = "profile", paramPatterns = "\\d+")

public void profile(HttpContext context) {

int id = context.paramInt(0);

Log.info(String.format("%d", id));

context.putData("userId", id);

context.render("testlayout.ftl");

}

/**

* url:/user/business/vip-2.html

*

* @param context

*/

@Route(name = "/business", paramPatterns = "\\w+-\\d+", paramExtractor = "\\w+")

public void business(HttpContext context) {

String type = context.param(0);

int id = context.paramInt(1);

Log.info(String.format("%s", type));

Log.info(String.format("%d", id));

context.render("testlayout.ftl");

}

/**

* Url: /user/financial/2013-11-11_2014-11-11.html

*

* @param context

*/

@Route(name = "/financial", paramPatterns = "\\d{4}-\\d{2}-\\d{2}_\\d{4}-\\d{2}-\\d{2}", paramExtractor = "\\d{4}-\\d{2}-\\d{2}")

public void financial(HttpContext context) {

Date from = context.paramDate(0, "yyyy-MM-dd");

Date to = context.paramDate(1, "yyyy-MM-dd");

Log.info(DateFormatUtils.format(from, "yyyy/MM/dd"));

Log.info(DateFormatUtils.format(to, "yyyy/MM/dd"));

context.putData("fromDate", from);

context.putData("toDate", to);

context.render("testlayout.ftl");

}

}

二:API创建 针对不同客户端数据请求,API方式是不可缺少的,特别像手持设备。可参考@.Api,@Function说明。

@Api(name = "com.domain.app.mymodule")

public class ApiTest {

/**

* url:/api/com.domain.app.mymodule/users

*

* @param context

* @return

*/

@Function(name = "users")

public Object list(HttpContext context) {

ApiResult r = new ApiResult();

r.setSuccess(true);

r.setData(new String[]{"jay", "tom"});

/**

* 安置扩展点

*/

List plgs = ClassLoaderUtil.getPlugin(IPluginTest.class);

for(IPluginTest t : plgs){

r.setData(t.doInPluginTest());

}

return r;

}

/**

* url:/api/com.domain.app.mymodule/cache?id=1

* HttpRequest参数占位,组合成缓存Key。

* @param context

* @return

*/

@Function(cacheName = "tornadoj", cacheKey = "test_{id}")

public Object cache(HttpContext context) {

ApiResult r = new ApiResult();

r.setSuccess(true);

r.setData(new String[]{"jay", "tomcat"});

return r;

}

}

三:插件系统

第一步:定义扩展点

@Point()

public interface IPluginTest {

public Object doInPluginTest();

}

第二步:安置扩展点

public Object list(HttpContext context) {

ApiResult r = new ApiResult();

r.setSuccess(true);

r.setData(new String[]{"jay", "tom"});

/**

* 安置扩展点

*/

List plgs = ClassLoaderUtil.getPlugin(IPluginTest.class);

for(IPluginTest t : plgs){

r.setData(t.doInPluginTest());

}

return r;

}

四:页面布局 熟悉Tornado的开发者对下面介绍的应该不会陌生。提示:不支持嵌套继承

首先定义母板页面 master.layout

{% block title %}

{% block head %}

{% block body %}

{% block menu %}

{% block other %}

然后子页继承母板页面,重定义母板中的块,例如 testlayout.ftl

{% extends "master.layout" %}

{% block title %}布局测试{% end %}

{% block head %}

function show(){

alert('wwww');

}

{% end %}

{% block body %}

Show!

{% end %}

五:安全认证

路由及API都有auth属性,开启此属性后,只要在HttpSession中存在 HttpContext.SESSION_CURRENT_USER项,该项保存当前登录用户唯一标识,ID或者用户名等。这也与Tornado类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值