在EasyJWeb对Ajax的支持中,通过引用类似

EasyJWeb中缺省URL映射转换器揭密

系统 2196 0
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

  在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 interface IPathMappingRuler ... {
// 对请求路径的解析;
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/prototype.js" > script >
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?easyJWebCommand=prototype.js" > script >
script type ='text/javascript' src ='easyajax.ejf?engine.js' > script >
script type ='text/javascript' src ='easyajax.ejf?easyJWebCommand=UserService' > script >

  AjaxEngineAction中处理这几个调用代码如下:

public PagedoEngine(WebFormform,Modulemodule) throws Exception ... {
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开源 大峡  欢迎转载,转载请保留作者声明,谢谢!)




EasyJWeb中缺省URL映射转换器揭密


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论