文档章节

基于playframework v1构建一个新的Java web应用框架

罗格林
 罗格林
发布于 2012/12/07 07:55
字数 548
阅读 820
收藏 4

正在考虑基于playframework v1构建一个新的Java web应用框架

动机: 我非常喜欢 playframework v1 但对v2不太感冒

v1中哪些特性应该保留:

  • 字节码增强。 这个超酷的特性允许框架和插件作者在应用中插入需要的逻辑,比如AOP,而AOP也仅仅是其中之一而已。
  • 全栈框架。跟play一样,这个新框架应该能自己运行,而不是插入一个Servlet容器。当然也应该允许用户应用被包进Servlet。
  • 支持插件,虽然API应有所变化。
  • 为应用程序提供方便的工具库, 比如 IO, Codec, Images 等.
  • 内置简单的安全框架
  • 易用的DB 层,允许插入不同的实现,包括 JPA, EBean, Morphia 等.
  • 内置数据有效性检查
  • 方便易用的异步API。
  • Before, After, Final, Catch 等过滤器
  • 根据 request.format 自动匹配模板文件
  • 模板中支持JavaExtension
  • 最最重要的是 简洁易用!


哪些应该改变或者提高的:

 

  • 路由机制。优化路由性能,让框架在大型应用(100条路由以上)也能快速定位响应方法。优化的机制可能包括使用代码生成器生成为每条路由动态生成帮助类。
  • 响应方法启动机制. 提高性能,减少对 reflection, static methods 和 Exception的使用。但API应该保持play1的简洁易用。
  • 插件框架API。
  • 用Java和脚本替代play1发行包中的python部分
  • CRUD
  • 用Rythm替代Groovy作为缺省模板引擎
  • 用Ebean替代JPA作为缺省数据访问层
  • 增强对JSON的支持。
  • 用markdown替代textile作为文档语言

 


Proposed Controller API:

 

public class Orders extends Controller {


  // --- Parameters used in action handling methods
  @Bind(method = Bind.ByID)
  protected Order order; // will bind to http request params with Order.findById(params.get("orderId"))
  
  @Bind(method = Bind.ById)
  protected User user;
  // -- eof Parameters
  
  // this use new return style API
  @Required("orderId")
  public Result show() {
    return new Render(order);
  }


  // this use old style API
  @Required("orderId")
  public void saveUpdate() {
    notFoundIfNull(user);
    order.save();
    render(order, user);
  }
  
  // this action method will be executed in a separate thread
  @Async
  public Result report() {
    order.save();
    List<Order> orders = ...
    return new RenderPDF(orders);
  }
  
}
 

Sample route file:

GET /orders/{orderId} Orders.show
POST /orders/{orderId} Orders.saveUpdate
GET /orderReport Orders.report
 

© 著作权归作者所有

共有 人打赏支持
罗格林

罗格林

粉丝 269
博文 43
码字总数 41930
作品 4
其他
架构师
加载中

评论(5)

罗格林
罗格林
这篇博客写作与3年半之前。作为后续,我已经开发出了一个新的框架:https://github.com/actframework/actframework。现已在公司商业项目中使用(重写以前用Jersey写的一个RESTFul的应用),效果非常好。框架功能已经基本完善,目前正在测试完善之中,文档工作也有待完善。希望能在今年年底之前正式发布
罗格林
罗格林

引用来自“风花狂月”的评论

我要反馈rythm的一个标签错误。。。@extends()这个标签~使用了以后,html根本生成不了
在你的父模板里面有没有@render()或者@doLayout()? 参见:http://fiddle.rythmengine.org/#/editor/886606b3a7034088b991855bef8f89da
风花狂月
风花狂月
我要反馈rythm的一个标签错误。。。@extends()这个标签~使用了以后,html根本生成不了
JiangCretu
JiangCretu
great idea !
罗格林
罗格林
这篇博客同时也有英文版本发在blogger网站上:http://software-lgl.blogspot.com.au/2012/12/thinking-about-creating-new-java-web.html
关于Play(Play 2.0 介绍)

Play 2.0 介绍 2007开始,我们一直致力于让Java开发web应用更容易。Play始于一个内部项目Zenexity,它深刻影响了我们开发web项目的方式:关注开发者生产力,遵循web架构的特点,并打破常规,...

大东哥
2012/03/19
0
0
JVM 上各种 Web 框架的抽象层 - Asity

Asity Asity 是 Java 虚拟机上各种 Web 框架的抽象层,可以在 JVM 上构建 Web 框架不可知的应用程序。 Asity 是 Web 框架的一个轻量级抽象层,它被设计用来构建应用程序和框架,这些应用程序...

匿名
05/28
0
0
NodeJS对于Java开发者而言是什么?

我们都知道Node.js现在得到了所有的关注。每个人都对学习Node.js感兴趣,并希望可以工作于Node.js。在开始工作之前了解技术背后的概念总是不会错的。但对初学者来说,可能会因为不同的人使用...

城固如春
2017/10/21
0
0
国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

强子哥哥
2015/11/16
0
1
推荐!国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

huntering
2015/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
10分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
12分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
28分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部