在EasyJWeb对Ajax的支持中,通过引用类似<script type="text/javascript" src="ejf/easyajax/UserService.js"></script>的url可以动态得到调用服务器端业务组件的javascript脚本。另外,在基于EasyJWeb的CRUD应用中,也可以使用类似
http://localhost:8080/user/edit/3
的URL来编辑数据表中的某一条记录。究竟EasyJWeb中是如何处理这些URL的呢?本文将作简单的分析!
在EasyJWeb中,有一个URL映射处理器,通过配置这个映射处理器可以非常简单地实现Web应用中类似URLRewrite的需求。映射处理器了代码如下所示:
// 对请求路径的解析;
public StringgetModuleName(); // 得到模板的名称
public MapgetParams(); // 得到模板缺省参数
public StringgetCommand(); // 得到模板命令
}
该接口的默认实现是com.easyjf.web.core.PathMappingRulerImpl,在基于EasyJWeb的应用中,每一个交由EasyJWeb框架处理的请求url,都会通过这个映射处理器进行转换。通过使用EasyJWeb缺省URL映射转换器,客户端请求路径/module/command/params将按以下请求规则,作如下的映射处理.
映射处理前的URL:
1、 /module/command/name=xxx
2、 /module
3、 /module/command
4、 /module/command/12345
5、/module/edit/12345/title=1111
6、/moduel/title=测试
映射处理的URL:
1~ /module.ejf?easyjwebCommand=command&name=xxx
2~ /module.ejf
3~ /module.ejf?easyjwebCommand=command
4~ /module.ejf?easyjwebCommand=command&cid=1234
5、/module.ejf?easyJWebCommand=edit&cid=123455&title=111
6、/module.ejf?title=测试
因此,在一个EasyJWeb自动代码生成的CRUD应用中,
http://localhost:8080/user.ejf?easyJWebCommand=edit&cid=3
这个URL表示编辑user对象中属性cid为3的信息。使用默认的映射处理规则,上面的url可以变成如下的形式:
http://localhost:8080/user/edit/3
这个url表示运行user.ejf这个模块,传送的命令为edit,标准key值为3。
URL映射转换器的一个最典型的应用示例,就是EasyJWeb-0.8版本开始增加的远程Web脚本处理支持引擎,也即Ajax的部分功能。远程JS脚本调用支持只是EasyJWeb中的一个小小插件,EasyJWeb的Ajax实现只是一个普通的EasyJWeb Module(Action)。这个Action即com.easyjf.web.ajax.AjaxEngineAction。
看过本人 《在EasyJWeb中轻松开发Ajax运用》 一文的朋友都知道,远程Web脚本调用涉及到一个如何生成调用服务器端方法的Javascript Stub问题。在EasyJWeb对Ajax的支持中,可以直接通过下面的URL来生成远程javascript调用脚本。
script type ='text/javascript' src ='ejf/easyajax/engine.js' > script >
script type ='text/javascript' src ='ejf/easyajax/UserService.js' > script >
第一句返回prototype.js脚本,第二句返回EasyJWeb的Ajax支持引擎engine.js脚本,第三句返回生成服务器UserService组件的远程调用脚本。
上面的URL,改成通过原生的EasyJWeb URL来引用,可以写成下面的形式:
script type ='text/javascript' src ='easyajax.ejf?engine.js' > script >
script type ='text/javascript' src ='easyajax.ejf?easyJWebCommand=UserService' > script >
AjaxEngineAction中处理这几个调用代码如下:
return module.findPage( " engine-js " );
}
public PagedoPrototype(WebFormform,Modulemodule) throws Exception {
return module.findPage( " prototype " );
}
public PagedoAjaxHome(WebFormform,Modulemodule) throws Exception {
Stringcommand = CommUtil.null2String(form.get( " easyJWebCommand " ));
if (command.endsWith( " .js " ))
{
command = command.substring( 0 ,command.length() - 3 );
}
Objectbean = AjaxUtil.getServiceContainer().getService(command);
// System.out.println(command);
form.addResult( " scriptName " ,command);
form.addResult( " methodList " ,AjaxUtil.getAjaxStub(bean));
return module.findPage( " stub " );
}
小结:
一个简单适用的Web MVC框架,不仅仅是实现单纯的页面及代码分离功能,还应该提供更多的与Web应用相关的实用工具及解决通用应用需求抽象功能。在EasyJWeb中,除拥有了很多MVC框架的基本特性以外,还内置了很多解决应用Web应用程序中一些通过需求的工具,比如URL映射处理、自动代码生成、权限系统支持等,因此会使得我们开发Web应用程序开发变得更加简单、高效。作为一个完全由国内Java开源爱好者发起及实现的Web MCX框架,虽然在EasyJWeb-0.8版本中还存在着很多问题,但只要有更多的开源爱好者参与到其中来,相信在以后的版本中会不断得到完善。
(本文作者: EasyJF开源 大峡 欢迎转载,转载请保留作者声明,谢谢!)