Douyu 0.6.1发布了,这是一个超乎您想象的Web框架

    xiaoxiao2024-04-06  120

    最初的版本抛弃了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-examplesWEB-INFsrc中找到这些例子)

    Hello World

    Java代码

    @Controllerpublic class HelloWorld {public void index(PrintWriter out) {out.println(“Hello Douyu World!”);}}

    自动提取HTML表单参数:

    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> Java代码

    @Controller

    public class FormExample {public void save(String name, int age) {…}}

    文件上传

    Html代码

    <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> 4.5. 说明 :<TEXTAREA NAME=”description” ROWS=”5” COLS=”50”></TEXTAREA><br> 6.7. <INPUT TYPE=”submit” VALUE=”上传”>

    </FORM> Java代码

    @Controller

    public class FileUpload {public void upload(Part[] parts, Part part, String description) {part.write(…);}}

    嵌套Model自动注入:

    Java代码

    @Modelpublic class Consumer {private String name;private Address address; 5.6. public void set(String name, Address address) {this.name = name;this.address = address;}} 11.12. @Modelpublic class Address {private String country;private String city; 16.17. public void set(String country, String city) {this.country = country;this.city = city;}

    } Java代码

    @Controller

    public class ModelInjectExample {//通过这个url访问//ModelInjectExample?consumer.name=zhh&consumer.address.country=china&consumer.address.city=hangzhou 5.6. //输出://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中的本地变量:

    Java代码

    @Controllerpublic 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代码

    <HTML><HEAD><TITLE>ViewManager Test</TITLE></HEAD> 5.6. <BODY BGCOLOR=”white”>name = ${name} <br>age = ${age} <br>date = ${date} <br></BODY> 11.12. </HTML>

    异步Action

    Java代码

    @Controllerpublic class AsyncTest {public void asyncAction(HttpServletRequest request) { 4.5. if (request.getAttribute(“async-result”) != null) {doSomething(); 7.8. request.getAsyncContext().complete();} else {AsyncContext actx = request.startAsync();actx.setTimeout(10000); 12.13. invokeLongTimeService(actx); 14.15. ….}}}

    最后,源代码在这,赶紧凑凑热闹吧:

    svn checkout http://douyu.googlecode.com/svn/trunk/ douyu-read-only

    本文来源于"阿里中间件团队播客",原文发表时间" 2011-07-06"

    相关资源:jupiter:木星是斗鱼开源的面向服务治理的Golang微服务框架-源码
    最新回复(0)