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 閱讀(3357) 評論(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

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


          網站導航:
           
          主站蜘蛛池模板: 介休市| 娱乐| 尖扎县| 白城市| 永清县| 安宁市| 鹤庆县| 盐津县| 吉林省| 洞口县| 岳阳县| 泗水县| 聊城市| 武隆县| 阳东县| 灵川县| 永安市| 晋中市| 高雄市| 新和县| 丹凤县| 乐至县| 南城县| 石阡县| 南澳县| 太和县| 将乐县| 苍溪县| 辽宁省| 威远县| 高碑店市| 合江县| 北辰区| 扎鲁特旗| 神池县| 蒙阴县| 石阡县| 措勤县| 阿合奇县| 察雅县| 吉木萨尔县|