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スタートアップが起こした事故の実録

推薦する

Vue ベースの要素ボタン権限実装ソリューション

背景要件: ERP システムに「ボタン権限制御」機能を追加する必要があり、権限の制御粒度をボタン レ...

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...

純粋なCSSで立体的な画像配置効果を実現するサンプルコード

1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...

DockerはMariaDBのサブライブラリとサブテーブル、および読み書き分離機能を実装します

目次1. はじめに2. 環境整備1. 基本環境3.Mysqlマスタースレーブ構成をインストールする1...

Mysqlトランザクション処理の詳細な説明

1. MySQLのトランザクションの概念MySQL トランザクションは主に、操作量が多く複雑度の高い...

Nginx は https ウェブサイト構成コード例を実装します

https ベースポート 443。これはキーと呼ばれるものに使用されます。これらのことを理解せずにで...

MySQLステートメントを監視する方法の詳細な説明

クイックリーディングSQL ステートメントを監視する必要があるのはなぜか、監視方法と監視手段について...

MySQLがウィンドウ関数で合計関数を実行するときに発生する可能性のあるバグ

MySql のウィンドウ関数を使用して統計データを収集する際に、小さな問題が見つかったので、それにつ...

CSS3の3D効果を使って立方体を作成する

CSS3 の 3D 効果を使用して立方体を作成する方法を学ぶと、3D シーンの回転と変位のプロパティ...

IIS web.config でクロスドメイン アクセスを設定する方法

要件: ページに画像を表示する必要がありますが、さまざまな理由により、画像はサーバー 2 にあります...

LinuxでのDNSサーバーの設定の詳細な説明

1. DNSサーバーの概念インターネットでの通信には IP アドレスの助けが必要ですが、数字に対する...

docker mysqlの起動時に初期化SQLを実行する

1.Mysqlイメージを取得するdocker pull mysql:5.7 2. MySQLイメージ...

CSS3 カウントダウン効果

成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...