Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 15|回复: 3
打印 上一主题 下一主题

研究几个html是如何合成一个html返回给客户的

[复制链接]

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
跳转到指定楼层
楼主
发表于 2016-3-10 11:02:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
研究几个html是如何合成一个html返回给客户的
回复

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
沙发
 楼主| 发表于 2016-3-10 16:16:50 | 只看该作者
以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);
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
板凳
 楼主| 发表于 2016-3-10 16:22:30 | 只看该作者
从代码可以看出:
$!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)
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
地板
 楼主| 发表于 2016-3-10 16:29:11 | 只看该作者
为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")};
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2025-12-15 02:21 , Processed in 0.012819 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表