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

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


          網站導航:
           
          主站蜘蛛池模板: 贵溪市| 韶关市| 格尔木市| 北辰区| 都兰县| 安阳县| 成安县| 资兴市| 阳城县| 华容县| 旬邑县| 酉阳| 怀安县| 平遥县| 江阴市| 滨州市| 于都县| 清丰县| 年辖:市辖区| 漳州市| 肃北| 吴旗县| 林周县| 广宁县| 建昌县| 吴桥县| 加查县| 泗阳县| 夏河县| 铜鼓县| 定州市| 德阳市| 旌德县| 剑川县| 秭归县| 比如县| 泊头市| 嵊州市| 万源市| 朝阳县| 闽清县|