(OpenSymphony)SiteMesh简介以及与Strust2集成应该注意的问题

SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享、减少代码冗余的目的。
OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现 页面布局和装饰(layout and decoration)的框架组件,能够帮助 网站开发人员较容易实现页面中动态内容和 静态装饰外观的分离。
都说这个东西简单,学习起来20分钟足以,我还是不是很灵泛的那种,估计至少弄了一个小时。。。。。 尴尬
好了,废话少说,直接开始了。
使用步骤如下:
1.配置web.xml中的siteMesh的过滤器:
	<!-- sitemesh filter-->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

       2.导入SiteMesh.jar包,我使用的是sitemesh-2.3.jar,好像有点老了。。。。 http://yunpan.cn/QNGG55JPnTHtn http://yunpan.cn/QNGG55JPnTHtn  访问密码 0e80
3.配置WEB-INF下的decorators.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/jsp/decorators">
    <!--main decorator-->
    <decorator name="main" page="main.jsp">
        <pattern>/*</pattern>
    </decorator>
    <!--<excludes>-->
        <!--<pattern>/index.jsp*</pattern>-->
    <!--</excludes>-->
</decorators>
4.编写WEB-INF/jsp/decorators下的main.jsp文件,内容举例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="bookstore, theme, free template, nivo image slider, website, templatemo, CSS, HTML" />
	<meta name="description" content="sc.chinaz.com from templatemo.com" />
	<link href="${pageContext.request.contextPath}/css/templatemo_style.css" rel="stylesheet" type="text/css" />
	<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/ddsmoothmenu.css" />
	
	<script type="text/javascript" src="${pageContext.request.contextPath}/script/jquery.min.js"></script>
	<script type="text/javascript" src="${pageContext.request.contextPath}/script/ddsmoothmenu.js">
	
	/***********************************************
	* Smooth Navigational Menu- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)
	* This notice MUST stay intact for legal use
	* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
	***********************************************/
	
	</script>
	
	<script type="text/javascript">
	
	ddsmoothmenu.init({
		mainmenuid: "templatemo_menu", //menu DIV id
		orientation: 'h', //Horizontal or vertical menu: Set to "h" or "v"
		classname: 'ddsmoothmenu', //class added to menu's outer DIV
		//customtheme: ["#1c5a80", "#18374a"],
		contentsource: "markup" //"markup" or ["container_id", "path_to_menu_file"]
	});
	
	</script>
	
	<link rel="stylesheet" type="text/css" media="all" href="${pageContext.request.contextPath}/css/jquery.dualSlider.0.2.css" />
	
	<script src="${pageContext.request.contextPath}/script/jquery-1.3.2.min.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/script/jquery.easing.1.3.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/script/jquery.timers-1.2.js" type="text/javascript"></script>
	<script src="${pageContext.request.contextPath}/script/jquery.dualSlider.0.3.min.js" type="text/javascript"></script>
	
	<script type="text/javascript">
	    
	    $(document).ready(function() {
	        
	        $("#carousel").dualSlider({
	            auto:true,
	            autoDelay: 6000,
	            easingCarousel: "swing",
	            easingDetails: "easeOutBack",
	            durationCarousel: 1000,
	            durationDetails: 600
	        });
	        
	    }); 
	    
	</script>
	
	<script type="text/javascript" src="${pageContext.request.contextPath}/script/jquery-1-4-2.min.js"></script> 
	<link rel="stylesheet" href="${pageContext.request.contextPath}/css/slimbox2.css" type="text/css" media="screen" /> 
	<script type="text/JavaScript" src="${pageContext.request.contextPath}/script/slimbox2.js"></script> 


    <title><decorator:title default=""/> -- MaoJun Yang</title>
    <decorator:head/>

</head>
<body>
<div>
	<!-- 相当于head.jsp -->
	<div><a href="${pageContext.request.contextPath}/login.jsp">登录</a>  <a href="${pageContext.request.contextPath}/register.jsp">注册</a></div>
	<div id="templatemo_header_wrapper">
	<div id="templatemo_header">
    	<div id="site_title"><a href="http://sc.chinaz.com/">Free CSS Templates</a></div>
        <div id="templatemo_menu" class="ddsmoothmenu">
            <ul>
                <li><a href="${pageContext.request.contextPath}/index.jsp" class="selected">首页</a></li>
                <li><a href="${pageContext.request.contextPath}/about.jsp">关于</a>
                    <ul>
                    	<li><span class="top"></span><span class="bottom"></span></li>
                        <li><a href="http://sc.chinaz.com/">图书</a></li>
                       
                  	</ul>
                </li>
                <li><a href="${pageContext.request.contextPath}/portfolio.jsp">图书列表</a>
                    <ul>
                    	<li><span class="top"></span><span class="bottom"></span></li>
                        <li><a href="http://sc.chinaz.com/">图书</a></li>
                      
                  	</ul>
                </li>
                <li><a href="${pageContext.request.contextPath}/blog.jsp">感言</a></li>
                <li><a href="${pageContext.request.contextPath}/contact.jsp">购物车</a></li>
            </ul>
            <br style="clear: left" />
       </div> <!-- end of templatemo_menu -->
       <div class="clear"></div>
       <!-- 此处是整个WEB目录下的其他jsp页面body插入的位置 -->
       <decorator:body/>
       </div>
	   </div>
	
    
</div>
<div>

<!-- 此处相当于foot.jsp,当然其他页面不用写其他代码也能有这个foot.jsp -->
<div id="templatemo_footer_wrapper">
	<div id="templatemo_footer">
    	<div class="col one_fourth">
            <h4>Photo Gallery</h4>
            <ul class="footer_gallery">
            	<li><a href="${pageContext.request.contextPath}/images/templatemo_image_03_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_03.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_04_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_04.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_05_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_05.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_06_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_06.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_07_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_07.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_08_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_08.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_09_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_09.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_10_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_10.jpg" alt="image" /></a></li>
                <li><a href="${pageContext.request.contextPath}/images/templatemo_image_11_l.jpg"  rel="lightbox[portfolio]"><img src="${pageContext.request.contextPath}/images/templatemo_image_11.jpg" alt="image" /></a></li>
            </ul>
            <div class="clear"></div>
            <a href="portfolio.jsp" class="more">更多</a>
        </div>
        <div class="col one_fourth">
            <h4>最近</h4>
            <ul class="no_bullet">
                <li>
                    <span class="header"><a href="#"></a></span>
                    
                </li>
                <li>
                    <span class="header"><a href="#">Ipsum dolor sit amet</a></span>
                    .
                </li>
                <li>
                    <span class="header"><a href="#">吖吖</a></span>
                    做大大大大双刀地飞 
                </li>
            </ul>
        </div>
        <div class="col one_fourth">
            <h4>Twitter</h4>
            <ul class="no_bullet">
                <li><a href="#">@templatemo</a> </li>
                <li>联系 <a href="#">#FREE</a> </li>
                <li> <a href="#">http://bit.ly/13IwZO</a></li>
                <li> <a href="#">http://bit.ly/IyyUoO</a></li>
            </ul>
        </div>
        <div class="col one_fourth no_margin_right">
            <h4>About</h4>
            <p>
                版权归属<a href="#">Your Company Name</a> | Collect from <a href="http://www.cssmoban.com/" title="网站模板" target="_blank">网站模板</a>
        </div>
        <div class="clear"></div>
    </div> <!-- END of footer -->
</div> <!-- END of footer wrapper -->
    
</div>
</body>
</html>
5.这个main.jsp只是个例子而已,其中必须要定义那个前缀:decorator,然后才能使用<decorator:title default=""/>、<decorator:head/>、<decorator:body/>等等。之后的话,只要是在整个web根目录下的jsp都会被这个SitMesh所装饰。
最后要说说的是: 与Strust2集成应该注意的问题
 要注意SiteMesh过滤器在web.xml中位置,必须在Strust2过滤器的前面,否则,通过Strust2跳转的jsp页面都将没有SiteMesh的装饰效果,其原因是:Strust2的所有值都是保存在Stack Context或者ValueStack中的,默认情况是,某个过滤器一旦访问了改Stack Context或者ValueStack后,里面对应的值将会被清除掉,如果先使用Strust2的FilterDispatcher来过滤用户请求,则SiteMesh的过滤器将无法取得Stack Context或者ValueStack中的数据。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值