Diferència entre revisions de la pàgina «NF3 - Framework JSP (15h)»

De wikiserver
Dreceres ràpides: navegació, cerca
(Arquitectura Struts2)
Línia 58: Línia 58:
  
 
[[Fitxer:cicle_vida_struts2.png]]
 
[[Fitxer:cicle_vida_struts2.png]]
 +
 +
==Interceptors==
 +
Els '''interceptors''' són classes que s'empren per especificar el cicle de vida d'una petició, i estan pensades per afegir funcionalitat extra a les '''actions'''. Podríem dir que un '''interceptor''' és semblat a un '''filtre de J2EE''' tret que el seu ús és més localitzat i es pot fer dependre de '''actions''' concrets i no que s'executi de forma global. Per configurar-los es fa de forma declarativa.
 +
 +
Els '''interceptors''' es solen usar per realitzar validacions, workflows, etc..., i quan es defineixen sobre un '''action''', s'executen com els filtres, és a dir, de forma consecutiva com una cadena.
 +
 +
==Actions==
 +
 +
Els '''actions''' són POJOs (Plain Old Java Object).
 +
Qualsevol classe java amb un mètode '''execute()''' pot actuar com un '''Action'''. Així no es fa necessari implementar cap interfície.
 +
 +
<source lang="java">
 +
 +
package exemple;
 +
 +
import com.opensymphony.xwork2.ActionSupport;
 +
import java.util.Date;
 +
 +
public class HolaMon extends ActionSupport {
 +
public static final String MESSAGE = "Hola a tots";
 +
private String message;
 +
 +
public String execute() throws Exception {
 +
setMessage(MESSAGE);
 +
return SUCCESS;
 +
}
 +
 +
public void setMessage(String message){
 +
this.message = message;
 +
}
 +
 +
public String getMessage() {
 +
return message;
 +
}
 +
 +
public String getCurrentTime(){
 +
return new Date().toString();
 +
}
 +
}
 +
</source>
 +
 +
== Result ==
 +
Totes les Actions han de retornar el "Result" a utilitzar per tal de renderitzar la JSP apropiada. Aquest '''Result''' s'identifica amb una cadena que s'utilitza en el fitxer '''struts.xml''' per associar-lo amb la pàgina JSP apropiada. En el cas que la cadena sigui la constant '''SUCCESS''' s'utilitzarà el result per defecte (el que no té un nom assignat).
 +
 +
 +
==Configuració: struts.xml ==
 +
 +
El gestor de la configuració és l'element encarregat de llegir el fitxer de control (struts.xml), analitzar-ho i en el cas que sigui correcte desplegar aquells elements que es referencien.
 +
 +
Exemple de configuració (struts.xml):
 +
<source lang="xml">
 +
<struts>
 +
    <include file="exemple.xml"/>
 +
    <!-- Configuration for the default package. -->
 +
    <package name="default" extends="struts-default">
 +
    </package>
 +
</struts>
 +
 +
##i el fitxer exemple.xml:
 +
<struts>
 +
    <package name="exemple" namespace="/exemple" extends="struts-default">
 +
        <action name="HolaMon" class="exemple.HolaMon">
 +
    <result name="error">/exemple/error.jsp</result>
 +
            <result>/exemple/HolaMon.jsp</result>
 +
        </action>
 +
    </package>
 +
</struts>
 +
 +
## Els dos fitxers, struts.xml i exemple.xml han de estar en el mateix directori.
 +
</source>
 +
 +
Per aclarir idees i mostrar com és l'arquitectura de Struts 2 s'afegeix un diagrama en el qual es pot veure de forma gràfica quina elements són els que intervenen dins del processament d'una petició HTTP, distingint-se quins són elements d'estàndards de J2EE, quins són elements propis de Struts 2 i quins són creats per l'usuari.
 +
 +
[[Fitxer:arquitectura_real.png]]

Revisió del 21:05, 4 feb 2015

STRUTS2

Struts2 és framework d'aplicacions web populars basada en el patró de disseny MVC. Struts2 no és només la propera versió de Struts 1, però és una reescriptura completa de l'arquitectura Struts.

Característiques

  • Formes POJO i accions POJO - Struts2 ha acabat amb les formes d'acció que van ser una part integral del marc de treball Struts. Amb Struts2, es pot utilitzar qualsevol POJO per rebre el formulari d'entrada. De la mateixa manera, ara es pot veure qualsevol POJO com una classe d'Acció.
  • Compatible amb etiquetes - Struts2 ha millorat les etiquetes de formulari i les noves etiquetes permeten als desenvolupadors escriure menys codi.
  • Suport AJAX - Struts2 ha integrat AJAX en el framework mitjançant la creació d'etiquetes d'AJAX, que funciona de manera molt similar a les etiquetes estàndard struts2.
  • Fàcil integració - Integració amb altres frameworks com Spring i SiteMesh.
  • Plantilles - Suport per utilitzar plantilles.
  • Suport Plugin - El comportament de Struts2 pot ser millorada utilitzant plugins. Existeixen una sèrie molt variada de plugins que estan disponibles per Struts2.
  • Entorns - Struts2 ofereix l'entorn per depurar i l'entorn de l'aplicació. A més d'això, Struts també ofereix depuració integrada amb l'ajuda de eines de depuració.
  • Fàcil modificar etiquetes - Els Tag Struts2 poden ser ajustats utilitzant plantilles Freemarker.


Instal·lació i configuració de Struts amb Netbeans

Per instal·lar els plugins de Stuts2 en Netbeans pots seguir aquesta mini guia: M7-UF2-Guia-Instalacio-Struts2-Netbeans

Arquitectura Struts2

Struts2 és un framework basat en el patró de disseny pull-MVC (o MVC2). El patró Model-View-Controller en Struts2 es realitza amb els següents cinc components bàsics:

  • Interceptors
  • Actions
  • Value Stack / OGNL
  • Results / Result types
  • View technologies

Struts 2 és lleugerament diferent d'un marc MVC tradicional. L'acció es troba al model més que en el controlador i existeix un cert solapament.

Struts 2 architecture.gif

El controlador s'implementa amb un filtre de servlet dispatch Struts2 així com interceptors, el model s'implementa amb accions, i la vista com una combinació de tipus de resultats i els resultats. La Value Stack / OGNL proporcionen fil comú, que uneix i permet la integració entre els altres components.

A més dels components anteriors, hi haurà una gran quantitat d'informació referent configuració del framework amb els components anteriors.

Aquest és el panorama arquitectònic del patró MVC Struts 2.

Cicle de vida

Basat en el digrama anterior, es pot explicar el cicle de petició vida de l'usuari en Struts 2 com segueix:

  • L'usuari envia una petició al servidor per sol·licitar algun recurs (és a dir, pàgines).
  • El FilterDispatcher mira la sol·licitud i determina l'acció apropiada.
  • S'apliquen els interceptores configurats (ex: validació, càrrega d'arxius, etc.)
  • S'executa l'acció seleccionada per realitzar l'operació sol·licitada.
  • S'apliquen els interceptors configurats per fer qualsevol processament posterior, si es requereix.
  • Finalment el resultat es prepara per la vista i es retorna a l'usuari.

Cicle vida struts2.png

Interceptors

Els interceptors són classes que s'empren per especificar el cicle de vida d'una petició, i estan pensades per afegir funcionalitat extra a les actions. Podríem dir que un interceptor és semblat a un filtre de J2EE tret que el seu ús és més localitzat i es pot fer dependre de actions concrets i no que s'executi de forma global. Per configurar-los es fa de forma declarativa.

Els interceptors es solen usar per realitzar validacions, workflows, etc..., i quan es defineixen sobre un action, s'executen com els filtres, és a dir, de forma consecutiva com una cadena.

Actions

Els actions són POJOs (Plain Old Java Object). Qualsevol classe java amb un mètode execute() pot actuar com un Action. Així no es fa necessari implementar cap interfície.

package exemple;

import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;

public class HolaMon extends ActionSupport {
	public static final String MESSAGE = "Hola a tots";
	private String message;

	public String execute() throws Exception {
		setMessage(MESSAGE);
		return SUCCESS;
	}

	public void setMessage(String message){
		this.message = message;
	}
	
	public String getMessage() {
		return message;
	}
	
	public String getCurrentTime(){
		return new Date().toString();
	}
}

Result

Totes les Actions han de retornar el "Result" a utilitzar per tal de renderitzar la JSP apropiada. Aquest Result s'identifica amb una cadena que s'utilitza en el fitxer struts.xml per associar-lo amb la pàgina JSP apropiada. En el cas que la cadena sigui la constant SUCCESS s'utilitzarà el result per defecte (el que no té un nom assignat).


Configuració: struts.xml

El gestor de la configuració és l'element encarregat de llegir el fitxer de control (struts.xml), analitzar-ho i en el cas que sigui correcte desplegar aquells elements que es referencien.

Exemple de configuració (struts.xml):

<struts>
    <include file="exemple.xml"/>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
    </package>
</struts>

##i el fitxer exemple.xml:
<struts>
    <package name="exemple" namespace="/exemple" extends="struts-default">
        <action name="HolaMon" class="exemple.HolaMon">
	    <result name="error">/exemple/error.jsp</result>
            <result>/exemple/HolaMon.jsp</result>
        </action>
    </package>
</struts>

## Els dos fitxers, struts.xml i exemple.xml han de estar en el mateix directori.

Per aclarir idees i mostrar com és l'arquitectura de Struts 2 s'afegeix un diagrama en el qual es pot veure de forma gràfica quina elements són els que intervenen dins del processament d'una petició HTTP, distingint-se quins són elements d'estàndards de J2EE, quins són elements propis de Struts 2 i quins són creats per l'usuari.

Arquitectura real.png