设计REST风格的MVC框架 - 编程入门网
的 XML 配置文件。
使用 $1、$2 ……来定义 URL 中的可变参数要比正则表达式更简单,我们需 要在 MVC 框架内部将其转化为正则表达式,以便匹配 URL。 此外,对于方法返回值,也未作强制要求。 设计REST风格的MVC框架(2)时间:2011-06-01 IBM 廖雪峰集成 IoC 当接收到来自浏览器的请求,并匹配到合适的 URL 时,应该转发给某个 Controller 实例的某个标记有 @Mapping 的方法,这需要持有所有 Controller 的实例。不过,让一个 MVC 框架去管理这些组件并不是一个好的设计,这些组 件可以很容易地被 IoC 容器管理,MVC 框架需要做的仅仅是向 IoC 容器请求并 获取这些组件的实例。 为了解耦一种特定的 IoC 容器,我们通过 ContainerFactory 来获取所有 Controller 组件的实例,如清单 2 所示。 清单 2. 定义 ContainerFactory
其中,关键方法 findAllBeans() 返回 IoC 容器管理的所有 Bean,然后, 扫描每一个 Bean 的所有 public 方法,并引用那些标记有 @Mapping 的方法实 例。 我们设计目标是支持 Spring 和 Guice 这两种容器,对于 Spring 容器,可 以通过 ApplicationContext 获得所有的 Bean 引用,代码见清单 3。 清单 3. 定义 SpringContainerFactory
对于 Guice 容器,通过 Injector 实例可以返回所有绑定对象的实例,代码 见清单 4。 清单 4. 定义 GuiceContainerFactory
类似的,通过扩展 ContainerFactory,就可以支持更多的 IoC 容器,如 PicoContainer。 出于效率的考虑,我们缓存所有来自 IoC 的 Controller 实例,无论其在 IoC 中配置为 Singleton 还是 Prototype 类型。当然,也可以修改代码,每次 都从 IoC 容器中重新请求实例。 设计REST风格的MVC框架(3)时间:2011-06-01 IBM 廖雪峰设计请求转发 和 Struts 等常见 MVC 框架一样,我们也需要实现一个前置控制器,通常命 名为 DispatcherServlet,用于接收所有的请求,并作出合适的转发。在 Servlet 规范中,有以下几种常见的 URL 匹配模式: /abc:精确匹配,通常用于映射自定义的 Servlet; *.do:后缀模式匹配,常见的 MVC 框架都采用这种模式; /app/*:前缀模式匹配,这要求 URL 必须以固定前缀开头; /:匹配默认的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |