这两天没什么事情,研究了一下RoR,粗看了一下,感觉Ruby语言比较可怕,短期内不研究。
由于正在开发MINI OSGi,我在想,能不能使用Rails的模式,在OSGi上建立Web应用呢?
于是仔细地想了一下,感觉还是比较可行的,咱们可以这样做:
规定每个Service就是一个action,Service中的Method是action的具体执行方法,代码如下:
Service的Java代码
- public class SomeAction{
- public void someMethod(HttpServletRequest request,
- HttpServletResponse response) throws Exception{
- ... ...
- }
- }
注册Service的Java代码
- public class SomeBundle extends BundleActivator{
- private ServiceRegistration registration;
- public void start(BundleContext context) throws BundleException{
- // 注册服务
- registration = context.registerService("hello", new SomeAction(), null);
- }
- public void stop(BundleContext context) throws BundleException{
- // 注销服务
- registration.unregister();
- }
- }
安装并启动该Bundle后,在浏览器中敲入 http://www.xxx.com/hello/someMethod 就会执行对应Service的someMethod方法的输出结果。这时,我们只需要实现一套IoC框架即可,这岂不很方便?
这样做的好处是:
- 真正实现动态更新Actions,只需要在后台启动/更新/停止OSGi的Bundles即可。
- 极大地简化了开发,不用写那么多url-mapping了。
- 如果在同一名称注册了多个服务,那可以在IoC容器中进行筛选,最常用的就是区别登陆用户与匿名用户。
- 暂时只想到这么多.... -_-!
该想法正在验证中,理论上应该可行,希望能通过这个做个真正的基于OSGi的Web应用。努力努力...
修订:
2007-04-06 | 回复的朋友提出了一个关于URL跳转的问题,其实这个问题可以学学Struts的用法。例如我们把当前框架添加一个后缀如 *.go 当在浏览器敲入 http://www.xxx.com/hello/someMethod.go 时,调用上面的方法。 |