[设计相关] 回leadyu关于Loader加载方式
javatar
2007-07-26
leadyu:
javatar兄,有一阵子没上来这边了,最近工作很忙,偶尔也做做自己的组件,这几天我在想一个问题,对于我的组件,我后面希望能把它做成一个控制台一样的界面,目前为了部署方便,我使用servlet来写界面,但是这样其实是很麻烦的,所以如果可以,我在考虑使用MeteorTL或者Velocity,我有几个想法,你看MeteorTL可行不可行: 1)模版要能够从JAR包里面加载(方便部署),比如ClassLoader.getResource之类的方式。 2)模版支持include(这样可以写JS),可以互相采用相对路径引用(这个倒也可以使用我的控制器来加载映射,主要是第一条要能支持就最好)。 3)控制器我可以用servlet来写,界面最好能用模版引擎 这些都可以做到的, MeteorTL设计目标之一就是高度可扩展,org.meteortl.config包下所有的接口都是扩展用的, 在StandardConfiguration类有所有这些接口的设置方法. 其中,加载方式的扩展点为: org.meteortl.config.TemplateLoader 并且在org.meteortl.standard.loader包下已经提供了很多可选方案. 你上面需求的应该是: org.meteortl.standard.loader.ClasspathTemplateLoader 将其设置到StandardConfiguration: config.setTemplateLoader(new ClasspathTemplateLoader(config.getDefaultEncoding())); 并且相对路径,引擎已经处理了,传给TemplateLoader都是以/开头的相对根目录的路径. |
|
leadyu
2007-07-28
终于看到你的回复了,看来你最近也不常上呀。如果我是把模版放到jar里面的话,我想可能TemplateLoader需要结合ClassLoader来做,jar不一定部署到classpath底下,比如说现在部署在一个EJB项目里,可能JAR存放位置是根据部署需要决定。
呵呵,有机会再讨论这个,界面我希望做成WAS那种控制台风格,所以模版引擎是最适合我的技术。现在我的组件暂时我把它命名为Jwebap,目前优势就是部署非常的简单,只要丢个jar包,配几行xml就可以启动组件。 我非常希望能运用MeteorTL,毕竟就有个作者就在同一个城市,这是多么惬意的事,呵呵。 现在工作太忙了,等我有时间完成组件的核心部分,就要认真考虑界面的问题。 |
|
javatar
2007-07-28
我用两个多月的时间在设计MeteorTL的结构,也用很多工具对其进行过测试,希望对你有用。
也希望有机会用你的Profiler工具给MeteorTL做一下测试^_^ |
|
javatar
2007-07-28
我会再增加一个ZipTemplateLoader,可以指定一个zip(或jar)文件作为模板源.
|
|
leadyu
2007-07-31
我倒是觉得对于模版加载这块呢,不是要解决怎么加载,比如ZipTemplateLoader,就算模版引擎有了加载zip,jar文件里面模版的能力,也用处不大。因为应用在真正部署的时候是不会知道部署的路径的,而且对于不同的中间件,部署的路径和方式都有所不同,也就说,对于应用部署在什么路径,怎么加载资源(包括class,模版等等任何应用里面的文件)是由中间件的ClassLoader说了算的。所以我们可以不必重复这个工作,也没办法重复,而是采用结合ClassLoader.getResourceAsStream的方式去加载模版。个人意见,javatar兄给点意见。
|
|
leadyu
2007-07-31
我不知道像Velocity之类的模版引擎有没有类似的加载模型的设计
|
|
javatar
2007-08-07
leadyu 写道 怎么加载资源(包括class,模版等等任何应用里面的文件)是由中间件的ClassLoader说了算的。所以我们可以不必重复这个工作,也没办法重复,而是采用结合ClassLoader.getResourceAsStream的方式去加载模版。 在MeteorTL的设计中,config包全部是SPI接口,都是留给第三方实现的,而standard包是config的标准参考实现,只是给“中间件商”一个参考,完全可以舍弃此包的实现。 leadyu 写道 我不知道像Velocity之类的模版引擎有没有类似的加载模型的设计 Velocity和FreeMarker都有,我在设计TemplateLoader时参考过它们的设计: http://opendesign.group.iteye.com/group/blog/80197 |