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

推薦する

テーブル内の要素のドラッグと並べ替えの問題について簡単に説明します

最近、要素テーブルを使用すると、並べ替えの問題によく遭遇します。単純な並べ替えであれば、要素の公式が...

VMware 構成 VMnet8 ネットワーク方法の手順

目次1. はじめに2. 設定手順1. はじめに1. NAT モード (VMnet8) は、仮想マシン...

光るテキストとちょっとしたJS特殊効果を実現するCSS

実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...

Linux ディレクトリ切り替え実装コード例

ファイルの切り替えは Linux でよく行われる操作です。Linux を初めて学ぶときに最初に触れる...

linxu での Svn ワンクリック インストール シェル スクリプトの詳細な説明

#!/bin/bash #SVNをダウンロード yum -y サブバージョンをインストールします ...

MySQL全文検索の使用例

目次1. 環境整備2. データの準備3. ショーを始める4. 単語分割エンジン要約する参考文献1. ...

初心者がHTMLタグを学ぶ(3)

HTML に触れる初心者は、いくつかの HTML タグを学びます。関連記事:初心者が学ぶ HTML...

ウェブデザインにおける円形要素の使用例 25 選

本日の投稿では、Web デザインで使用される円形要素の優れた例をいくつか挙げ、美しい丸いボタン、メニ...

Ubuntu システムにおけるネットワーク構成ファイルの分析と説明

今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...

MySQLでインデックスエラーが発生する状況について簡単に説明します

以下に、トレーニング機関からのヒントと私自身の要約をいくつか示します。以下のインデックスの内容を説明...

ChromeはCookieの変更を監視し、値を割り当てます

次のコードは、Chrome による Cookie の変更の監視を導入しています。コードは次のとおりで...

ElementUIはel-formフォームリセット機能ボタンを実装します

目次ビジネスシナリオ:効果のデモンストレーション:ビジネスシナリオ: el-form を使用する場合...

MySQL 5.7.16 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

Ubuntu 16.04 に MySQL 5.7 をインストールするにはどうすればいいですか?メイ...

vueの実践的な応用におけるvuexの永続性の詳細な説明

目次vuex 永続性要約するvuex 永続性vuex: ブラウザを更新すると、vuexの状態は初期状...