Integrazione di Struts 2 e Tiles

In questo capitolo, esaminiamo i passaggi coinvolti nell'integrazione del framework Tiles con Struts2. Apache Tiles è un framework di modelli creato per semplificare lo sviluppo delle interfacce utente delle applicazioni web.

Prima di tutto dobbiamo scaricare i file jar dei tiles dal sito web di Apache Tiles . È necessario aggiungere i seguenti file jar al percorso di classe del progetto.

  • tiles-api-x.y.z.jar
  • tiles-compat-x.y.z.jar
  • tiles-core-x.y.z.jar
  • tiles-jsp-x.y.z.jar
  • tiles-servlet-x.y.z.jar

Oltre a quanto sopra, dobbiamo copiare i seguenti file jar dal download di struts2 nel tuo file WEB-INF/lib.

  • commons-beanutils-x.y.zjar
  • commons-digester-x.y.jar
  • struts2-tiles-plugin-x.y.z.jar

Ora impostiamo il file web.xmlper l'integrazione Struts-Tiles come indicato di seguito. Ci sono due punti importanti da notare qui. Per prima cosa, dobbiamo dire alle piastrelle, dove trovare il file di configurazione delle piastrelletiles.xml. Nel nostro caso, sarà sotto/WEB-INFcartella. Quindi dobbiamo inizializzare il listener Tiles fornito con il download di Struts2.

<?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" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id = "WebApp_ID" version = "2.5">
   <display-name>Struts2Example15</display-name>
	
   <context-param>
      <param-name>
         org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
      </param-name>
      
      <param-value>
         /WEB-INF/tiles.xml
      </param-value>
   </context-param>

   <listener>
      <listener-class>
         org.apache.struts2.tiles.StrutsTilesListener
      </listener-class>
   </listener>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
</web-app>

Quindi creiamo tiles.xml nella cartella / WEB-INF con i seguenti contenuti -

<?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 = "baseLayout" template="/baseLayout.jsp">
      <put-attribute name = "title"  value = "Template"/>
      <put-attribute name = "banner" value = "/banner.jsp"/>
      <put-attribute name = "menu"   value = "/menu.jsp"/>
      <put-attribute name = "body"   value = "/body.jsp"/>
      <put-attribute name = "footer"   value = "/footer.jsp"/>
   </definition>

   <definition name = "tiger" extends = "baseLayout">
      <put-attribute name = "title"  value = "Tiger"/>
      <put-attribute name = "body"   value = "/tiger.jsp"/>      
   </definition>

   <definition name = "lion" extends = "baseLayout">
      <put-attribute name = "title"  value = "Lion"/>
      <put-attribute name = "body"   value = "/lion.jsp"/>      
   </definition>
  
</tiles-definitions>

Successivamente, definiamo un layout scheletro di base nel file baseLayout.jsp. Ha cinque aree riutilizzabili / sovrascrivibili. Vale a diretitle, banner, menu, body e footer. Forniamo i valori predefiniti per baseLayout e quindi creiamo due personalizzazioni che si estendono dal layout predefinito. Il layout della tigre è simile al layout di base, tranne che utilizza l'estensionetiger.jspcome corpo e il testo "Tiger" come titolo. Allo stesso modo, il layout del leone è simile al layout di base, tranne che utilizza l'estensionelion.jsp come corpo e il testo "Leone" come titolo.

Diamo uno sguardo ai singoli file jsp. Di seguito è riportato il contenuto dibaseLayout.jsp file -

<%@ taglib uri = "http://tiles.apache.org/tags-tiles" prefix = "tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset = UTF-8">
      <title>
         <tiles:insertAttribute name = "title" ignore="true" />
      </title>
   </head>

   <body>
      <tiles:insertAttribute name = "banner" /><br/>
      <hr/>
      <tiles:insertAttribute name = "menu" /><br/>
      <hr/>
      <tiles:insertAttribute name = "body" /><br/>
      <hr/>
      <tiles:insertAttribute name = "footer" /><br/>
   </body>
</html>

Qui, abbiamo appena messo insieme una pagina HTML di base che ha gli attributi delle tessere. Inseriamo gli attributi delle tessere nei punti in cui ne abbiamo bisogno. Successivamente, creiamo un filebanner.jsp file con il seguente contenuto -

<img src="http://www.tutorialspoint.com/images/tp-logo.gif"/>

Il menu.jsp file avrà le seguenti righe che sono i collegamenti - alle azioni TigerMenu.action e LionMenu.action struts.

<%@taglib uri = "/struts-tags" prefix = "s"%>

<a href = "<s:url action = "tigerMenu"/>" Tiger</a><br>
<a href = "<s:url action = "lionMenu"/>" Lion</a><br>

Il lion.jsp il file avrà il seguente contenuto:

<img src="http://upload.wikimedia.org/wikipedia/commons/d/d2/Lion.jpg"/>
The lion

Il tiger.jsp il file avrà il seguente contenuto:

<img src="http://www.freewebs.com/tigerofdarts/tiger.jpg"/>
The tiger

Successivamente, creiamo il file della classe di azioni MenuAction.java che contiene quanto segue -

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class MenuAction extends ActionSupport {
   public String tiger() { return "tiger"; }
   public String lion() { return "lion"; }
}

Questa è una lezione piuttosto semplice. Abbiamo dichiarato due metodi tiger () e lion () che restituiscono rispettivamente tiger e lion come risultati. Mettiamo tutto insieme nel filestruts.xml file -

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <package name = "default" extends = "struts-default">
      <result-types>
         <result-type name = "tiles" 
         class="org.apache.struts2.views.tiles.TilesResult" />
      </result-types>

      <action name = "*Menu" method = "{1}" 
         class = "com.tutorialspoint.struts2.MenuAction">
         <result name = "tiger" type = "tiles">tiger</result>
         <result name = "lion" type = "tiles">lion</result>
      </action>

   </package>
</struts>

Controlliamo cosa abbiamo fatto nel file sopra. Prima di tutto, abbiamo dichiarato un nuovo tipo di risultato chiamato "tile" poiché ora stiamo usando tile invece di semplice jsp per la tecnologia di visualizzazione. Struts2 ha il suo supporto per il tipo di risultato Tiles View, quindi creiamo il tipo di risultato "tiles" in modo che sia della classe "org.apache.struts2.view.tiles.TilesResult".

Successivamente, vogliamo dire se la richiesta è per /tigerMenu.action, porta l'utente alla pagina delle tegole della tigre e se la richiesta è per /lionMenu.action, porta l'utente alla pagina delle tessere del leone.

Otteniamo questo utilizzando un po 'di espressione regolare. Nella nostra definizione di azione, diciamo che tutto ciò che corrisponde al pattern "* Menu" verrà gestito da questa azione. Il metodo di corrispondenza verrà richiamato nella classe MenuAction. Cioè, tigerMenu.action richiamerà tiger () e lionMenu.action richiamerà lion (). Dobbiamo quindi mappare il risultato del risultato alle pagine delle tessere appropriate.

Ora fai clic con il pulsante destro del mouse sul nome del progetto e fai clic Export > WAR Fileper creare un file War. Quindi distribuire questo WAR nella directory webapps di Tomcat. Infine, avvia il server Tomcat e prova ad accedere all'URLhttp://localhost:8080/HelloWorldStruts2/tigerMenu.jsp. Questo produrrà la seguente schermata:

Allo stesso modo, se vai alla pagina lionMenu.action, vedrai la pagina del leone che utilizza lo stesso layout delle tessere.