下面開始正式闡述若是整合struts2 和 tiles 1. web
在struts2整合完成的前提下位tiles單獨準備以下各jar包,注意各jar包的版本要一致。 apache
一般咱們到你用來搭建struts環境的lib目錄下尋找這些jar包,若是你下載的是struts2.0,則到她的lib下面找; api
這樣可以保證版本不會出錯。 J jsp
ar: commons-beanutils-1.7.0.jar commons-digester-2.0.jar commons-collections-3.1.jar spa
tiles-jsp-2.0.6.jar tiles-core-2.0.6.jar tiles-api-2.0.6.jar orm
struts2-tiles-plugin-2.2.3.1.jar xml
2.配置web.xml 繼承
配置web.xml主要涉及下面2個內容: 資源
1.爲系統上下文配置兩個環境變量 2.爲tiles天加監聽器 it
<context-param>
<param-name>org.apache.tiles.CONTAINER_FACTORY</param-name>
<param-value>org.apache.struts2.tiles.StrutsTilesContainerFactory</param-value>
</context-param>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</context-param>
<listener>
<listener-class> org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener>
這樣由監聽器獲到取tiles組裝請求時,交給StrutsTilesContainerFactory處理,StrutsTilesContainerFactory根據請求的參數(也就是被調用的小頁面的名稱)在tiles-defs.xml中找,若是沒有找到則會報出異常,找到以後就會將頁面組裝進來。
3.緊接着就應該講tiles-defs.xml如何配置,通常狀況下將她放在WEB-INF下。
內容格式以下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="testdefault" template="/user/tiles.jsp" >
<put-attribute name="header" value="/index.jsp"></put-attribute>
<put-attribute name="copy" value="/user/user-reg-form.jsp">
</put-attribute>
</definition>
</tiles-definitions>
definition name對於action完成後result所返回的內容,
好比有以下一段action配置
<package name="test" namespace="/taobao/test" extends="tiles-default">
<action name="userFormtest" class="com.nj180.taobao.test.TestTiles" method="execute">
<result name="success" type="tiles">testdefault</result>
</action>
</package>
當這個action無誤的執行後就會去尋找tiles-defs.xml 文件中的name=testdefault的template屬性,這時候template屬性就是這個action執行完的真正去向。(是否是明白大概是怎麼個過程了呢?)。
當咱們不適用tiles的時候,可能直接會寫下面的action配置: <action name="userFormtest" class="com.nj180.taobao.test.TestTiles" method="execute"> <result name="success">/user/tiles.jsp</result> </action> 這樣執行完成後,就直接返回到了/user/tiles.jsp。因此這兩強調兩個問題: 1. 使用tiles,action中必須將type屬性置爲tiles,不然會報異常,找不到資源 2. Package 要繼承tiles-default 好了,如今假定全部工做都完成了,咱們來看一下tiles都作了什麼?action完成後,會返回user/tiles.jsp,這時候咱們就能夠在user/tiles.jsp的任意位置去使用index.jsp,user/user-reg-form.jsp,由於他們已經被組裝進來了!在真實的項目中通常都組裝通用性較強的頁面如頭部和尾部,每一個頁面確定還會有自身的邏輯。注意:雖然兩個jsp被組裝進來了,可是若是你再user/tiles.jsp不去使用,那麼全部的工做至關於白作。因此tiles能夠一次組裝不少頁面到目標頁面,到目標頁面以後咱們還能夠進行二次操做,這是include不可以實現的 說明:在寫配置文件的時候還須要注意路徑問題,你們能夠寫項目的相對路徑,好比個人寫法:<definition name="testdefault" template="/user/tiles.jsp" >,那麼說明我這個jsp的真實路徑就是WebContent/user/tiles.jsp 最後的問題,在jsp中如何使用tiles進行二次選擇操做。首先我須要導入tiles的標籤文件,這樣咱們纔可以在頁面使用,就像使用struts的其餘標籤(c)同樣。在tiles-jsp-2.0.6.jar包中能夠找到tiles-jsp.tld將他複製到WEB-INF下面在頁面進行引用<%@taglib uri="/WEB-INF/tld/struts-tiles.tld" prefix="tiles"%>
body><h1>First Page Coming</h1><tiles:insertAttribute name="copy"/> <hr> <h1>Second Page Coming</h1> <tiles:insertAttribute name="header"/> <hr></body>