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

来源:互联网 发布:网络电视港澳台的apk 编辑:程序博客网 时间:2024/05/22 00:20
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/QNGG55JPnTHtnhttp://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 idorientation: '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
原创粉丝点击