Discuz! Board

标题: 研究几个html是如何合成一个html返回给客户的 [打印本页]

作者: zangcf    时间: 2016-3-10 11:02
标题: 研究几个html是如何合成一个html返回给客户的
研究几个html是如何合成一个html返回给客户的

作者: zangcf    时间: 2016-3-10 16:16
以seller/index.htm为例子研究,这个页面对应的处理action是:
src/com/shopping/manage/seller/action/BaseSellerAction.java:   @RequestMapping({"/seller/index.htm"})
这个对应的ModelAndView是:
     ModelAndView mv = new JModelAndView(
       "user/default/usercenter/seller_index.html", this.configService
       .getSysConfig(),
       this.userConfigService.getUserConfig(), 0, request, response);
作者: zangcf    时间: 2016-3-10 16:22
从代码可以看出:
$!httpInclude.include("/top.htm")
<div class="main"> $!httpInclude.include("/seller/nav_head.htm")
  <div class="user_center">
    <table width="1000" border="0" cellspacing="0" cellpadding="0" class="user_table">
      <tr> $!httpInclude.include("/seller/nav.htm")
        <td id="centerbg" valign="top">
        #if($!user.store)
作者: zangcf    时间: 2016-3-10 16:29
为velocity,freemarker提供jsp:include功能:
一.介绍

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




Jsp代码  收藏代码

    <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相比:



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




三.使用

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



Java代码  收藏代码

    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")};




欢迎光临 Discuz! Board (http://47.89.242.157:9000/bbs/discuz/) Powered by Discuz! X3.2