Rýchly sprievodca Stripes

2007/09/07

Úvod

Stripes je aplikačný rámec na tvorbu webových aplikácii založený na návrhovom vzorec MVC. Medzi základné vlastnosti patrí:

Iné aspekty

Porovnanie so Struts

Porovnanie so Spring MVC

Stiahnutie a inštalácia

ZIP súbor je možné stiahnuť zo SourceForge.

Samotný Stripes pozostáva z hlavného JAR súboru a z dvoch závislostí - commons-logging a com.oreilly.servlet. Tie je možné skopírovať do adresára WEB-INF/lib svojej webovej aplikácie.

Okrem toho je nutné skopírovať StripesResources.properties do adresára WEB-INF/classes.

CRUD aplikácia

Vytvorme si jednoduchú aplikáciu predstavujúcu pivný bar.

Zobrazenie pív v ponuke

Zobrazenie pív v ponuke je pekným príkladom read aspektu.

V tomto prípade si však vystačíme s klasickým JSP (bez akýchkoľvek komponentov Stripes).

Vytvorme bean, ktorý bude poskytovať dáta stránke:

package sk.beer.web;

import java.util.ArrayList;
import java.util.List;

import sk.beer.Beer;

public class ListBeersBean {
  public List<Beer> getAllBeers() {
    List<Beer> beers = new ArrayList<Beer>();
    beers.add(new Beer("Saris"));
    beers.add(new Beer("Hoegaarden"));
    beers.add(new Beer("Bazant"));
    
    return beers;
  }
}

Samotná stránka bude klasické JSP využívajúce JSTL tagy

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<jsp:useBean id="beerBean" scope="page" class="sk.beer.web.ListBeersBean" />

<table class="display">
	<tr>
		<th>ID</th>
		<th>Title</th>
		<th></th>
	</tr>
	<c:forEach items="${beerBean.allBeers}" var="beer">
		<tr>
			<td>${beer.id}</td>
			<td>${beer.name}</td>
			<td></td>
		</tr>
	</c:forEach>
</table>

Značka jsp:useBean vloží do kontextu stránky novú inštanciu triedy ListBeersBean. Pomocou c:forEach sa získa zoznam pív a v iteráciách sa vytvorí tabuľka.

Pridanie piva

Na pridanie piva budeme potrebovať dve veci:

Formulár - addBeer.jsp

Formulár bude predstavovať JSP stránka využívajúca špeciálne značky Stripes.

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>

<stripes:errors />
<stripes:form beanclass="sk.beer.web.AddBeerAction">
	Beer ID: <stripes:text name="beer.id" /><br />
	Beer Name: <stripes:text name="beer.name" />
	<stripes:submit name="addBeer" value="Pridat pivo"/>
</stripes:form>

Kontrolér - trieda AddBeerActionBean

Kontrolér je objekt, ktorý spracuje dáta z formulára, zavolá objekty bussiness logiky a v prípade potreby vykoná presmerovanie na ďalší view.

V Stripes je kontrolérom trieda, ktorá implementuje interfejs ActionBean.

package sk.beer.web;

import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.RedirectResolution;
import net.sourceforge.stripes.action.Resolution;
import sk.beer.Beer;

public class AddBeerAction implements ActionBean {
  private Beer beer;

  private ActionBeanContext context;
  
  @DefaultHandler
  public Resolution displayForm() {
    System.out.println("Displaying form");
    return new ForwardResolution("/addBeer.jsp");
  }
  
  public Resolution addBeer() {
    System.out.println("Adding beer: " + beer);
    return new RedirectResolution("/listBeers.jsp");
  }
  
  public ActionBeanContext getContext() {
    return context;
  }

  public Beer getBeer() {
    return beer;
  }

  public void setBeer(Beer beer) {
    this.beer = beer;
  }

  public void setContext(ActionBeanContext context) {
    this.context = context;
  }

}

Implementácia interfejsu vynucuje prekrytie dvoch metód: getContext() a setContext(), pomocou ktorých je možné získať prístup k objektu typu ActionBeanContext (tento kontext umožňuje prístup k objektu HTTP session a pod). V našich metódach si nastavený objekt kontextu uložíme do inštančnej premennej a v metóde getContext() ho vrátime.

Ďalšie dve významné metódy sú metódy vracajúce objekt Resolution. Obe tieto metódy predstavujú reakciu na udalosti (udalosť môže byť vyvolaná formulárom alebo parametrom v URL).

Anotácia DefaultHandler špecifikuje metódu, ktorá sa zavolá v prípade, že nebola vyvolaná žiadna udalosť. V tomto jednoduchom prípade vypíšeme na štandardný výstup správu a vrátime ForwardResolution, ktorý predstavuje presmerovanie na danú stránku (forward-presmerovanie znamená presmerovanie na strane servera, takže klient nespozoruje zmenu URL adresy v prehliadači).

Druhá metóda predstavuje reakciu na udalosť addBeer (tá je vyvolávaná tlačidlom formulára). V tomto prípade vykonáme RedirectResolution na danú stránku. Presmerovanie sa udeje u klienta, takže klientova nová adresa bude listBeers.jsp.

Inštančná premenná beer predstavuje objekt, na ktorý budú mapované parametre formulára. Stripes po odoslaní formulára vytvorí nový objekt typu Beer a na jeho inštančné premenné namapuje pomocou getterov a setterov príslušné údaje. (Používa sa bodková notácia - beer.name znamená nastavenie premennej name na objekte beer). Getter (getBeer()) a setter (setBeer) slúži na zabezpečenie prístupu k objektu beer.

>> Home