论坛首页 Java企业应用论坛

Douyu0.6.1 源码分析 之 MVC篇

浏览 10803 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-08-04  

key232323 写道
ZHH2009 写道
key232323 写道
强烈关注啊。到时候源码好好分析分析。

另外,zhh2009,能不能在douyu里加个动态语言的classloader啊,这样,就更酷了。

我一直用groovy做web,现在不想回到java里了。。。555



嗯,这个可以考虑下,我记得play框架用groovy实现自己的模板引擎也是用了类似的机制。

不过我暂时没想到除了模板引擎外,在java代码中使用groovy有什么好处。


这个。。你这个观点,说实话有必要尝试下这些所谓的新的东东了——代码那个简洁啊,光语法糖作为程序员来说——起码我就被这样的“糖衣炮弹”俘虏了。。。

即便你熟悉ruby,我也推荐你不妨看看这位老兄的blog

http://blog.csdn.net/hivon/article/details/4256296



我的意思不是说groovy不好,是说把groovy用在基于java开发的框架上能产生什么新的想法我还不知道(除了用于模板引擎),
当然,如果想在groovy中调用java,在java中运行groovy脚本,这跟框架基本上没啥关系吧。

ruby/rails, python/django, node.js, groovy/grails我都有或多或少的学习的,只是没有java那么深入。

所以你可以分享一下你的新想法。
0 请登录后投票
   发表时间:2011-08-04  

@george_space @elam
关于目录名中有空格或点号的问题,这个真没必要纠结的,
我认为这本质上是jdk类库的缺陷(URL和URI类的实现有问题)



denger 写道

由于我目前还在看javac的源码,所以对于生成 Context 是否必须要依靠Controller源码并不清楚。
_____
刚又看了一下 com.sun.tools.javac.processing.ControllerProcessor 类的代码,其需要解析 Controller 代码的 Symbol 来获取其具体的action方法及参数名(编译Controller前所做),而非通过简单反射机制(编译Controller后才能做)所能做到的。



如果直接用原生的javac编译Controller类也是可以生成Context类的,
但是要加"-processor com.sun.tools.javac.processing.ControllerProcessor"这个编译参数,

ControllerProcessor这个类并不是javac中的源代码,是我加上的,都是用标准的jdk类库
如: javax.lang.model和javax.annotation.processing
如果只是为了生成Context类,用这两个包中的类就足够了,并不需要修改javac的源代码,

只所以修改javac的源代码目前只有两个原因:

1. douyu内置的javac是基于OpenJDK javac1.7的,所以java7的新语法都可以用,
   但是OpenJDK javac1.7是不能在jdk1.6下跑的,所以我修改了一些地方让javac即可以在jdk1.6下跑也能在jdk1.7中运行


2. 为了在模板引擎中直接访问方法中的局部变量

   这个是不得以而为之,因为javac没有提供接口。

   局部变量只在Attr阶段开始才能收集出来,
   而APT(Annotation Processing Tool) 也就是javax.lang.model和javax.annotation.processing,
   是在Enter阶段完成之后就进行了,Enter阶段==>Annotation Processing==>Attr阶段,
   所以只用APT是做不到的。
  
   这一点听起来可能比较难懂,如果有兴趣可以看看javac的内部实现。

除此之外,以后我肯定还会修改javac的代码实现一些更有趣的功能。



补充一些内容

脱离servlet容器,提供一个http server,就不用依赖任何servlet api了,
多了一个douyu.http包用来取代javax.servlet.http,
这样就不需要符号标准的war包了,回到第一个版本那样。

douyu第一个版本是内置了web Server(或称http server),但是这个仅能用于开发测试阶段,
新的http server是完全重写的,用了Tomcat/Jetty/Netty中的很多代码或吸收了很多好的想法,集三者的优点于一身,

比如Jetty在嵌入式方面做得比较好,做单元测试很简单,
而Tomcat在HTTP/AJP协议实现、安全方面做得比较出色,

Netty在IO、线程调度、事件驱动方面做得很漂亮,
但是Netty不支持AJP协议,HTTP实现虽然有了,但是还过于简单,比如静态文件处理、各种IF-XXX头的实现、安全方面都没怎么涉及,
不过Netty的文件上传协议实现(rfc1867)是个亮点,可以用NIO来实现(不像common-fileupload那样只能用阻塞IO)

还有一个叫grizzly的也顺便提一下,grizzly分了很多模块,这点就比netty好很多(netty太杂,集成它到http server很多代码用不到的)。

具体细节发布后再详谈。

 

2 请登录后投票
   发表时间:2011-08-04  
ZHH2009 写道

key232323 写道
ZHH2009 写道
key232323 写道
强烈关注啊。到时候源码好好分析分析。

另外,zhh2009,能不能在douyu里加个动态语言的classloader啊,这样,就更酷了。

我一直用groovy做web,现在不想回到java里了。。。555



嗯,这个可以考虑下,我记得play框架用groovy实现自己的模板引擎也是用了类似的机制。

不过我暂时没想到除了模板引擎外,在java代码中使用groovy有什么好处。


这个。。你这个观点,说实话有必要尝试下这些所谓的新的东东了——代码那个简洁啊,光语法糖作为程序员来说——起码我就被这样的“糖衣炮弹”俘虏了。。。

即便你熟悉ruby,我也推荐你不妨看看这位老兄的blog

http://blog.csdn.net/hivon/article/details/4256296



我的意思不是说groovy不好,是说把groovy用在基于java开发的框架上能产生什么新的想法我还不知道(除了用于模板引擎),
当然,如果想在groovy中调用java,在java中运行groovy脚本,这跟框架基本上没啥关系吧。

ruby/rails, python/django, node.js, groovy/grails我都有或多或少的学习的,只是没有java那么深入。

所以你可以分享一下你的新想法。


你不觉得在实现同样功能的情况下groovy的代码比java少n多么?
如果在性能要求不是很苛刻,我觉得java和groovy应该分别多它们自己所擅长的——比如douyu,socket和协议用java来做,controller之类的就让groovy or jruby它们就好了。

单从语言层面上将,光java.util的集合类相关的操作(尤其是很多***数据需要结构化的时候),开发效率和可维护性,动态语言优势明显。

总之,若脚本语言的确有这样的好处,那为什么不吸取进来?
0 请登录后投票
   发表时间:2011-08-05  
很早就开始关注它,确实非常有创意。名字经常给看成Duoyu,惭愧。
0 请登录后投票
   发表时间:2011-09-03  
HelloWorld$DOUYU.java 及 HelloWorld$DOUYU.class  我的WEB-INF下为什么没有生成???
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics