快速业务通道

设计REST风格的MVC框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
Velocity 的集成。不过,从 Web 开发人员看来,并不需要知道具体使用的模板 ,客户端仅需要提供模板路径和一个由 Map<String, Object> 组成的 Model,然后返回一个 TemplateRenderer 对象。代码如清单 16 所示。

清单 16. 定义 TemplateRenderer

public class  TemplateRenderer extends Renderer {    private String path;    private Map<String, Object> model;    public TemplateRenderer(String path, Map<String,  Object> model) {      this.path = path;      this.model = model;    }    @Override    public void render(ServletContext context, HttpServletRequest  request,        HttpServletResponse response) throws Exception {      TemplateFactory.getTemplateFactory()          .loadTemplate(path)          .render(request, response, model);    } }

TemplateRenderer 通过简单地调用 render 方法就实现了页面渲染。为了指 定 Jsp 或 Velocity,需要在 web.xml 中配置 DispatcherServlet 的初始参数 。配置示例请参考清单 17。

清单 17. 配置 Velocity 作为模板引擎

<servlet>    <servlet-name>dispatcher</servlet-name>    <servlet- class>org.expressme.webwind.DispatcherServlet</servlet- class>    <init-param>      <param-name>template</param-name>      <param-value>Velocity</param-value>    </init-param> </servlet>

如果没有该缺省参数,那就使用默认的 Jsp。

类似的,通过扩展 TemplateFactory 和 Template,就可以添加更多的模板 支持,例如 FreeMarker。

设计REST风格的MVC框架(8)

时间:2011-06-01 IBM 廖雪峰

设计******

******和 Servlet 规范中的 Filter 非常类似,不过 Filter 的作用范围是 整个 HttpServletRequest 的处理过程,而******仅作用于 Controller,不涉 及到 View 的渲染,在大多数情况下,使用******比 Filter 速度要快,尤其是 绑定数据库事务时,******能缩短数据库事务开启的时间。

******接口 Interceptor 定义如清单 18 所示。

清单 18. 定义 Interceptor

public interface Interceptor  {    void intercept(Execution execution, InterceptorChain chain)  throws Exception; }

和 Filter 类似,InterceptorChain 代表******链。InterceptorChain 定 义如清单 19 所示。

清单 19. 定义 InterceptorChain

public interface  InterceptorChain {    void doInterceptor(Execution execution) throws  Exception; }

实现 InterceptorChain 要比实现 FilterChain 简单,因为 Filter 需要处 理 Request、Forward、Include 和 Error 这 4 种请求转发的情况,而 Interceptor 仅拦截 Request。当 MVC 框架处理一个请求时,先初始化一个拦 截器链,然后,依次调用链上的每个******。请参考清单 20 所示的代码。

清单 20. 实现 InterceptorChain 接口

class  InterceptorChainImpl implements InterceptorChain {    private final Interceptor[] interceptors;    private int index = 0;    private Object result = null;    InterceptorChainImpl(Interceptor[] interceptors) {      this.interceptors = interceptors;    }    Object getResult() {      return result;    }    public void doInterceptor(Execution execution) throws  Exceptio

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号