浏览 3272 次
锁定老帖子 主题:自己动手以窥探——URL路由
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-09
最后修改:2010-06-09
这个几乎n多语言平台下n多web框架都有的功能。
近说spring mvc注解,到php中直接obj->$method_name()调用,自己突然有兴趣,看看自己能否动手写一些代码自动从request url对应到一个类的方法——又拿自己熟悉的Groovy来试了。
贴下代码
// 已有变量 moduleStr对应类对象,actionStr对应方法名,都是从request url中取得。 // scriptDir scriptFileSuffix也是字符串,都是从配置里获取
if (moduleStr == null || actionStr == null) { warn("Param Exception: m(odule) & a(ction) are required! ", request, response); return; } String scriptFile = scriptDir + moduleStr + scriptFileSuffix; File sf = new File(request.getRealPath(scriptFile)); if (!sf.exists() || !sf.canRead() || sf.isDirectory()) { warn("IO Exception: " + scriptFile + " is not a readable file!", request, response); return; } ClassLoader cl = GroovyExeDispatcher.class.getClassLoader(); CompilerConfiguration conf = new CompilerConfiguration(); conf.setSourceEncoding(encoding); conf.setClasspath(request.getRealPath(scriptDir)); GroovyClassLoader groovyCl = new GroovyClassLoader(cl, conf); Map<String, Object> r = null; try { Class groovyClass = groovyCl.parseClass(sf); GroovyObject obj = (GroovyObject)groovyClass.newInstance(); // init parameters obj.invokeMethod("initMap", new Object[]{this.preHandler(request)}); r = (Map<String, Object>) obj.invokeMethod(actionStr, null); } catch (Exception e) { warn("Method Execute Exception: " + scriptFile + " - " + e.getMessage(), request, response); return; }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-11
楼主平时都拿groovy做些什么 ?
|
|
返回顶楼 | |
发表时间:2010-06-11
有的时候还是蛮有用的,结合一些约定大于配置的规则,可以简化编程
|
|
返回顶楼 | |
发表时间:2010-06-12
lost_alien 写道 楼主平时都拿groovy做些什么 ?
很多啊。 项目上用过的:爬虫系列(我有文章介绍),简繁批量转换,批量发送邮件,粘合ivy/ant。 平时coding用到的:文件处理,jar包管理,一些php框架的脚手架工具等。 个人还是比较喜欢scripty一些的语言的,写起来快速简洁啊。可惜ruby/python不熟悉啊 |
|
返回顶楼 | |