Java:Struts, Tiles et pages JSP
Sommaire
[masquer]But
- Struts permet de mettre en œuvre l'architecture Modèle-Vue-Contrôleur (MVC) dans des applications web.
- Les JavaServer Pages ou JSP est une technologie basée sur Java qui permet aux développeurs de générer dynamiquement du code HTML, XML ou tout autre type de page web.
- Tiles est un moteur de template pour pages JSP.
API et dépendances
Avant de commencer, il faut récupérer la dernière version stable du framework Apache Struts ici (prendre une "Full Distribution"). Pour notre exemple, on aura besoin des JAR suivant:
- struts2-core-2.0.14.jar
- struts2-tiles-plugin-2.0.14.jar
- tiles-core-2.0.4.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- tiles-api-2.0.4.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- tiles-jsp-2.0.4.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- xwork-2.0.7.jar de OpenSymphony (fournis dans la distribution de Struts 2.0.14)
- commons-beanutils-1.7.0.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- commons-digester-1.8.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- commons-logging-1.0.4.jar de Apache (fournis dans la distribution de Struts 2.0.14)
- freemarker-2.3.8.jar (fournis dans la distribution de Struts 2.0.14)
- ognl-2.6.11.jar (fournis dans la distribution de Struts 2.0.14)
Intégration de Struts dans un projet
Dans un projet web dynamique, ajouter les lignes suivantes dans le fichier WEB-INF/web.xml:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Ensuite, il faut définir la configuration de Struts à travers le fichier struts.xml à placer dans un répertoire mentionné dans le CLASSPATH (ressources):
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <include file="example.xml"/> </struts>
Ce fichier contient un autre fichier, example.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="essai-default" extends="struts-default"> <!-- Ajouter les paramètres communs à tous les paquetages ici --> </package> <package name="root" namespace="/" extends="essai-default"> <!-- Ajouter les paramètres propre au paquetage ici --> <!-- Ajouter les actions ici --> </package> </struts>
Intégration de Tiles
Ajouter les lignes suivantes dans le fichier WEB-INF/web.xml:
<listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> </listener> <context-param> <param-name>tilesDefinitions</param-name> <param-value>/WEB-INF/tiles.xml</param-value> </context-param>
Dans le fichier de configuration de Struts et pour chaque paquetage utilisant Tiles, ajouter les lignes suivantes:
<result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/> </result-types>
Créer le fichier WEB-INF/tiles.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://struts.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <!-- Ajouter toutes les définitions Tiles ici --> </tiles-definitions>
Création du template des pages
On créé la page JSP WEB-INF/pages/layout.jsp qui va nous servir de template:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <html> <head> <title>Essai</title> </head> <body> <tiles:insertAttribute name="body" /> </body> </html>
Puis on ajoute la définition Tiles suivante dans le fichier WEB-INF/tiles.xml:
<definition name="default" template="/WEB-INF/pages/layout.jsp"> </definition>
Création d'une action
On créé la nouvelle classe action, héritant de com.opensymphony.xwork2.ActionSupport:
package org.minetti.example.struts.ui.action; import com.opensymphony.xwork2.ActionSupport; public class ExampleAction extends ActionSupport { private static final long serialVersionUID = 6589265961532614115L; @Override public String execute() throws Exception { // Traitement de l'action return ActionSupport.SUCCESS; } }
Puis, insère les lignes suivantes dans le paquetage root du fichier de configuration de Struts:
<action name="Example" class="org.minetti.example.struts.ui.action.ExampleAction"> <result type="tiles">example</result> </action>