sitemesh学習ノート(1)

6632 ワード

最近ウェブ開発を勉強していると、同じナビゲーションバー、ログインバー、js、jQueryなど同じ要素が多く存在することがわかりました.このように开発が肥大化しているような気がします.そして、时には要素を変えて、この要素を含むすべてのページを再コードしなければなりません.亲たち、面倒だと思いますか.私も面倒だと思います.だから早くsitemeshフレームワークを使いましょう、ははは.
次はdemoを作って、このフレームワークの使い方を基本的に紹介します.
まずmyeclipseでjava webプロジェクトを建ててsitemeshと名付けてsitemesh-2.x.jar copyはlibの下にあります.これで公式に提供されているパッケージがあります.もちろん、いくつかのものを配置します.WEB-IFNの下にdecoratorsを新規作成する.xml:
<?xml version="1.0" encoding="utf-8"?>  
<!--            -->
<decorators defaultdir="/decorators"> 

    <!--                -->  

    <excludes>  

    </excludes>  

  

 <!--                     -->  

    <decorator name="main" page="main.jsp">  

        <pattern>/*</pattern>  

    </decorator>  <!--           ,         -->

</decorators>  

WEBRootの下にフォルダdecoratorsをデコレーションパッケージとして作成し、このフォルダの下にmainを作成する.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
        <title><decorator:title default="  title"/></title>      
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<decorator:head/>  
  </head>
  
  <body>
   <h2>SiteMesh  header</h2>  

       <hr />  

    <!--         body     -->  

   <decorator:body />  

       <hr />  

    <h2>SiteMesh  footer</h2>  
  </body>
</html>

いくつかのsitemeshのラベルは被装飾ページの要素を獲得して、ここでいくつかの親たちはこのような質問をするかもしれませんが、装飾ページは被装飾ページに送られて組み合わせるべきではありませんか?なぜ装飾ページは逆に被装飾ページの内容を得るのでしょうか.このような問題がある友達は、私が話し終わったら分かると思います.
次にwebを構成します.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>sitemesh</display-name>
  <filter>  

<filter-name>sitemesh</filter-name>  

<filter-class>  

com.opensymphony.module.sitemesh.filter.PageFilter   

</filter-class>  

</filter>  

  

<filter-mapping>  

<filter-name>sitemesh</filter-name>  

<url-pattern>/*</url-pattern>  

</filter-mapping>  
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

主に真ん中のfilterフィルタを追加します.ここでは装飾器と言います.装飾器のクラスパッケージを定義しました.jarパッケージが公式に提供されています.jarパッケージがあります.装飾器があります.もちろん、装飾ページが必要です.
/*は、装飾されたページのパスを指定します.実はappルートディレクトリです.
経路を示すだけでは足りないので、どうしてもjspを決めなければならないので、WEBRootの下にindexを作ります.jsp. myeclipseは自動的に建ててあげました.
次に、次の内容を追加します.
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>   (  )  title</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
<h4>   (  )  body     。</h4>  

 <h3>  SiteMesh   ?</h3>  

 <ul>  

     <li>   (  )           。</li>  

     <li>         ,             (  )  。</li>  

      <li>            。</li>  

      <li>  。。。</li>  

     </ul>  
  </body>
</html>

サーバーを開き、ブラウザを開きます.localhost:8080/sitemesh/indexと入力します.jsp.結果は見えましたか?結果として2つのページが合体しました.
さっきの質問に戻りますが、なぜ装飾ページは被装飾ページの内容を得るのですか?
フレームワークの実行手順について説明します.上記のアドレスを入力すると、サーバはindexにアクセスするように要求されます.jspページ、サーバは通知を受け取ってから先にwebを読みます.xml、indexが見つかりました.jspページは装飾が必要で、装飾器はsitemeshと呼ばれ、decoratorsを読んでいます.xmlは装飾ページのファイルパスを得て、それからこの装飾ページを実行して、このsitemeshが提供したラベルを通じて、装飾ページの要素を得て、この時の装飾ページは結合体になって、それからこの結合体をあなたに送って、ブラウザはこの結合体のコードを得ます.もちろん、この装飾ページはマルチスレッドに違いないでしょう.さもないと一度しか使えないわけではありません.同時に繰り返し使用することができます.