badqiu

XPer
随笔 - 46, 文章 - 3, 评论 - 195, 引用 - 0
数据加载中……

为velocity,freemarker提供jsp:include功能

一.介绍

使用JSP的都知道jsp:include指令,可以使用如下功能,动态的加载其它请求。

  • <jsp:include page="/header.jsp" />
  • <jsp:include page="/servlet/header" />
  • <jsp:include page="/header.do" />

而如果你不是使用JSP,而是使用模板引擎如Freemarker,Velocity。有该功能也将十分方便。

Freemarker提供了<@include_page path="/servlet/header"/>指令,使freemarker可以完成jsp:include功能,但velocity则没有提供该功能。

 

二.扩展

现扩展实现一个比Freemarker更加通用的HttpInclude对象,可以适用于Freemarker及Velocity。

Freemarker及Velocity示例使用:

  • ${httpInclude.include("/servlet/head?p1=v1&p2=v2")};
  • ${httpInclude.include("/head.jsp")};
  • ${httpInclude.include("http://www.google.com")};

与jsp:include相比:

  1. 与jsp:include完成相同的功能
  2. 可以include远程的http内容.并且会将session_id等cookie传递至该请求,如: http://www.google.com

三.使用

以springmvc为例,笔者编写了一个拦截器.用于拦截所有的controller方法.( struts2可以编写类似拦截器)

 

import freemarker.ext.servlet.IncludePage;
import cn.org.rapid_framework.web.httpinclude.HttpInclude;

public class ShareRenderArgsVariableInterceptor extends HandlerInterceptorAdapter {
    
static Log log = LogFactory.getLog(ShareRenderArgsVariableInterceptor.class);
    
    @Override
    
public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) 
throws Exception {
        String viewName 
= modelAndView.getViewName();
        
if(viewName != null && !viewName.startsWith("redirect:")) {
            
//笔者扩展的httpInclude
            modelAndView.addObject("httpInclude"new HttpInclude(request, response));
            
            
//freemarker 原生的IncludePage指令
            modelAndView.addObject("include_page"new IncludePage(request, response));
        }
    }

}

 

然后在freemarker或者是velocity中,就可使用: ${httpInclude.include("/head.jsp")};

 

点击此处,查看HttpInclude源码

 

posted on 2010-06-13 19:41 badqiu 阅读(3324) 评论(3)  编辑  收藏

评论

# re: 为velocity,freemarker提供jsp:include功能  回复  更多评论   

2010-06-13 19:56 | 53中文网

# re: 为velocity,freemarker提供jsp:include功能  回复  更多评论   

不错 值得借鉴~
2010-06-13 21:11 | 18傲骨中文

# re: 为velocity,freemarker提供jsp:include功能[未登录]  回复  更多评论   

这个技巧不错!!!!!
2010-06-13 22:17 | alan

只有注册用户登录后才能发表评论。


网站导航: