日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sitemesh框架的简单使用(springboot+maven+jsp+sitemesh) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 簡單介紹

  • sitemesh是一種模板框架,是為了解決頁面重復代碼而設計的
  • sitemesh的設計思想是裝飾者設計模式

二 簡單使用

目錄結構,因為我這個項目本來是用來學習flowable的,后面為了方便快速學習,直接把sitemesh集成到這里了,讀者只需關心下方紅框的文件即可

  • 引用依賴(由于springboot默認使用的是themeleaf,不支持使用jsp,所以我們需要引入相關支持jsp的依賴,因為公司用的jsp,所以這里也是用jsp進行演示)
  • <dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><!--用于編譯jsp--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><!--<scope>provided</scope>--></dependency><!-- 支持jsp結果 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.sitemesh</groupId><artifactId>sitemesh</artifactId><version>3.0.0</version></dependency>
  • 編寫過濾器
    過濾器的作用:攔截所有的請求,默認通過讀取/WEB-INF/sitemesh3.xml的方式來進行配置,當然也可以通過寫java代碼進行配置(后面講到)
  • import org.sitemesh.config.ConfigurableSiteMeshFilter; import org.springframework.context.annotation.Configuration; import javax.servlet.annotation.WebFilter;@Configuration @WebFilter(filterName="SitemeshFilter",urlPatterns="/*") public class SitemeshFilter extends ConfigurableSiteMeshFilter { }

    附:ConfigurableSiteMeshFilter 部分代碼

  • 編寫resources/application.yml文件
  • spring:mvc:view:prefix: /WEB-INF/app-jsp/suffix: .jsp
  • 編寫sitemesh3.xml文件
  • <?xml version="1.0" encoding="UTF-8"?> <sitemesh><!-- 默認裝飾器,當下面的路徑都不匹配時,啟用該裝飾器進行裝飾 --><mapping decorator="/WEB-INF/app-jsp/decorators/header.jsp"/><!-- 排除,不進行裝飾的路徑 --><mapping path="/login" exclue="true"/><mapping path="/" exclue="true"/><!-- 對不同的路徑,啟用不同的裝飾器 --><mapping path="/main" decorator="/WEB-INF/app-jsp/decorators/default.jsp" /> <!-- <mapping path="/decoratorsTest" decorator="/WEB-INF/app-jsp/decorators/decorators-test.jsp" />--><!-- 對不同的路徑,使用同一個裝飾器 --><mapping decorator="/WEB-INF/app-jsp/decorators/header.jsp"><path>/decoratorsTest2</path><path>/decoratorsTest3</path> <!-- <decorator>/WEB-INF/app-jsp/decorators/header.jsp</decorator>--></mapping><!-- 對同一路徑,啟用多個裝飾器 --><!-- 注意事項:當需要對同一個路徑配置多個裝飾器時,會從上往下進行裝飾,也就是先使用default.jsp進行裝飾,然后把裝飾后的default.jsp的body作為整體被裝飾的內容,再通過decorators-test.jsp進行裝飾--><mapping path="/testHb"> <!-- <path>/testHb/*</path>--><decorator>/WEB-INF/app-jsp/decorators/default.jsp</decorator><decorator>/WEB-INF/app-jsp/decorators/decorators-test.jsp</decorator></mapping><!-- Sitemesh3 默認只提供了 body,title,head 等 tag 類型,我們可以通過實現 TagRuleBundle 擴展自定義的 tag 規則 --><content-processor><tag-rule-bundle class="com.yzy.flowable.sitemesh.decorators.DecoratorsTag" /></content-processor><!-- 使用自定義的tag --><mapping path="/decoratorsTest4" decorator="/WEB-INF/app-jsp/decorators/myTagTest.jsp" /></sitemesh>
  • 編寫SitemeshController,新增訪問路徑login
  • @RequestMapping("login")public String login(){return "login";} login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head><title>登錄頁</title> </head> <body><h1>我是登錄頁面</h1> </body> </html>

    對應sitemesh3.xml文件,訪問路徑為/login時,不進行裝飾.
    頁面效果:

  • 編寫SitemeshController,新增訪問路徑main
  • @RequestMapping("main")public String main(){return "main";} main.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head><title>主頁面</title> </head> <body><h1>我是主頁面</h1> </body> </html>

    對應sitemesh3.xml文件,訪問路徑為/main時,進行裝飾.

    default.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head><title><sitemesh:write property='title'/></title> </head> <body><h3>我是默認的頁面</h3><hr>插入的內容:<br><sitemesh:write property='body'/><br/></body> </html> 頁面效果

    分析:因為對/main進行了過濾,main.jsp的<title>和<body>內容被抽取出來,填充到default.jsp對應的位置上,最后,瀏覽器渲染的是default.jsp的內容

  • 裝飾器其它的配置參考sitemesh3.xml文件
  • 不同的路徑,使用同一個裝飾器 或者 同一路徑,啟用多個裝飾器等
  • 自定義tag,參考sitemesh3.xml
  • <!-- Sitemesh3 默認只提供了 body,title,head 等 tag 類型,我們可以通過實現 TagRuleBundle 擴展自定義的 tag 規則 --><content-processor><tag-rule-bundle class="com.yzy.flowable.sitemesh.decorators.DecoratorsTag" /></content-processor><!-- 使用自定義的tag --><mapping path="/decoratorsTest4" decorator="/WEB-INF/app-jsp/decorators/myTagTest.jsp" /> 編寫DecoratorsTag.java文件 import org.sitemesh.SiteMeshContext; import org.sitemesh.content.ContentProperty; import org.sitemesh.content.tagrules.TagRuleBundle; import org.sitemesh.content.tagrules.html.ExportTagToContentRule; import org.sitemesh.tagprocessor.State;public class DecoratorsTag implements TagRuleBundle {@Overridepublic void install(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {state.addRule("myBody", new ExportTagToContentRule(siteMeshContext,contentProperty.getChild("myBody"), false));}@Overridepublic void cleanUp(State state, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {} }

    修改main.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head><title>主頁面</title> </head> <body><h1>我是主頁面</h1><myBody>我是自定義標簽</myBody> </body> </html> myTagTest.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html> <head><title><sitemesh:write property='title'/></title> </head> <body><h3>我是頭部</h3><hr>插入的內容:<br><sitemesh:write property='myBody'/><br/><!-- 引進尾部 --><jsp:include page="footer.jsp"></jsp:include> </body> </html> 頁面效果

    可知:myTagTest.jsp在進行裝飾main.jsp時,只抽取了<myBody>標簽的內容

    以上就是sitemesh的簡單用法,也足夠了

    總結

    以上是生活随笔為你收集整理的sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。