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類似。
總結
以上是生活随笔為你收集整理的java和tornado_TornadoJ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java基础数据结构查询最快_Java
- 下一篇: java hex to float_He