该帖已经被评为精华帖
|
||||
---|---|---|---|---|
作者 | 正文 | |||
发表时间:2011-08-04
key232323 写道 强烈关注啊。到时候源码好好分析分析。
另外,zhh2009,能不能在douyu里加个动态语言的classloader啊,这样,就更酷了。 我一直用groovy做web,现在不想回到java里了。。。555 嗯,这个可以考虑下,我记得play框架用groovy实现自己的模板引擎也是用了类似的机制。 不过我暂时没想到除了模板引擎外,在java代码中使用groovy有什么好处。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
目录名中有空格,在URL或URI中会有问题。 引用 你好,我今天下载了你代码,也按你步骤来进行练习,但是启动Tomcat时报错。 java.net.URISyntaxException: Illegal character in path at index 15: file:/F:/Tomcat 6.0/lib/ at java.net.URI$Parser.fail(URI.java:2809) at java.net.URI$Parser.checkChars(URI.java:2982) at java.net.URI$Parser.parseHierarchical(URI.java:3066) at java.net.URI$Parser.parse(URI.java:3014) at java.net.URI.<init>(URI.java:578) at java.net.URL.toURI(URL.java:918) 。。。。 我想问下douyu是否不支持servlet3.0以下版本,谢谢 douyu是支持servlet3.0以下版本的,tomcat6/7都可以,tomcat4/5我没测过。 你的问题是"file:/F:/Tomcat 6.0/lib/"这个uri错了,不能有空格, "Tomcat 6.0"中有一个空格。 你可以写个程序试一下: URL url = new URL("file:/F:/Tomcat 6.0/lib/"); url.toURI(); 这行代码就会抛出你的异常了 douyu内部用了一行代码 new File(url.toURI()).getCanonicalPath(); 这可能是导致问题的原因。 这应该说是jdk类库的一个缺陷, //这行代码是允许有空格的 URL url = new URL("file:/F:/Tomcat 6.0/lib/"); //但是把URL转成URI时又不行了 url.toURI(); //出错 URI uri = new URI("file:/F:/Tomcat 6.0/lib/"); //出错 所以通常是不建议在目录中含有空格的。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
最后修改:2011-08-04
ZHH2009 写道 目录名中有空格,在URL或URI中会有问题。 引用 你好,我今天下载了你代码,也按你步骤来进行练习,但是启动Tomcat时报错。 java.net.URISyntaxException: Illegal character in path at index 15: file:/F:/Tomcat 6.0/lib/ at java.net.URI$Parser.fail(URI.java:2809) at java.net.URI$Parser.checkChars(URI.java:2982) at java.net.URI$Parser.parseHierarchical(URI.java:3066) at java.net.URI$Parser.parse(URI.java:3014) at java.net.URI.<init>(URI.java:578) at java.net.URL.toURI(URL.java:918) 。。。。 我想问下douyu是否不支持servlet3.0以下版本,谢谢 douyu是支持servlet3.0以下版本的,tomcat6/7都可以,tomcat4/5我没测过。 你的问题是"file:/F:/Tomcat 6.0/lib/"这个uri错了,不能有空格, "Tomcat 6.0"中有一个空格。 你可以写个程序试一下: URL url = new URL("file:/F:/Tomcat 6.0/lib/"); url.toURI(); 这行代码就会抛出你的异常了 douyu内部用了一行代码 new File(url.toURI()).getCanonicalPath(); 这可能是导致问题的原因。 这应该说是jdk类库的一个缺陷, //这行代码是允许有空格的 URL url = new URL("file:/F:/Tomcat 6.0/lib/"); //但是把URL转成URI时又不行了 url.toURI(); //出错 URI uri = new URI("file:/F:/Tomcat 6.0/lib/"); //出错 所以通常是不建议在目录中含有空格的。 不但空格,连点都不应该出现在软件安装目录中。 我看到很多程序员安装软件,都是直接下一步,好一点的换个盘符,懒惰的就直接默认目录。然后安装目录中的类似“Apache Tomcat 7.0.11”这样的字符串,根本就不去改,这是非常“非IT技术人员”的做法,这样只能显示这个程序员,要么是异常懒惰,要么是做事不认真,不负责的混日子型。 我自己的软件安装目录,从来不会出现空格或者点这样的字符。 细节决定命运,我招聘程序员的时候,凡是写字类似火星文的,一律减10分;凡是在答卷中使用类似 p1、p2、abc、a1、b2这样的变量命名的,无论答卷答得多正确,哪怕是满分,也一律reject,直接退简历,并且建立黑名单记录该面试者的邮箱,永远不阅读,永远不接受其再次发来的简历。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
george_space 写道 ZHH2009 写道 目录名中有空格,在URL或URI中会有问题。 引用 你好,我今天下载了你代码,也按你步骤来进行练习,但是启动Tomcat时报错。 java.net.URISyntaxException: Illegal character in path at index 15: file:/F:/Tomcat 6.0/lib/ at java.net.URI$Parser.fail(URI.java:2809) at java.net.URI$Parser.checkChars(URI.java:2982) at java.net.URI$Parser.parseHierarchical(URI.java:3066) at java.net.URI$Parser.parse(URI.java:3014) at java.net.URI.<init>(URI.java:578) at java.net.URL.toURI(URL.java:918) 。。。。 我想问下douyu是否不支持servlet3.0以下版本,谢谢 douyu是支持servlet3.0以下版本的,tomcat6/7都可以,tomcat4/5我没测过。 你的问题是"file:/F:/Tomcat 6.0/lib/"这个uri错了,不能有空格, "Tomcat 6.0"中有一个空格。 你可以写个程序试一下: URL url = new URL("file:/F:/Tomcat 6.0/lib/"); url.toURI(); 这行代码就会抛出你的异常了 douyu内部用了一行代码 new File(url.toURI()).getCanonicalPath(); 这可能是导致问题的原因。 这应该说是jdk类库的一个缺陷, //这行代码是允许有空格的 URL url = new URL("file:/F:/Tomcat 6.0/lib/"); //但是把URL转成URI时又不行了 url.toURI(); //出错 URI uri = new URI("file:/F:/Tomcat 6.0/lib/"); //出错 所以通常是不建议在目录中含有空格的。 不但空格,连点都不应该出现在软件安装目录中。 我看到很多程序员安装软件,都是直接下一步,好一点的换个盘符,懒惰的就直接默认目录。然后安装目录中的类似“Apache Tomcat 7.0.11”这样的字符串,根本就不去改,这是非常“非IT技术人员”的做法,这样只能显示这个程序员,要么是异常懒惰,要么是做事不认真,不负责的混日子型。 我自己的软件安装目录,从来不会出现空格或者点这样的字符。 细节决定命运,我招聘程序员的时候,凡是写字类似火星文的,一律减10分;凡是在答卷中使用类似 p1、p2、abc、a1、b2这样的变量命名的,无论答卷答得多正确,哪怕是满分,也一律reject,直接退简历,并且建立黑名单记录该面试者的邮箱,永远不阅读,永远不接受其再次发来的简历。 这么说来编写TOMCAT什么的这类程序员最恶心,习惯最差了,设置一个程序的默认安装路径就不能不用空格么? |
||||
返回顶楼 | ||||
发表时间:2011-08-04
最后修改:2011-08-04
elam 写道 george_space 写道 ZHH2009 写道 目录名中有空格,在URL或URI中会有问题。 引用 你好,我今天下载了你代码,也按你步骤来进行练习,但是启动Tomcat时报错。 java.net.URISyntaxException: Illegal character in path at index 15: file:/F:/Tomcat 6.0/lib/ at java.net.URI$Parser.fail(URI.java:2809) at java.net.URI$Parser.checkChars(URI.java:2982) at java.net.URI$Parser.parseHierarchical(URI.java:3066) at java.net.URI$Parser.parse(URI.java:3014) at java.net.URI.<init>(URI.java:578) at java.net.URL.toURI(URL.java:918) 。。。。 我想问下douyu是否不支持servlet3.0以下版本,谢谢 douyu是支持servlet3.0以下版本的,tomcat6/7都可以,tomcat4/5我没测过。 你的问题是"file:/F:/Tomcat 6.0/lib/"这个uri错了,不能有空格, "Tomcat 6.0"中有一个空格。 你可以写个程序试一下: URL url = new URL("file:/F:/Tomcat 6.0/lib/"); url.toURI(); 这行代码就会抛出你的异常了 douyu内部用了一行代码 new File(url.toURI()).getCanonicalPath(); 这可能是导致问题的原因。 这应该说是jdk类库的一个缺陷, //这行代码是允许有空格的 URL url = new URL("file:/F:/Tomcat 6.0/lib/"); //但是把URL转成URI时又不行了 url.toURI(); //出错 URI uri = new URI("file:/F:/Tomcat 6.0/lib/"); //出错 所以通常是不建议在目录中含有空格的。 不但空格,连点都不应该出现在软件安装目录中。 我看到很多程序员安装软件,都是直接下一步,好一点的换个盘符,懒惰的就直接默认目录。然后安装目录中的类似“Apache Tomcat 7.0.11”这样的字符串,根本就不去改,这是非常“非IT技术人员”的做法,这样只能显示这个程序员,要么是异常懒惰,要么是做事不认真,不负责的混日子型。 我自己的软件安装目录,从来不会出现空格或者点这样的字符。 细节决定命运,我招聘程序员的时候,凡是写字类似火星文的,一律减10分;凡是在答卷中使用类似 p1、p2、abc、a1、b2这样的变量命名的,无论答卷答得多正确,哪怕是满分,也一律reject,直接退简历,并且建立黑名单记录该面试者的邮箱,永远不阅读,永远不接受其再次发来的简历。 这么说来编写TOMCAT什么的这类程序员最恶心,习惯最差了,设置一个程序的默认安装路径就不能不用空格么? 每双一次性筷子,在使用之前都要先掰开,按照你的逻辑,既然每个用户都要掰开一次性筷子才使用,为什么一次性筷子生产企业不直接包装时就把筷子做成分开的呢? 其实原因很简单:连在一起的一次性筷子方便包装。 Apache Tomcat 6.0.11这样的默认程序名也一样,之所以使用这样既带空格,又带点的名字,是为了看名知其意,方便阅读,但是这并不是告诉你就应该这样作为目录名不变,正如同你不应该保持一次性筷子连在一起来吃饭一样。 我自己做软件安装包,默认软件安装目录,是类似这样的:“GeorgeSipClient-Ubuntu-v1-6-8”,虽然名字看起来比较难看,但是能够迎合中国人极其懒惰的习惯,让使用者即使不手动改变安装目录名,也会把软件安装到一个对程序友好的目录中。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
最后修改:2011-08-04
ZHH2009 写道 1.完全脱离servlet容器
我看 Douyu 现在的版本基本上已经实现了与 Servlet 的解耦。 你这里所说的完全脱离容器,应该是提供了除使用ControllerFilter 作为程序执行入口外的另外一种选择吧? 如果是这样的话也有利于对 Controller 的单元测试。 ZHH2009 写道 2.一个内置http server,综合了Tomcat/Jetty/Netty的优点
“综合了Tomcat/Jetty/Netty的优点” 非常值得学习,坐等源码。 引用 3.支持AJP协议
对于大多数 应用服务器来说都有 AJP 协议支持,如 Tomcat 使用 AJP Connector 至 web server处理静态内容等。那么你这里的 ajp 协议是你上面说的内置 http server 所支持吗? 引用 4.全新的异步模型
这个改进不错,使实现 异步调用更加简单化。 ZHH2009 写道 昨天没来得急回复一些细节问题,现在补上
谢谢回复,大概都明白了。 引用 此时controller.sourceFile等于null,如果没有源文件,那就得不到Context类的,
之前在分析的时候看了一下 Douyu 编译后的 Controller class 文件的源码,好象并没有对其进行任何处理。 如果是这样的话那么如果我使用默认的 javac 直接对 Controller 进行编译然后复制在 classes 目录中,理论上来说应该是能够生成其对应的 Context 吧? 由于我目前还在看javac的源码,所以对于生成 Context 是否必须要依靠Controller源码并不清楚。 _____ 刚又看了一下 com.sun.tools.javac.processing.ControllerProcessor 类的代码,其需要解析 Controller 代码的 Symbol 来获取其具体的action方法及参数名(编译Controller前所做),而非通过简单反射机制(编译Controller后才能做)所能做到的。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
denger 写道 ZHH2009 写道 1.完全脱离servlet容器
我看 Douyu 现在的版本基本上已经实现了与 Servlet 的耦合了。 你这里所说的完全脱离容器,应该是提供了除使用ControllerFilter 作为程序执行入口外的另外一种选择吧? 如果是这样的话也有得于对 Controller 的单元测试。 ZHH2009 写道 2.一个内置http server,综合了Tomcat/Jetty/Netty的优点
“综合了Tomcat/Jetty/Netty的优点” 非常值得学习,坐等源码。 引用 3.支持AJP协议
对于大多数 应用服务器来说都有 AJP 协议支持,如 Tomcat 使用 AJP Connector 至 web server处理静态内容等。那么你这里的 ajp 协议是你上面说的内置 http server 所支持吗? 引用 4.全新的异步模型
这个改进不错,使实现 异步调用更加简单化。
ZHH2009这里说的“完全脱离servlet容器”,应该是Douyu下个版本内置Web Server,不需要把Douyu项目放到Tomcat这类容器中了。 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
ZHH2009 写道 key232323 写道 强烈关注啊。到时候源码好好分析分析。
另外,zhh2009,能不能在douyu里加个动态语言的classloader啊,这样,就更酷了。 我一直用groovy做web,现在不想回到java里了。。。555 嗯,这个可以考虑下,我记得play框架用groovy实现自己的模板引擎也是用了类似的机制。 不过我暂时没想到除了模板引擎外,在java代码中使用groovy有什么好处。 这个。。你这个观点,说实话有必要尝试下这些所谓的新的东东了——代码那个简洁啊,光语法糖作为程序员来说——起码我就被这样的“糖衣炮弹”俘虏了。。。 即便你熟悉ruby,我也推荐你不妨看看这位老兄的blog http://blog.csdn.net/hivon/article/details/4256296 |
||||
返回顶楼 | ||||
发表时间:2011-08-04
douyu第一个版本不是内置了web Server的吗?
|
||||
返回顶楼 | ||||
发表时间:2011-08-04
george_space 写道 每双一次性筷子,在使用之前都要先掰开,按照你的逻辑,既然每个用户都要掰开一次性筷子才使用,为什么一次性筷子生产企业不直接包装时就把筷子做成分开的呢? 其实原因很简单:连在一起的一次性筷子方便包装。 Apache Tomcat 6.0.11这样的默认程序名也一样,之所以使用这样既带空格,又带点的名字,是为了看名知其意,方便阅读,但是这并不是告诉你就应该这样作为目录名不变,正如同你不应该保持一次性筷子连在一起来吃饭一样。 我自己做软件安装包,默认软件安装目录,是类似这样的:“GeorgeSipClient-Ubuntu-v1-6-8”,虽然名字看起来比较难看,但是能够迎合中国人极其懒惰的习惯,让使用者即使不手动改变安装目录名,也会把软件安装到一个对程序友好的目录中。 说的严重点 做产品,如果不能把产品做的像方便筷子一样直观,又不提供详尽的说明书,就是在玩使用者. 另外,这个世界上有不用掰就能用的方便筷子. 生产者忽略消费者的感受造成的失败不胜枚举. 我想指出的是一种从使用者角度考虑的态度. |
||||
返回顶楼 | ||||