自組裝方法大致如下:把整個頁面的內容劃分到各個不同的視圖組件中,顯示頁面本身的責任是包含這些視圖組件,並以正確的方式構建完整的HTML響應。顯示頁面負責頁面的組裝過程。採用主版頁面組裝方法時,顯示頁面就變成了包含在該主版頁面的整個響應中的另一個內容片段。3-6所示,現在主版頁面擔負起組裝的責任,並且它要定義整個頁面的結構和布局。
從概念上來看這很簡單,但網站中不同的顯示頁面如何使用同一個主版頁面呢?主版頁面又如何知道應該引入哪個顯示頁面呢?
運用這種技術的訣竅是,在主版頁面中加入一條可以在頁面運行時執行的<jsp:include>動作指令,以引入正確的內容頁面。<jsp:include>動作指令有兩種基本形式。第一種形式使用靜態定義的頁面名稱:
- <jsp:include page="/Home.jsp"/>
第二種形式使用運行時運算式定義頁面名稱:
- <jsp:include page="<%= variablename %>"/>
這種把運行時運算式作為頁面名稱的形式為在多個顯示頁面之間共用同一個主版頁面提供了一種簡單可行的方法。最簡單的用法是,Master.jsp頁面先尋找具體的請求參數page,然後動作指令以page為參數把正確的頁面放到主版頁面完整模板的顯示地區中:
- ...
- <% String pagename = request.getParameter("page"); %>
- ...
- <body>
- <table>
- ...
- <% try { %>
- <jsp:include page="<%= pagename %>"/>
- <% }
- catch (IOException e) {
- %>
- <jsp:include page="Blank.jsp"/>
- <% } %>
- ...
- </table>
- </body>
接下來,使用由主版頁面名稱和一個帶有顯示頁面名稱的查詢字串組成的URL來訪問每一個顯示頁面。例如,http://servername:port/Master.jsp?page=Home.jsp就會調用Master.jsp主版頁面,同時指出了要引入頁面的名稱是Home.jsp。頁面中的超連結同樣可以使用這樣的文法來指定URL:
- <A HREF="Master.jsp?page=ViewProperty.jsp">...</A>
現在我們就可以在不觸及任何顯示頁面的前提下,通過修改一個獨立的頁面Master.jsp來改變整個網站的外觀。這些改變可以包含頁面結構的整體重新布局、所包含視圖組件的添加或刪除以及其他所期望的改變。