Technologie Struts 1 byla vytvořena společnosti Apache. 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.

Struts
Logo
VývojářApache Software Foundation
Aktuální verze6.6.0 (20. července 2024)
PlatformaJava Virtual Machine
Vyvíjeno vJava
Typ softwaruwebový aplikační framework
Licencelicence Apache
Webstruts.apache.org
Některá data mohou pocházet z datové položky.

Výhody Apache Struts 1

editovat

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

Návrhový vzor MVC

editovat

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 úlož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ř. JavaServer Pages, Velocity a FreeMarker.
  • Zachytávací filtry (interceptors), které mohou zachytit dotaz před a po jeho vlastním zpracování.

Lokalizace textů

editovat

Platí pravidlo, které říká, že texty nepatří do programů, ale do speciálního konfiguračního souboru. Struts budou motivovat k dodržování tohoto standardu.

  • 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.
  • Lze 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 se umístí tento element, tím se připojí zdroje, aby s nimi mohl kontejner pracovat. Když se použije kromě atributu parameter (udává cestu k souboru .properties), atribut null, tak se tím říká, ž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 se vloží obsah

welcome.title=Struts Application

Poté se vloží do JSP tento obsah

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

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

editovat

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

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

editovat

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

Jak pracuje Apache Struts 1

editovat

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říslušné view
  • http odpověď je poskytnuta uživateli zpět pomocí view komponent

Struktura složek

editovat

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 by se měly umísťovat soubory, které nemají být 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) 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“

editovat

Lze si zkusit vytvoření jednoduchou aplikace „Hello World“, která ukáže základní fungování Struts 1. Hodí se 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 již nakonfigurovaná šablona. V následujícím příkladu je prezentováno, 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
  • welcome-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

<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 souboru struts-config.xml v elementu mapování akcí
  • „success“ je definována 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

editovat
(anglicky)