Sitemesh チュートリアル - ページ装飾技術の原理と応用

Sitemesh チュートリアル - ページ装飾技術の原理と応用

1. 基本概念

1. Sitemeshはページ装飾技術です。

1 : フィルターを通してページアクセスを遮断する
2 : 訪問したページのURLに基​​づいて適切な装飾テンプレートを見つける
3 訪問したページのコンテンツを抽出し、デコレーションテンプレートの適切な位置に配置します
4 : 最後に、 装飾されたページがクライアントに送信されます。

2. サイトメッシュでは、ページは装飾テンプレートと通常のページの 2 種類に分かれています。
1) 装飾テンプレートとは、他のページを装飾するために使用するページを指します。
2) 通常のページ。一般的には、さまざまなアプリケーション ページを指します。
3. 次に、簡単な例を使用して、Web ページのサイトメッシュ変更の基本原理を説明します。

第二に、ウェブページのテンプレート変更の原則







Sitemesh の登録メカニズムを通じて、パスにアクセスするときに訪問したページを変更するために、Sitemesh に XXX テンプレート (以前のテンプレートが使用されていると仮定) を使用するように指示します。



ユーザーが左側のナビゲーションバーで「Show the Great Wall」(/ShowGreatWall.do)をクリックすると、右側の「Show the Great Wall」ページが指定されたテンプレートで装飾されます。



上記のプロセスを要約すると、Sitemesh が Web ページを変更する基本原理は次のように説明できます。



3. Sitemeshの設定と使用

1) WEB-INF/web.xmlにフィルター定義とsitemeshタグライブラリ定義を追加する

次のようにコード
をコピーします

<フィルター>
<filter-name>サイトメッシュ</filter-name>
<フィルタークラス>com.opensymphony.module.sitemesh.filter.PageFilter</フィルタークラス>
</フィルター>
<フィルターマッピング>
<filter-name>サイトメッシュ</filter-name>
<urlパターン>/*</urlパターン>
</フィルターマッピング>
<タグライブラリ>
<taglib-uri>サイトメッシュデコレータ</taglib-uri>
<タグライブラリの場所>/WEB-INF/sitemesh-decorator.tld</タグライブラリの場所>
</タグライブラリ>
<タグライブラリ>
<taglib-uri>サイトメッシュページ</taglib-uri>
<タグライブラリの場所>/WEB-INF/sitemesh-page.tld</タグライブラリの場所>
</タグライブラリ>

2) WEB-INF/decorators.xml を作成します。このファイルでは、どのテンプレートを含めるか、各テンプレートがどの URL を変更するかを設定できます。また、テンプレート制御を必要としない URL も設定できます。decorators.xml の例は次のとおりです。

次のようにコード
をコピーします

<除外>
<パターン>/ログイン*</パターン>
</除外>
<デコレーター defaultdir="/デコレーター">
<デコレータ名="メイン" ページ="DecoratorMainPage.jsp">
<パターン>/*</パターン>
</デコレータ>
<デコレータ名="pop" ページ="PopPage.jsp">
<パターン>/showinfo.jsp*</パターン>
<パターン>
/myModule/GreatWallDetailAction.do*
</パターン>
</デコレータ>
</デコレータ>

3) 変更したテンプレートの例を見てみましょう

次のようにコード
をコピーします

<%@page contentType="text/html;?charset=GBK"%>
<%@taglib uri="サイトメッシュデコレータ"?prefix="デコレータ" %>
<html>
<ヘッド>
<タイトル> <デコレータ:タイトル/> </タイトル>
<デコレータ:head/>
</head>
<本文>
こんにちは世界 <hr/>
<デコレータ:本体/>
</本文>
</html>

4) 変更されたページの例を見てみましょう。

次のようにコード
をコピーします

<%@ ページコンテンツタイプ="text/html;?charset=GBK"%>
<html>
<ヘッド>
<title>こんにちは世界</title>
</head>
<本文>
<p>装飾されたページはここに表示されます。</p
</本文>
</html>

5)

デコレーションテンプレートで使用できる

Sitemeshタグ

<decorator:head />

を見て

、デコレーションしたページのheadタグ内のコンテンツを抽出してみましょう。

<decorator:body /> は、

装飾されたページの body タグの内容を取り出します。

<decorator:title default="" /> は、

装飾されたページのタイトル タグのコンテンツを取得します。 default はデフォルト値です。

<decorator:getProperty property="" default="" writeEntireProperty=""/> は、

装飾されたページの関連タグの属性値を取得します。

writeEntirePropertyは、プロパティの値を表示するか、

「property=value」HTMLタグの属性を

表示するかを示します。


本文タグの属性
Meta タグの

コンテンツ値

に ">" または <" が含まれている場合は、エラーが報告され、トランスコードする必要があることに注意してください。たとえば、 &lt;

default はデフォルト値です。

<decorator:usePage id="" /> は、

装飾されたページによってオブジェクトとして構築され、装飾されたページの JSP で直接参照できます

6) デコレーションテンプレートでタグを使用する例を見る

次のようにコード
をコピーします

<html lang=" <デコレータ:getProperty プロパティ="lang"/> ">
<ヘッド>
<title> <デコレータ:title デフォルト="Hello" /> </title>
<デコレータ:ヘッド />
</head>

<body <デコレータ:getProperty property="body.onload" writeEntireProperty="1"/> >
メタから変数会社の名前を取得します。
<デコレータ:getProperty プロパティ="meta.company"/>
変更されたページの本文の内容は次のとおりです。
<デコレータ:本体 />
<デコレータ:usePage id="myPage" />
<%=myPage.getRequest().getAttribute("ユーザー名")%>
</本文>
</html>

7) 変更されたページの対応するコードを確認します。

次のようにコード
をコピーします

<html lang="ja">
<ヘッド>
<title>私のサイトメッシュ</title>
<meta name="会社" content="スマートドット"/>
<meta name="著者" content="zhangsan"/>
<スクリプト>
関数 count(){10 を返す;}
</スクリプト>
</head>
<body onload="count()">
<p>これは修正されたページです</p>
</本文>
</html>

IV. 結論

1. Sitemesh で最も重要なことは、装飾用のテンプレートを作成し、どのページを装飾するかを decorators.xml で設定することです。したがって、Sitemeshを使用する主なプロセスは、デコレーションテンプレートを作成しdecorators.xmlでURLパターンを構成することです。

2. プロジェクト全体を分析して、どのページをテンプレートに抽象化する必要があるかを確認します。たとえば、セカンダリ ページ、三次ページ、ポップアップ ウィンドウなどはすべて、対応するテンプレートにする必要があります。一般的に、大規模な OA システムには 8 個を超えるテンプレートはありません。

特別なリクエスト パスがフィルターの範囲内にあるが、テンプレートを使用したくない場合はどうすればよいでしょうか


そんなに無理なことしちゃダメですよ!

心配しないでください。SiteMesh はすでにこれを考慮しており、上記の手順 5 で説明した decorators.xml がこの時点で機能します。
以下は私の decorators.xml です:

次のようにコード
をコピーします

<?xml バージョン="1.0" エンコーディング="ISO-8859-1"?>
<デコレーター defaultdir="/デコレーター">
<!-- 除外された URL は Sitemesh によって装飾されることはありません -->
<除外>
<パターン>/index.jsp*</パターン>
<パターン>/ログイン/*</パターン>
</除外>
<デコレータ名="main" ページ="main.jsp">
<パターン>/*</パターン>
</デコレータ>
</デコレータ>

decorators.xml には 2 つの主要なノードがあります
デコレータ ノードはテンプレートの場所とファイル名を指定し、パターンを使用してどのパスがどのテンプレートを参照するかを指定します。
excludes ノードは、テンプレートを使用しないリクエストのパスを指定します。

たとえば、上記のコードでは、/index.jsp と /login/ で始まるリクエスト パスはテンプレートを使用しません。

もう 1 つ注意すべき点は、decorators ノードの defaultdir 属性が、テンプレート ファイルが保存されるディレクトリを指定することです。

<<:  高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます

>>:  MySQLスタートアップが起こした事故の実録

推薦する

CSS3 は、跳ねるボール効果を実現する Web アニメーションを作成します。

基本的な準備この実装には、クラス名が ball である単純な div が必要です。 HTMLコード:...

HTML 5.1 学習: 14 の新機能とアプリケーション例

序文ご存知のとおり、HTML5 はインターネット コミュニティ全体に標準を提供する組織である Wor...

Vue echarts は水平棒グラフを実現します

この記事では、水平棒グラフを実現するためのvue echartsの具体的なコードを参考までに共有しま...

中国語でのNginx設定パラメータの詳細な説明(負荷分散とリバースプロキシ)

PS: 最近、nginx を詳細に紹介している <<High-Performance ...

Windows 10 での mysql5.5 データベース コマンドラインの中国語文字化け問題を解決する

システムをリセットした後、かなり前にインストールした MySQL データベースのコンソール クエリで...

マウスを置いたときに半透明効果のテキスト説明を実現するための純粋な CSS (初心者は必読)

効果は以下のとおりです。 例1 例2:例1[結婚式の計画]を例にとるHTML: <div cl...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

MySQL データベースは何をしますか?

MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...

Webデザインにおけるフォームデザインテクニックのまとめ

「脳が多数の領域間の関係を処理できるように、入力は論理的なグループに分割する必要があります。」 – ...

Vue が DingTalk の出勤カレンダーを実装

この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...

Docker で MySQL をインストールし、リモート接続を実装するチュートリアル

画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...

HTML フレームセットのサンプルコード

この記事では、Frameset が作成した、できるだけシンプルなフレームワークを紹介します。さて、ま...

Alibaba Cloud Centos7のインストールとSVNの設定

1. SVNサーバーをインストールする yum でサブバージョンをインストール2. SVNバージョン...

Vueで背景色と透明度を設定する方法

背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...

CSS を解析して画像のテーマカラー機能を抽出する (ヒント)

背景すべては、WeChat 技術グループのクラスメートが「写真の主な色を取得する方法はあるか」と尋ね...