Sitemesh应用

1.加入包

sitemesh-2.3.jar

 

2.在web.xml中配置过滤器

 

<!-- SiteMesh的过滤器配置信息 开始 -->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>
            com.opensymphony.module.sitemesh.filter.PageFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- SiteMesh的过滤器配置信息 结束 -->

 

3.在web-info下建立文件decorators.xml,文件例如

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/decorators">
 <!-- 在excludes元素下指定的页面将不会由SiteMesh来装饰 -->
 <excludes>
  <pattern>/login.jsp</pattern>
  <pattern>/js/*</pattern>
  <pattern>/images/*</pattern>
  <pattern>/decorators/*</pattern>

ajax等异步请求要写在这里
 </excludes>

 <!-- 创建一个名为main的装饰器,该装饰器页面为main.jsp,
  用于装饰pattern指定的URL的所有页面-->
 <decorator name="admin" page="admin/admin.jsp">
  <pattern>/admin/welcome.action</pattern>
  <pattern>/admin/pubinfo/*</pattern>
 </decorator>
 <decorator name="index" page="index/index.jsp">
  <pattern>/index/classify/index*</pattern>
 </decorator>
</decorators>

 

4.在web-info下建立文件sitemesh.xml,文件例如

<sitemesh>
    <property name="decorators-file" value="/WEB-INF/decorators.xml" />
    <excludes file="${decorators-file}" />
    <!-- Page Parsers :负责读取stream的数据到一个Page对象中以被SiteMesh解析和操作。-->
    <page-parsers>
        <parser default="true"
            class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
        <parser content-type="text/html"
            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
        <parser content-type="text/html;charset=utf-8"
            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
           
    </page-parsers>

    <decorator-mappers>
        <!-- 可打印的装饰器,可以允许你当用http://localhost/test.html?printable=true方式访问时给出原始页面以供打印 -->
        <!-- 其中printable1 与 decorators.xml中的装饰器printable1一致进行映射,若不添加此段,默认为printable -->
        <mapper
            class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
            <param name="decorator" value="printable1" />
            <param name="parameter.name" value="printable" />
            <param name="parameter.value" value="true" />
        </mapper>
        <mapper
            class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
            <param name="config" value="${decorators-file}" />
        </mapper>
    </decorator-mappers>
</sitemesh>

 

由sitemesh.xml内容首行知道,decorators.xml是由sitemesh.xml关也就是说上面新建的 decorators.xml的位置和文件名是可以更改的,在更改之后,需要在sitemesh.xml更改其对应的路径。现在可以这样认为 sitemesh.xml只是为加载decorators.xml,只了decorators.xml可以变,其它内容都是固定的。

那sitemesh.xml又是由谁来加载的?很容易想到,sitemesh.xml可能像struts,spring等配置文件一样是在 web.xml中加载的。但是其实不是这样的。Sitemesh.xml文件的位置和文件名是固定的,也就是说sitemesh.xml的加载过程被 sitemesh jar包封装起来了。那web.xml中就不需要配置sitemesh相关内容了?也不是,sitemesh的原理是拦截请求和响应,在java web中有一个接口是专门弄这东西的。对,就是Filter(过滤器)。我们要在web.xml中加上sitemesh过滤器。

 

5.建立对应的模板main.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator"
    prefix="decorator"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
    <%@include file="../frame/taglib.jsp"%>

<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
   
    %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html> 
    <head>
       
   <title><decorator:title default="IP复用系统" /></title>
        <link rel="stylesheet" type="text/css"
            href="<%=basePath%>css/style.css">           
        <link rel="stylesheet" type="text/css"
            href="<%=basePath%>css/calendar-win2k-cold-1.css">

        <script type="text/javascript" src="${pageContext.request.contextPath }/js/IEFirefox.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/zDialog.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/zDrag.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.3.2.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar-setup.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.cookie.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/calendar-zh.js"></script>
        <script type="text/javascript" src="${pageContext.request.contextPath }/js/floatDiv.js"></script>
       
        <script type="text/javascript">
    
     function switchSysBar(){
        if (document.getElementById("left").style.display=="")
        {
            document.getElementById("img1").src="<%=basePath%>images/main_30_1.gif";
            document.getElementById("left").style.display="none";
            document.getElementById("right").style.width="100%" ;
        }
        else
        {
            document.getElementById("img1").src="<%=basePath%>images/main_30.gif";
            document.getElementById("left").style.display="" ;
            document.getElementById("right").style.width="95%";
        }
    }



 </script>
 
    <decorator:head />
   
    </head>
   

    <body id="body" style="" >
    <!-- 判断是否用户session状态 -->
       <c:if test="${empty logdata_session_login_user}">
         <script type="text/javascript">
           window.location="<%=basePath%>login.jsp";
         </script>
       </c:if>
        <div id="body" style="">

            <table width="100%" height="100%" border="0" cellpadding="0"
                cellspacing="0" class="cont_tab" >
                <tr>
                    <td colspan="3">
                        <!--头部信息开始  -->
                        <div id="header">
                            <jsp:include page="top.jsp" flush="true" />
                        <!--头部信息结束  -->
                        </div>
                    </td>
                </tr>
                <tr>
               
                <td  id="left" width=""  valign="top">
                    <jsp:include page="left.jsp" flush="true" />
                </td>
                   
                    <td height="100%" width="1px" background="<%=basePath%>images/main_27.gif" style="background-repeat: repeat-y;">
                           
                                <img title="打开/关闭菜单" src="<%=basePath%>images/main_30.gif"
                                    name="img1" width="4" style="cursor:pointer;"  height="47" id=img1
                                    onclick="switchSysBar();"/>
                                   
                    </td>
                   
                    <td  valign="top" width="95%" style="padding-right: 7px;" id="right">
                        <table width="100%" height="100%" border="0" cellpadding="0"
                            cellspacing="0" >
                           
                            <tr>
                                <td>
                                    <table width="100%" height="100%" border="0" cellpadding="0"
                                        cellspacing="0" >
                                        <tr >
                                            <td width="100%" align="left" valign="top" style="">
                                                <decorator:body />
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <div id="footer"><jsp:include page="down.jsp" flush="true" /></div>
                    </td>
                </tr>
            </table>

        </div>
    </body>

</html>

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
先看效果: https://pan.quark.cn/s/3756295eddc9 在C#软件开发过程中,DateTimePicker组件被视为一种常见且关键的构成部分,它为用户提供了图形化的途径来选取日期与时间。 此类控件多应用于需要用户输入日期或时间数据的场景,例如日程管理、订单管理或时间记录等情境。 针对这一主题,我们将细致研究DateTimePicker的操作方法、具备的功能以及相关的C#编程理念。 DateTimePicker控件是由.NET Framework所支持的一种界面组件,适用于在Windows Forms应用程序中部署。 在构建阶段,程序员能够通过调整属性来设定其视觉形态及运作模式,诸如设定日期的显示格式、是否展现时间选项、预设的初始值等。 在执行阶段,用户能够通过点击日历图标的下拉列表来选定日期,或是在文本区域直接键入日期信息,随后按下Tab键或回车键以确认所选定的内容。 在C#语言中,DateTime结构是处理日期与时间数据的核心,而DateTimePicker控件的值则表现为DateTime类型的实例。 用户能够借助`Value`属性来读取或设定用户所选择的日期与时间。 例如,以下代码片段展示了如何为DateTimePicker设定初始的日期值:```csharpDateTimePicker dateTimePicker = new DateTimePicker();dateTimePicker.Value = DateTime.Now;```再者,DateTimePicker控件还内置了事件响应机制,比如`ValueChanged`事件,当用户修改日期或时间时会自动激活。 开发者可以注册该事件以执行特定的功能,例如进行输入验证或更新关联的数据:``...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值