badqiu

          XPer
          隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
          數(shù)據(jù)加載中……

          為velocity,freemarker提供jsp:include功能

          一.介紹

          使用JSP的都知道jsp:include指令,可以使用如下功能,動態(tài)的加載其它請求。

          • <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則沒有提供該功能。

           

          二.擴展

          現(xiàn)擴展實現(xiàn)一個比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內(nèi)容.并且會將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 閱讀(3348) 評論(3)  編輯  收藏

          評論

          # re: 為velocity,freemarker提供jsp:include功能  回復(fù)  更多評論   

          2010-06-13 19:56 | 53中文網(wǎng)

          # re: 為velocity,freemarker提供jsp:include功能  回復(fù)  更多評論   

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

          # re: 為velocity,freemarker提供jsp:include功能[未登錄]  回復(fù)  更多評論   

          這個技巧不錯!!!!!
          2010-06-13 22:17 | alan

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 垣曲县| 桐乡市| 北宁市| 株洲市| 宁城县| 克东县| 始兴县| 义马市| 夏邑县| 卢湾区| 公主岭市| 新民市| 屏边| 安乡县| 保定市| 上饶市| 鄂托克旗| 渝中区| 延庆县| 信阳市| 景谷| 万年县| 武功县| 博野县| 章丘市| 安乡县| 仪陇县| 香港| 盐城市| 临夏县| 巴林右旗| 图们市| 河北区| 吐鲁番市| 武安市| 泾川县| 澄城县| 云梦县| 嘉兴市| 平顺县| 丘北县|