#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相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

最新文章

  1. 凸现三围的健身运动法
  2. Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
  3. SSM中怎样使用JUnit4+spring-test编写单元测试
  4. 10 迭代器与生成器
  5. 小白2分钟学会Visual Studio将引用包打包到NuGet上
  6. 高露洁、悦诗风吟、Benefit,618大促的数字化难题都是如何解决的?
  7. php url参数时间戳,AJAX GET 请求 URL 最后面缀的那个类似于时间戳的参数是什么啊?...
  8. VMware Linux 下 Nginx 安装配置 (一)
  9. php中echo和print的区别
  10. angular 9.2升级10.2.2
  11. 凸优化第四章凸优化问题 4.5几何规划
  12. 555定时器之内部结构图_20151231
  13. 感谢周易算命大师元真先生
  14. 软件测试技术课后习题:第9章软件测试自动化-广东高等教育出版社,主编杨胜利
  15. 武-NC15522(Dijsktra最短路算法)
  16. java中日志的级别说明
  17. 基于VHDL的FPGA简易电子琴(实现三音阶切换与弹奏)
  18. 易飞ERP客户问题集合之一
  19. 企业年金个人所得税怎么计算
  20. Vue vue-jsonp 跨域

热门文章

  1. HTTP progressive download渐进式传输
  2. 亲加通讯云郝飞:探讨直播低延迟低流量的粉丝连麦技术
  3. go uintptr unsafe Pointer offset() 的使用
  4. leetcode 795. Number of Subarrays with Bounded Maximum | 795. 区间子数组个数(Java)
  5. MySQL调优(三):索引基本实现原理及索引优化,哈希索引 / 组合索引 / 簇族索引等
  6. 【PAT甲级 ArrayList存放class】1011 World Cup Betting (20 分) Java版 3/3通过 四舍五入保留两位小数
  7. java并发之线程封闭(二)
  8. 使用memcache缓存
  9. Linux网络编程 之 IO多路复用poll(九)
  10. leetcode--53. 最大子序和