V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!

Struts

Z Multimediaexpo.cz

Verze z 10. 11. 2013, 21:30; Sysop (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Technologie Struts 1 (*[1]) byla vytvořena společnosti Apache (*[2]). Jedná se o free open-source framework pro vytváření webových aplikací a spadá do velkého balíků technologií Java Enterprise Edition. Struts 1 je převážně založen na technologiích JSP, servlety, JavaBeans a proto je i velice spjat s webovým kontejnerem.

Obsah

Výhody Apache Struts 1

Framework Struts má několik výhod, kterými může přispět při tvorbě kvalitní webové aplikace.

Nutí vás k dodržovat přesně stanovená pravidla

Ze začátku si budete myslet, že vás tato pravidla budou omezovat, ale Struts 1 je dobře navržený a efektivní.

Návrhový vzor MVC

Aplikace, které se píší pomocí frameworku Struts 1, jsou založeny na návrhovém vzoru MVC (Model-View-Controller).

  • Prezentační vrstva (View) je implementována použitím JSP a je zodpovědná za zobrazení výsledků k uživateli.
  • Řídící vrstvu (Controller) reprezentuje servlet ActionServlet a zachycuje všechny požadavky od uživatele a vybírá příslušné View na navrácení dat.
  • Model (Model) je implementován pomocí JavaBeans, obsahuje business logiku a používá se ke komunikaci s perzistentním uložištěm dat.

Tyto tři vrstvy jsou spojeny pomocí konfiguračního souboru (struts-config.xml). Framework používá tento soubor k vlastní inicializaci. Definují se v něm např. tyto prostředky:

  • Třídy akcí (Action classes), které volají aplikační logiku a přistupují k datům.
  • Výsledky pro přípravu pohledů (views) použitím různých technologií jako např. Java Server Pages, Velocity a FreeMarker.
  • Zachytávací filtry (interceptors), které mohou zachytit dotaz před a po jeho vlastním zpracování.

Lokalizace textů

Platí pravidlo, které říká, že texty nepatří do programů, ale do speciálního konfiguračního souboru. Struts vás budou motivovat, abyste tento standard dodržovali.

  • Lokalizace se vykonává pomocí souborů lokalizovaných zpráv, každý text nebo obrázek má svůj klíč.
  • Aplikace vybere správný soubor obsahující klíče a jim odpovídající položky pomocí nastavení Locales.
  • Můžeme si vytvořit soubor pro českou verzi i pro anglickou, a když nebude nalezen soubor s požadovaným jazykem, tak se může použít standardní.

Do souboru struts-config.xml umístíme tento element, tím připojíme zdroje, aby s nimi mohl kontejner pracovat. Když použijeme kromě atributu paramater (udává cestu k souboru .properties), atribut null, tak říkáme, že pokud se nenalezne hodnota s daným klíčem, místo chyby na server se zobrazí tento klíč.

<message-resources parameter="com/myapp/struts/ApplicationResource"/>

Do tohoto souboru properties vložíme obsah

welcome.title=Struts Application

Poté vložím do JSP tento obsah

<bean:message key="welcome.title"/>

Ošetřování formulářů

Vytvoříme html formulář pomocí JSP cystom tags a implementujeme ActionForm třídu, která kontroluje a validuje hodnoty ve formuláři. Pokud některá z hodnot není v pořádku, tak Struts za vás zobrazí formulář s vyplněnými hodnotami a chybovými hláškami.

Poolování připojení do databáze

Framework obsahuje jednoduchou implementaci rozhraní DataSource, která poolování provádí.

Jak pracuje Apache Struts 1

Následující postup se aplikuje, když klient odešle HTTP požadavek:

  • ActionServlet obdrží požadavek
  • struts-config.xml obsahuje detaily týkající se Actions, ActionForms, ActionMappings a ActionForwards
  • během startu ActionServlet přečte struts-config.xml a vytvoří databázi konfiguračních objektů

Když ActionServlet přijme požadavek, tak udělá tyto kroky:

  • sbalí se všechny hodnoty požadavku do JavaBeans třídy, která rozšiřuje ActionForm
  • rozhodne, která třída akce bude vyvolána ke zpracování požadavku
  • validuje vstupní data od uživatele
  • třída akce zpracuje požadavek s pomocí komponent modelu, model komunikuje s databází
  • po skončení zpracovávání požadavku Action třída vrátí ActionForward controlleru
  • na základce ActionForward controller vyvolá příšlušné view
  • http odpověď je poskytnuta uživateli zpět pomocí view komponent

Struktura složek

Webová aplikace se typicky skládá z hierarchické struktury složek. Kořenová složka hierarchie slouží jako kořen dokumentu pro webovou aplikaci. Pod kořenem se nachází složka WEB-INF (do této složky bychom měli umísťovat soubory, u kterých nechceme, aby byly vně aplikace). V této složce je umístěn i deskriptor (web.xml).
Další složka je WEB-INF/classes, která je použita pro servlety a pro třídy, které jsou použity ve webové aplikaci. Složka /classes musí obsahovat řádný popis podsložek, přesně podle jména balíčku. Druhou složkou je WEB-INF/lib, která obsahuje Java Archive (JAR) soubory pro umístění do aplikace, jako jsou například knihovny.

Deskriptor (web.xml)
Deskriptor je soubor, ve kterém je umístěna konfigurace webové aplikace. Kontejner nahrává deskriptor při svém spuštění. Deskriptor obsahuje tyto typy informací: inicializační proměnné, session konfigurace, deklaraci servletů, mapování servletů, posluchač životního cyklu aplikace, definování a mapování filtrů, MIME mapování, deklaraci uvítací stránky, chybové stránky, JNDI reference, Tag library mapování.

Aplikace „Hello World“

Nakonec si zkusíme vytvořit jednoduchou aplikaci „Hello World“, která ukáže základní fungování Struts 1. Doporučuji vývojové prostřední Netbeans, které mají výbornou podporu Struts 1, ve verzi 6.8 je Struts 1 již importována do vývojového prostředí a nabídne se Vám již nakonfigurovaná šablona. V Následujícím příkladu si ukážeme, jak nakonfigurovat jednoduchou akci a jednoduchý příklad jak načítat data z externího souboru (použití u lokalizace textu).

Pohled rozvržení souborů

web.xml

  • používá se ke konfiguraci servletu
  • welcom-file-list se používá k nastavení oficiální uvítací stránky
 <servlet>
     <servlet-name>action</servlet-name>
     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 </servlet>
 
 <servlet-mapping>
     <servlet-name>action</servlet-name>
     <url-pattern>*.kiss</url-pattern>
 </servlet-mapping>
 
 <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

index.jsp

  • JSP stránka, která je nastavená jako úvodní stránka
<jsp:forward page="/Welcome.kiss"/>

struts-config.xml

  • konfigurační soubor pro struts aplikaci
  • probíhá zde registrace JavaBeans objektů a mapování akcí
  • připojuje textové zdroje
<form-beans>
   <form-bean name="HelloWorldActionForm" type="com.myapp.struts.HelloWorldActionForm"/>
</form-beans>
 
<action-mappings>
   <action input="/index.jsp" name="HelloWorldActionForm" 
                path="/Welcome" scope="session"
                type="com.myapp.struts.HelloWorldAction">
        <forward name="success" path="/welcomeStruts.jsp" />
   </action>
</action-mappings>
 
<message-resources parameter="com/myapp/struts/ApplicationResource"/>

HelloWorldActionForm.java

  • JavaBeans objekt, který má jednu proměnnou a k ní zaregistrovaný setter a getter
public class HelloWorldActionForm extends org.apache.struts.action.ActionForm {
 
    private String message;
 
    public HelloWorldActionForm(){ }
 
    public String getMessage(){
        return message;
    }
 
    public void setMessage(String message){
        this.message = message;
    }
}

HelloWorldAction.java

  • akce obsahuje spustitelnou metodu, která obsahuje business logiku
  • přístup k HelloWorldActionForm je nastaven v atributu „name“ v v souboru struts-config.xml v elementu mapování akcí
  • „success“ je definová v elementu mapování akcí a odkazuje na adresu, na kterou se přesměruje
public class HelloWorldAction extends org.apache.struts.action.Action {
 
    private final static String SUCCESS = "success";
 
    @Override
    public ActionForward execute(ActionMapping mapping,ActionForm form,
        HttpServletRequest request,HttpServletResponse response) throws Exception {
        HelloWorldActionForm helloWorldForm = (HelloWorldActionForm) form;
        helloWorldForm.setMessage("Hello World!");
        return mapping.findForward(SUCCESS);
    }
}

welcomeStruts.jsp

  • zobrazí hodnotu JavaBeanu a zobrazí hodnoty z externího souboru
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
 
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
 
<html:html lang="true">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><bean:message key="welcome.title"/></title>
        <html:base/>
    </head>
    <body style="background-color: white">
 
        <h1><bean:write name="HelloWorldActionForm" property="message" /></h1>
        <h3><bean:message key="welcome.heading"/></h3>
        <p><bean:message key="welcome.message"/></p>
 
    </body>
</html:html>

Externí odkazy