该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-01
最后修改:2011-06-01
自从2009年11月份发布第一个原型版本后,(见这里) 时间一恍就过去了1年半, 这段时间主要忙于工作了(从事分布式数据访问、存储以及Web容器方面的工作), 所以douyu一直处于停滞状态,直到今年3月份开始才能将1/3的时间投入到上面。 最初的版本抛弃了Servlet/JSP规范,并且自已实现容器,这思路理论上是没有大的错的, 但是太新潮了,原有的技术积累不能充分使用,所以但凡追求稳定第一的产品都不敢贸然尝试。 因此,douyu的设计思路也跟着变了,努力的方向是: 尽量兼容现有技术、寻求一种更简单更有效的办法改进现有技术。
douyu 0.6.1往这个方向迈出了第一步, 第一步主要关注Web层的东西,不涉及持久层,douyu 0.6.1包含了如下亮点:
1. 兼容Servlet/JSP,使用douyu提供的api写出的程序能部署到Servlet容器上(例如Tomcat、Jetty) 2. 基于Javac编译器技术,实现零配置,无需打包、部署,无需重启Servlet容器,直接运行Java源文件。 3. 支持Velocity、FreeMaker,集成其他模板引擎也是非常简单,多种模板引擎可以在同一个应用中同时使用。 4. 学习成本非常低,目前只需要学习5个接口(不超过15个方法)。 5. douyu 0.6.1源代码不超过1500行,所以非常适合初学者入门,如果想达到另一个境界,可以继续看Javac编译器的代码。
Douyu项目主页目前放在: http://code.google.com/p/douyu/
以下是例子:
(可以从发布包的douyu-examples\WEB-INF\src中找到这些例子)
Hello World
@Controller public class HelloWorld { public void index(PrintWriter out) { out.println("Hello Douyu World!"); } }
自动提取HTML表单参数:
<FORM METHOD=POST ACTION="FormExample.save"> 姓名:<INPUT TYPE="text" NAME="name" VALUE="haha"> 年龄:<INPUT TYPE="text" NAME="age" VALUE="100"> <INPUT TYPE="submit"> </FORM>
@Controller public class FormExample { public void save(String name, int age) { ... } }
文件上传
<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="FileUpload.upload"> 文件1:<INPUT NAME="file1" TYPE="file" size="50"><br> 文件2:<INPUT NAME="file2" TYPE="file" size="50"><br> 说明 :<TEXTAREA NAME="description" ROWS="5" COLS="50"></TEXTAREA><br> <INPUT TYPE="submit" VALUE="上传"> </FORM>
@Controller public class FileUpload { public void upload(Part[] parts, Part part, String description) { part.write(...); } }
嵌套Model自动注入:
@Model public class Consumer { private String name; private Address address; public void set(String name, Address address) { this.name = name; this.address = address; } } @Model public class Address { private String country; private String city; public void set(String country, String city) { this.country = country; this.city = city; } }
@Controller public class ModelInjectExample { //通过这个url访问 //ModelInjectExample?consumer.name=zhh&consumer.address.country=china&consumer.address.city=hangzhou //输出: //consumer=Consumer[name=zhh, address=Address[country=china, city=hangzhou]] public void index(Consumer consumer, PrintWriter out) { out.println("consumer=" + consumer); } }
最炫的功能:
可以在JSP、Velocity、FreeMaker中直接访问控制器Action中的本地变量:
@Controller public class ViewManagerExample { public void soCool(ViewManager v, String name, int age) { Date date = new Date(); v.out("/jsp/ViewTest.jsp"); v.out("/ViewTest.vm"); v.out("/ViewTest.ftl"); } }
ViewTest.vm
<HTML> <HEAD> <TITLE>ViewManager Test</TITLE> </HEAD> <BODY BGCOLOR="white"> name = ${name} <br> age = ${age} <br> date = ${date} <br> </BODY> </HTML>
异步Action
@Controller public class AsyncTest { public void asyncAction(HttpServletRequest request) { if (request.getAttribute("async-result") != null) { doSomething(); request.getAsyncContext().complete(); } else { AsyncContext actx = request.startAsync(); actx.setTimeout(10000); invokeLongTimeService(actx); .... } } }
最后,源代码在这,赶紧凑凑热闹吧:svn checkout http://douyu.googlecode.com/svn/trunk/ douyu-read-only
google code的svn不太稳定,时好时坏: 源代码压缩包: 点我
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-06-01
看完了,不知道你这个是搞什么的。介绍就不能给力些吗?
|
|
返回顶楼 | |
发表时间:2011-06-01
leibos 写道 看完了,不知道你这个是搞什么的。介绍就不能给力些吗?
标题写着"Web框架", Struts、Spring MVC也是Web框架,Struts、Spring MVC总该听说过吧? |
|
返回顶楼 | |
发表时间:2011-06-01
LZ,我对你的异步Action挺感兴趣的,能深入多提点内部的一些点不?
这个异步操作,是实现了长链接的吗,反向推送? 还有一点,我一直对velocity和javac的整合挺感兴趣的,按照现在velocity的模板语言的特性,是无法明确知道Token对应的class信息。是不是需要在原先的模板信息上增加点东西? 比如建立Token和class的对应关系? |
|
返回顶楼 | |
发表时间:2011-06-01
agapple 写道 LZ,我对你的异步Action挺感兴趣的,能深入多提点内部的一些点不?
这个异步操作,是实现了长链接的吗,反向推送? 这个异步Action是基于servlet3.0的异步api的, 如果不设置超时,不主动关闭,可以认为是长链接, 可以实现Server端主动推数据。 agapple 写道 还有一点,我一直对velocity和javac的整合挺感兴趣的,按照现在velocity的模板语言的特性,是无法明确知道Token对应的class信息。是不是需要在原先的模板信息上增加点东西? 比如建立Token和class的对应关系? velocity和javac的整合并不是用javac对velocity模板编译的, 只是把action中的变量自动put到velocity的context中, velocity模板静态编译这件事我另一个同事已做好了,因为还没开源, 所以我没打包到douyu,不过已经开始在内部使用这个经过修改的velocity了。 |
|
返回顶楼 | |
发表时间:2011-06-01
斗鱼重出江湖,先下个源代码研究研究。
|
|
返回顶楼 | |
发表时间:2011-06-01
最后修改:2011-06-01
不会吧,这么快就有动作啦,我还以为要等到2012呢
|
|
返回顶楼 | |
发表时间:2011-06-01
我认真地看了,觉得有点像 Apache Click的简化版。
|
|
返回顶楼 | |
发表时间:2011-06-01
去看看 play framework 吧 源码量也不是很大
scooter 也不错 |
|
返回顶楼 | |
发表时间:2011-06-01
强力抢占前排,这东西当初确实很抢眼,不过再看就没什么消息了
等了这么就终于有东西放出来了~ |
|
返回顶楼 | |