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

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


          網站導航:
           
          主站蜘蛛池模板: 金秀| 云龙县| 克什克腾旗| 鄯善县| 林芝县| 平和县| 泌阳县| 武鸣县| 唐山市| 集安市| 临汾市| 灵台县| 和田县| 永州市| 调兵山市| 手游| 祁东县| 拜泉县| 贡嘎县| 广德县| 定安县| 金华市| 武乡县| 重庆市| 隆化县| 陆丰市| 鄯善县| 许昌市| 榆中县| 饶阳县| 锡林郭勒盟| 淳化县| 嘉义市| 阜新市| 滨海县| 抚远县| 清水河县| 库车县| 航空| 澜沧| 旺苍县|