Douyu是一种完全采取Java语言开发的、运作于JVM以上的新式基础开发平台。
在web层,Douyu完全遗弃了JSP/Servlet,
在数据库访问层,Douyu不依赖于任何ORM(对像关系照射)构架(如Hibernate)。
Douyu将Java语言编译器、Http服务器、MVC圆满调整在一起,
差点儿兑现了ORM全自动化,同时在Java语言层面引出了权限治理模型。
Douyu内置的Java语言编译器基于OpenJDK Javac编译器(b60版),
并进行了批改和扩张,和Http服务器组合以后能在控制器层发挥出强大的威力,
你只要批改Java源文件,其后刷新浏览器就能查看运作结果,
与此同时编译器也是兑现ORM自动化的基石。
Douyu内置的Http服务器是基于NIO技术的,
是对Tomcat六及com.sun.net.httpserver(一共1300多个Java源文件)进展阔斧大刀的改建后得来的,
改建后的Http服务器当前唯有60个上下的源文件,支持Http1.0/1.1协议。
Douyu内置的权限治理模型现阶段包孕了效能权限、字段权限两类,
效能权限正常对应控制器类中的Action步骤,Action步骤可以与表单中的旋钮联系关系,
字段权限能统制表单中的字段是不是可以查看、批改或掩藏。
Douyu内置的ORM已差一点兑现自动化,你只须建个数据库表(如pet),
其后在服务器配置文件中配备数据库驱动、并为每个数据库指定一个包名(如my.oracle.table),
然后就你可以在你的Java源文件顶用import my.oracle.table.Pet导入模型种Pet。
Douyu还支持横跨多个数据库的事宜,还支持封存点(Savepoint)。
Douyu项目首页现阶段放在:
http://code.google.com/p/douyu/
底下是一些简略的代码片段:
Hello World
Java代码
1.@Controller
二.public class HelloWorld {
3. public void index(PrintWriter out) {
4. out.println("Hello World!");
5. }
6.}
@Controller
public class HelloWorld {
public void index(PrintWriter out) {
out.println("Hello World!");
}
}
自动提取表单参数:
Html代码
1.
2. 名称:
3. 年纪:
4.
5.
名称:
年纪:
Java代码
1.@Controller
二.public class User {
3. public void show(String name, int age) {
4. ...
5. }
6.}
@Controller
public class User {
public void show(String name, int age) {
...
}
}
资料上传
Html代码
1.
2. 资料一:
三.说明 :
4.
5.
资料一:
说明 :
Java代码
一.import com.douyu.http.UploadedFile;
2.
3.@Controller
四.public class FileUpload {
5. public void index(UploadedFile file一, String description) {
6. File f = new File("D:/Douyu/temp/uploadedFiles", file一.getSimpleName());
7. file一.saveTo(f);
8. }
9.}
import com.douyu.http.UploadedFile;
@Controller
public class FileUpload {
public void index(UploadedFile file一, String description) {
File f = new File("D:/Douyu/temp/uploadedFiles", file一.getSimpleName());
file一.saveTo(f);
}
}
根本的CRUD操作
Java代码
一.create table pet(
2. id int not null auto_increment,
3. name varchar(50) not null,
4. age int,
5. primary key(id)
6.);
create table pet(
id int not null auto_increment,
name varchar(50) not null,
age int,
primary key(id)
);
Java代码
一.import com.douyu.main.Context;
二.import sql.table.mysql.Pet;
3.
4.@Controller
五.public class Crud {
6. public void index(Context c) {
7. Pet pet = new Pet();
8. pet.name("pet一");
9. pet.age(三);
10. c.insert(pet);
11.
12. pet.name("MyPet");
13. c.update(pet);
14.
15. c.delete(pet);
16.
17. Rows rows = new Rows(Pet.class);
18. rows.offset = 一;
19. rows.limit = 100;
20. c.select(rows);
21. for(Pet p : rows.rowList) {
22. ...
23. }
24. }
25.}
import com.douyu.main.Context;
import sql.table.mysql.Pet;
@Controller
public class Crud {
public void index(Context c) {
Pet pet = new Pet();
pet.name("pet一");
pet.age(三);
c.insert(pet);
pet.name("MyPet");
c.update(pet);
c.delete(pet);
Rows rows = new Rows(Pet.class);
rows.offset = 一;
rows.limit = 100;
c.select(rows);
for(Pet p : rows.rowList) {
...
}
}
}
横跨多个数据库的事宜
Java代码
一.import com.douyu.main.Context;
二.import my.table.oracle.Table一;
三.import my.table.mysql.Table二;
4.
5.@Controller
六.public class Transaction {
7. public void index(Context c) {
8. Table一 t一 = new Table一();
9. t一.f一("1234");
10. Table二 t二 = new Table二();
11. t二.f二("1234");
12.
13. c.beginTransaction();
14.
15. c.insert(t一);
16. c.insert(t二);
17.
18. c.setSavepoint();
19.
20. t二.f二("abcd");
21. c.update(t二);
22.
23. c.endTransaction();
24. }
25.}
import com.douyu.main.Context;
import my.table.oracle.Table一;
import my.table.mysql.Table二;
@Controller
public class Transaction {
public void index(Context c) {
Table一 t一 = new Table一();
t一.f一("1234");
Table二 t二 = new Table二();
t二.f二("1234");
c.beginTransaction();
c.insert(t一);
c.insert(t二);
c.setSavepoint();
t二.f二("abcd");
c.update(t二);
c.endTransaction();
}
}
Douyu将施用两种开源协议:GPL2.0、 Apache License Version 2.0
全部与编译器相关的源代码应用GPL2.0协议(由于OpenJDK Javac编译器是施用这个协议的)
其余源代码施用Apache License Version 2.0协议开源。
不过现阶段Douyu的版本只是0.1.0,还不稳定,之所以只是提供了二进制版,
现阶段我也并不推荐你研究Douyu的源代码,由于这可能会铺张你的时间,
由于Douyu的内部兑现变故很频繁,在一年以内,大大很小版本变化次数已超过100次了,
源代码中的诠释也十分少,基本就来不急写,等过几个版本稳固先后再公布源代码。
当前Douyu的开发工作惟独我一个人,全凭个人兴趣在家全职开发,
如若你对Douyu的兑现有兴趣,念参加进去,我也是欢迎的,
但是你务必对Http协议、JDBC轨范、Java语言编译器有相当程度的理解,
要不然的话你可能在看Douyu的源代码时很吃力。
要想懂得更多内容请看:
Without SSH/JSP/Servlet,不走平常谈,Java可以更酷
http://zhh2009.iteye.com/blog/517796
这篇稿子是昨夜在JavaEye刚刚公布的,详细说了然Douyu的更种用法,
里边也详细说了然Douyu的很多设计理念以及我个人的很多研究经验。
赶快去见见吧