日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java和tornado_TornadoJ

發布時間:2024/1/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。