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

简介:

最初的版本抛弃了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代码

  1. @Controller
  2. public class HelloWorld {
  3. public void index(PrintWriter out) {
  4. out.println(“Hello Douyu World!”);
  5. }
  6. }

自动提取HTML表单参数:

Html代码

  1. <FORM METHOD=POST ACTION=”FormExample.save”>
  2. 姓名:<INPUT TYPE=”text” NAME=”name” VALUE=”haha”>
  3. 年龄:<INPUT TYPE=”text” NAME=”age” VALUE=”100”>
  4. <INPUT TYPE=”submit”>
  5. </FORM>
    Java代码

  6. @Controller

  7. public class FormExample {
  8. public void save(String name, int age) {
  9. }
  10. }

文件上传

Html代码

  1. <FORM ENCTYPE=”multipart/form-data” METHOD=”POST” ACTION=”FileUpload.upload”>
  2. 文件1:<INPUT NAME=”file1” TYPE=”file” size=”50”><br>
  3. 文件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=”上传”>
  4. </FORM>
    Java代码

  5. @Controller

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

嵌套Model自动注入:

Java代码

  1. @Model
  2. public class Consumer {
  3. private String name;
  4. private Address address;
    5.6. public void set(String name, Address address) {
  5. this.name = name;
  6. this.address = address;
  7. }
  8. }
    11.12. @Model
  9. public class Address {
  10. private String country;
  11. private String city;
    16.17. public void set(String country, String city) {
  12. this.country = country;
  13. this.city = city;
  14. }
  15. }
    Java代码

  16. @Controller

  17. public class ModelInjectExample {
  18. //通过这个url访问
  19. //ModelInjectExample?consumer.name=zhh&consumer.address.country=china&consumer.address.city=hangzhou
    5.6. //输出:
  20. //consumer=Consumer[name=zhh, address=Address[country=china, city=hangzhou]]
  21. public void index(Consumer consumer, PrintWriter out) {
  22. out.println(“consumer=” + consumer);
  23. }
  24. }

最炫的功能:

可以在JSP、Velocity、FreeMaker中直接访问控制器Action中的本地变量:

Java代码

  1. @Controller
  2. public class ViewManagerExample {
  3. public void soCool(ViewManager v, String name, int age) {
  4. Date date = new Date();
  5. v.out(“/jsp/ViewTest.jsp”);
  6. v.out(“/ViewTest.vm”);
  7. v.out(“/ViewTest.ftl”);
  8. }
  9. }
    ViewTest.vm

Html代码

  1. <HTML>
  2. <HEAD>
  3. <TITLE>ViewManager Test</TITLE>
  4. </HEAD>
    5.6. <BODY BGCOLOR=”white”>
  5. name = ${name} <br>
  6. age = ${age} <br>
  7. date = ${date} <br>
  8. </BODY>
    11.12. </HTML>

异步Action

Java代码

  1. @Controller
  2. public class AsyncTest {
  3. public void asyncAction(HttpServletRequest request) {
    4.5. if (request.getAttribute(“async-result”) != null) {
  4. doSomething();
    7.8. request.getAsyncContext().complete();
  5. } else {
  6. AsyncContext actx = request.startAsync();
  7. actx.setTimeout(10000);
    12.13. invokeLongTimeService(actx);
    14.15. ….
  8. }
  9. }
  10. }

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

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

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

相关文章
|
17天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
1天前
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
11天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
23天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
27天前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
15 4
|
1月前
|
数据库
最全三大框架整合(使用映射)——struts.xml和web.xml配置
最全三大框架整合(使用映射)——数据库资源文件jdbc.properties
10 0
|
1月前
|
前端开发 API 网络架构
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!
|
1月前
|
XML JSON API
通过Flask框架创建灵活的、可扩展的Web Restful API服务
通过Flask框架创建灵活的、可扩展的Web Restful API服务
|
1月前
|
物联网 调度 开发者
构建高效Python Web应用:异步编程与Tornado框架解析
【2月更文挑战第27天】 在处理高并发的Web应用场景时,传统的同步阻塞模型往往难以满足性能需求。本文将深入探讨Python世界中的异步编程概念,并结合Tornado这一轻量级、非阻塞式Web服务器及框架,展示如何构建高性能的Web应用。通过实例驱动的方法论,我们将剖析Tornado的核心组件,包括其IOLoop、异步HTTP客户端和服务器端处理机制,以及与协程集成的细节。文章旨在为开发者提供一套实践指南,帮助他们利用Python实现快速响应和资源高效的Web服务。
31 2