使用 sitemesh/decorator裝飾器裝飾jsp頁面(原理及詳細配置)

摘要:首先這個Decorator解釋一下這個單詞:“裝飾器”,我覺得其實可以這樣理解,他就像我們用到的Frame,他把每個頁面共有的東西提煉了出來,也可能我們也會用各種各樣的include標簽,將我們的常用頁面給包括進來:比如說頁面的top,bottom這些每個頁面幾乎都有,而且都一樣,如果我們在每個頁面都include,可以發現我們的程序有很多冗余,重復。相比之下裝飾器給我們提供了一個較好的選擇,他在你要顯示的頁面根本看不出任何include信息,可以說完全解耦。

一、SiteMesh介紹

SiteMesh是一個Java WEB項目的網頁布局和修飾框架。使用SiteMesh后就不再需要在每個頁面中都用<jsp:include>標簽引入頁頭、頁尾、導航等其他公用頁面了。

  • 可以將網頁的內容和頁面結構分離,達到頁面結構共享的目的。
  • 頁面裝飾效果耦合在目標頁面中,無需使用include指令顯示包含裝飾效果,目標頁面和裝飾頁面完全分離
  • 整個web應用可以使用相同的裝飾頁面,風格統一,整體效果更好
  • SiteMesh通過Filter攔截請求和響應,給原始頁面加入裝飾,再把裝飾后的結果返回給客戶端。
  • 根據頁面URL匹配規則查找合適的裝飾模板頁
  • 提取被訪問頁的內容,放置到裝飾模板中的適當位置。

?

二、業務場景使用

比如常見的就是crm系統,左邊的樹形菜單就是一致的,變化的右邊主體部分(即被裝飾的頁面)。

?

?

三、SiteMesh工作原理

??sitemesh應用Decorator模式,用filter截取request和response,把頁面組件head,content,banner、bottom結合為一個完整的視圖。通常我們都是用include標簽在每個jsp頁面中來不斷的包含各種header, stylesheet, scripts and footer。見下圖

當用戶請求home.jsp,并且服務器處理完畢正準備返回數據之時,它被SiteMesh Filter攔截了下來,并且把數據包裝成一個Page對象,具體是Page page = parsePage(request, response, chain)的調用,然后,它會去查詢decorators.xml文件,看看該頁面是否需要裝飾[if (decorator != null && decorator.getPage() != null)]?是,則應用裝飾器[applyDecorator(page, decorator, request, response)],否則,就發送原來的沒經過裝飾的頁面[writeOriginal(response, page);]。

?

四、sitemesh應用配置

首先我們要到http://www.opensymphony.com/sitemesh/下載我們需要的jar包:sitemesh-2.4.jar

然后分三步走,第一步:web.xml配置;第二步:decorate.xml配置;第三步:裝飾頁面

4.1 web.xml配置

    <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>

4.2 decorate.xml 配置

在WEB-INF目錄下新建一個decorators.xml文件(/decorator是你的包裝jsp根路徑在這里main.jsp和panel.jsp都是包裝jsp,a.jsp,b,jsp是被包裝jsp)

<?xml version="1.0" encoding="UTF-8"?>
<decorators><excludes><pattern>/resources/**</pattern><pattern>/system/login_index.do</pattern><pattern>/system/login.do</pattern><pattern>/system/close_window.do</pattern><pattern>/system/login_force.jsp</pattern><pattern>/system/info.jsp</pattern><pattern>/index.jsp</pattern><pattern>/usermemcached/**</pattern></excludes><decorator name="main" page="/system/main.do"><pattern>/**</pattern></decorator>
</decorators>

用decrator指定裝飾模板與URL的對應關系,也可以用excludes配置那些URL不需要模板控制。

4.3?裝飾頁面

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<html><head><title> <decorator:title default="default title"/> </title> <decorator:head/></head><body /> ><div id="content" class="container" style="width: 100%;"><c:if test="${not empty actionResult}"><div class="alert alert-${actionResult.type}"><button class="close" type="button" data-dismiss="alert">X</button><spring:message code="${actionResult.message}"></spring:message></div></c:if><!-- 所有被攔截器攔截后,匹配的url頁面都會插入到此 --><decorator:body></decorator:body></div>......<jsp:include page="/footer.jsp"></jsp:include></body>
</html>

參數說明:

<decorator:head?/>

? ? 填充被裝飾頁面的head標簽內容

<decorator:body?/>

? ? 填充被裝飾頁面的body標簽內容

?

轉載于:https://www.cnblogs.com/zishengY/p/7107306.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455292.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FFPLAY的原理(一)

概要電影文件有很多基本的組成部分。首先&#xff0c;文件本身被稱為容器Container&#xff0c;容器的類型決定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接著&#xff0c;你有一組流&#xff0c;例如&#xff0c;你經常有的是一個音頻流和一個視頻流。&…

安卓開發 新浪微博share接口實現發帶本地圖片的微博

1.微博share接口 在開始之前&#xff0c;我們先看一下要用到的這個接口&#xff1a; 我們這次是要上傳本地圖片&#xff0c;可以很明確的知道&#xff0c;除了要用POST方式提交請求&#xff0c;還要采用multipart/form-data編碼方式。 那么這個multipart/form-data編碼方式是什…

python編寫裝飾器_我也來寫一下python裝飾器

有借用&#xff0c;但原文出處已經找不到了&#xff0c;根據筆記分享一下解釋器的基礎。下面的代碼表示&#xff0c;等待兩秒鐘&#xff0c;輸出‘test is running。現在要求增加統計程序運行時間的功能。等待兩秒鐘&#xff0c;輸出‘test is running,現要求增加統計程序運行時…

VirtualBox安裝Centos6.8出現——E_INVALIDARG (0x80070057)

VirtualBox使用已有的虛擬硬盤出錯&#xff1a; 問題描述&#xff1a;UUID已經存在 Cannot register the hard disk E:\system_iso\centos6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9} because a hard disk E:\system_iso\centos68_02\centos6.8.vdi with UUID {05f096aa-6…

DFT 與 ATPG綜 述

DFT 可測試性設計 工程會接觸 DFT。需要了解 DFT 知識&#xff0c;但不需要深入。 三種基本的測試&#xff08;概念來自參考文檔&#xff09;&#xff1a; 邊界掃描測試&#xff1a;Boundary Scan Test: 測試目標是 IO-PAD&#xff0c;利用 JTAG 接口互連以方便 測試。&#x…

非線性動力學_非線性動力學特輯 低維到高維的聯通者

序言&#xff1a; 本文將以維度為主線&#xff0c; 帶量大家進入非線性動力學的世界。 文章數學部分不需要全部理解&#xff0c; 理解思維方法為主非線性動力學&#xff0c;是物理學的思維進入傳統方法所不能解決的問題的一座豐碑。它可以幫助我們理解不同復雜度和時間空間尺度…

Go語言channel與select原理

本文會嘗試解釋 go runtime 中 channel 和 select 的具體實現&#xff0c;部分內容來自 gophercon2017。Go版本為1.8.3channel 第一部分講述一下 channel 的用法。channel 可以看做一個隊列&#xff0c;用于多個goroutine之間的通信&#xff0c;例如下面的例子&#xff0c;一個…

Xadmin添加用戶小組件出錯

環境&#xff1a; Python 3.5.6 Django 2.1 Xadmin 原因&#xff1a; render函數在django2.1上有變化 解決方案&#xff1a; 1.在Python終端輸入命令help(xadmin) 查看xadmin安裝位置 得到如下輸出 FILE/root/anaconda3/envs/learndjango/lib/python3.5/site-packages/xad…

成本預算的四個步驟_全網推廣步驟有哪些?

全網推廣的步驟是什么&#xff1f;一般來說&#xff0c;搜索引擎優化是大多數中小企業常用的推廣方法。主要是通過對一些搜索引擎的排名來提高網站的曝光率&#xff0c;從而更好的提高自己網站的流量&#xff0c;從而更好的實現互聯網層面的銷售。接下來&#xff0c;讓我們學習…

undefined reference to `std::cout'等錯誤

&#xff08;1&#xff09;gcc和g都是GNU(組織)的一個編譯器。 &#xff08;2&#xff09;后綴名為.c的程序和.cpp的程序g都會當成是c的源程序來處理。而gcc不然&#xff0c;gcc會把.c的程序處理成c程序。 &#xff08;3&#xff09;對于.cpp的程序&#xff0c;編譯可以用gcc/g…

FFPLAY的原理(二)

關于包Packets的注釋從技術上講一個包可以包含部分或者其它的數據&#xff0c;但是ffmpeg的解釋器保證了我們得到的包Packets包含的要么是完整的要么是多種完整的幀。現在我們需要做的是讓SaveFrame函數能把RGB信息定稿到一個PPM格式的文件中。我們將生成一個簡單的PPM格式文件…

python生成requirements.txt的兩種方法

python項目如何在另一個環境上重新構建項目所需要的運行環境依賴包&#xff1f; 使用的時候邊記載是個很麻煩的事情&#xff0c;總會出現遺漏的包的問題&#xff0c;這個時候手動安裝也很麻煩&#xff0c;不能確定代碼報錯的需要安裝的包是什么版本。這些問題&#xff0c;requi…

node.js 安裝使用http-server

node.js npm全局安裝了http-server后我該怎么使用它&#xff1f;我在它的安裝目錄下創建了inde.html&#xff0c;瀏覽器localhost:8080可以訪問&#xff0c;那我的項目需要放在它的安裝目錄下&#xff1f;還是需要在我的項目下配置什么或者使用什么指令啟動它&#xff1f;我在我…

D - 卿學姐與魔法

卿學姐與魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status“你的膜法也救不了你 在去拯救公主的道路上&#xff0c;卿學姐披荊斬棘&#xff0c;刀刃早已銹跡斑斑。 一日卿學姐正在為武器的問題發愁&#xff0c;碰到了正…

python對excel表統計視頻教程_Python實現對excel文件列表值進行統計的方法

本文實例講述了Python實現對excel文件列表值進行統計的方法。分享給大家供大家參考。具體如下&#xff1a;#!/usr/bin/env python#codinggbk#此PY用來統計一個execl文件中的特定一列的值的分類import win32com.clientfilenameraw_input("請輸入要統計文件的詳細地址&#…

mooc后臺管理系統設計

摘 要 本設計采用Python中的Django框架實現Mooc后臺管理界面設計,django是一個完整的開源web開源框架,使用起來能夠快速的搭建你想要的網站,由于django自帶后臺管理系統,本設計中后臺管理模板采用功能更加強大的Xadmin實現。數據庫部分采用mysql5.7,由于django中有自帶封裝的數…

DirectShow系統初級指南

流媒體的處理&#xff0c;以其復雜性和技術性&#xff0c;一向廣受工業界的關注。特別伴隨著因特網的普及&#xff0c;流媒體在網絡上的廣泛應用&#xff0c;怎樣使流媒體的處理變得簡單而富有成效逐漸成為了焦點問題。選擇一種合適的應用方案&#xff0c;事半功倍。此時&#…

正則正整數含0

^0?$|^([1-9][0-9]*)?$

MySQL 數據庫導出導入操作

有時需要將 MySQL 數據庫中的數據導入到其它的數據庫中&#xff0c;這里以從 Ubuntu 系統的 MySQL 數據庫導出 zabbix 這個數據庫到 Windows 系統中的MySQL 為例。 導出數據庫 導出數據其實非常方便&#xff0c;比如將 MySQL 中的 zabbix 這個數據庫導出到當前文件夾&#xff…

您的apple id 暫時不符合使用此應用程序_Mac相機不工作時該怎么辦

蘋果公司的許多臺式機和筆記本電腦都包含一個內置網絡攝像頭&#xff0c;該公司愉快地將其稱為FaceTime相機。但是&#xff0c;如果您的Mac網絡攝像頭無法正常工作&#xff0c;并且在嘗試訪問它時顯示為斷開連接或不可用&#xff0c;則您可能不會感到高興。您可以嘗試以下操作來…