[设计相关] 回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
Global site tag (gtag.js) - Google Analytics