Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Apache Struts 1.1: rychlokurz psaní aplikací

Framework Struts z dílny Apache Software Foundation je značně obsáhlý. Udělat v něm jednoduchou aplikaci typu kniha návštěv není až tak přímočaré. Následující článek bude takový rychlokurz psaní aplikací ve Struts.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Minule jsme si něco řekli o presentaci pomocí JSP stránek. Dnes konečně hodíme oko na vlastní programování. Budeme se totiž zabývat dvěma zbývajícími vrstvami – controller a model.

Srdcem celé aplikace je ActionServlettřída (resp. servlet). Patří do vrstvy controller. Jeho úkolem je vytvářet instance akčních tříd (action classes) a rozdělovat jim práci. Každý HTTP dotaz tedy musí projít přes ActionServlet. Pro většinu aplikací stačí základní implementace přímo z knihovny Struts. Pokud byste však chtěli mít ActionServlet vlastní (chtěli byste např. sledovat uživatele), nic vám nebrání využít dědičnosti a snadnou modifikací souboru web.xml nastavit aplikaci tak, aby jej používala.

Jelikož je pochopení ActionServletu (AS) důležité, budeme se mu nyní věnovat. Při prvním dotazu se AS nejprve inicializuje, protože se jedná o obyčejný HttpServlet. Nejprve načte konfiguraci ze souboru struts-config.xml a ihned poté všechny lokalizační soubory. Následně nastaví svůj stav z konfiguračního souboru (obecné informace o sobě a mapování ActionServletů), zaktivuje všechny plug-iny (např. validator – o tom později) a nakonec aktivuje všechna databázová připojení, definovaná v konfiguračním souboru.

Pokud budete chtít přece jenom zasahovat do chodu AS, nemusíte hned vytvářet potomka. Do Struts 1.1 byla přidána pomocná třída RequestProcessor, která umožňuje jednoduše reagovat na některé události. Můžete tak nastavovat například locale nebo komunikovat s klientem na nízké úrovni.

Jestliže je AS srdcem, pak akční třídy jsou plícemi celé aplikace ve Struts. Právě pomocí nich provádíte vlastní „akci“ (v angl. business logic). Příkladem takové akce může být změna v nákupním koši e-obchodu. Akční třída bude (podle předaných parametrů) realizovat operace s JavaBeans objekty, ukládat data do relační databáze a vracet výsledky. Takovými akcemi by mohlo být například přidání zboží, odebrání produktu a zaplacení.

Akci implementujme tak, že vytvoříme potomka třídy Action a překryjeme metodu execute (ve verzi 1.0 to byla metoda perform, ta se ale nyní nedoporučuje používat). Metoda execute dostane k dispozici informace o stavu aplikace, chybový objekt pro hlášení chybových stavů, JavaBean objekt představující formulář (pokud na stránce nějaký byl) a samozřejmě servletové objekty request a response. Typická akce tedy načte hodnoty z formulářového JavaBeanu a provede příslušné kroky.

Co je skvělé, je to, že formulářové JavaBeans (tzv. FormBeans) jsou vytvářeny a mapovány automaticky. Jakmile vytvoříte formulář, musíte vytvořit i FormBean a uvést ho v konfiguračním souboru. Prozatím FormBean musíte napsat ručně, ovšem vývojáři slibují, že dají brzy k dispozici utilitu, které předáte HTML s formulářem a ona FormBean vytvoří automaticky. Zdá se to pracné, v konečném výsledku ale bude veškerá práce s formuláři hrozně jednoduchá – budete prostě jen zjišťovat atributy objektu JavaBean. Řetězec načtete snadno, rozevírací seznam dostanete v podobě kolekce a třeba soubor budete číst pomocí třídy InputStream tak snadno, jako byste ho otevírali na lokálním disku.

Posledním střípkem ve skládance je volání akčních tříd. Musíte vytvořit mapování akcí (action-mapping). Stejně jako pro databázová připojení, FormBeans či lokalizační konstanty to provedete v konfiguračním souboru struts-config.xml. Například akční třídu ModifyCartAction „namapujete“ na URL /store/cart/mo­dify.do. Je zvykem akce pojmenovat s koncovkou .do, aby AS mohl jednoduše rozpoznat, že se jedná o akci. Jinak byste to totiž museli dělat ručně, tj. pro všechny akce vytvořit záznamy ve web.xml, což by bylo nepříjemné.

Podívejme se na příklad. Vytvořme akční třídu AddPersonAction a formulář PersonForm. Na stránce add_person.jsp nechť je HTML formulář pro přidání člověka (například). Po stisku tlačítka Přidej bude zavolána adresa /add_person.do, která bude namapována na akční tříídu AddPersonAction. Ještě než akci AS vyvolá, převede data z formuláře do podoby PersonForm (díky mapování form-mapping). Programátor si v akční třídě pohodlně vyzvedne data, provede například zápis do databáze a přesměřuje uživatele na jinou stránku.

Tabulka č. 427
<?xml version=„1.0“ encoding=„UTF-8“?>
<struts-config>



  <form-beans>
      <form-bean
          name=„PersonForm“
          type=„cz.firma­.PersonForm“/>
  </form-beans>

 

  <!-- priponu .do prida AS automaticky -->
  <action-mappings>
      <action
          path=„/add_person“
         

name=„PersonForm“
          type=„cz.firma­.AddPersonActi­on“
          input=„/add_per­son.jsp“>
          <forward name=„Success“ 

            path=„/index.jsp“ />
      </action>
  </action-mappings>



</struts-config>

 
Ukázka konfigurace Struts  (struts-config.xml)

Bohužel se zde nemůžeme zabývat přílišnými detaily. Třída PersonForm je obyčejnou třídou JavaBean. Co políčko na HTML formuláři, to vlastnost objektu JavaBean. Akční třídu si jistě dovedete také snadno představit. Je to potomek třídy Action implementující metodu execute. Vrací URL, na kterou má AS klienta přesměřovat. Podle výsledku operace se tedy akční třída rozhodne, co vrátit. S výhodou se zde využívá tzv. forward-mapování, kterým se ale nebudeme zaobírat. V podstatě jde o to, vrátit instanci třídy ActionForward, kterou ovšem můžete získat přímo z konfiguračního souboru. Ačkoliv je tento způsob při vytváření vašich prvních akcí trošku matoucí, po čase si na to zvyknete a přidávání záznamů do konfiguračního souboru se stane rutinní záležitostí. Naopak jistě oceníte zlepšení produktivity práce v oblasti vytváření akčních tříd. Struts samozřejmě obsahuje mnoho dalších témat. Takové stránkování výsledků, delegování akcí, vracení výsledků formou tabulek či zpracovávání výjimek, to jsou témata, která přesahují rámec článku. Struts je dobře dokumentován a tyto věci si případní zájemci již vyhledají sami. Chtěl jsem jen ukázat základní myšlenku systému Struts.

Ačkoliv mám s webovým programováním zkušenosti, ze začátku jsem hodně tápal. Nebyl jsem totiž zvyklý na takový způsob práce. Štvalo mě neustálé restartování JSP kontejneru kvůli častým změnám v konfiguračních souborech. Brzy jsem ale zjistil, že s narůstající složitostí projektu se vše vrátí i s úroky v podobě přehlednosti a škálovatelnosti.

Jsme v polovině seriálu! Příště si něco přečtete o skvělém plug-inu Validator a nakonec se zmíním o plug-inu Tiles a napovím vám, jak nejlépe Struts aplikace ladit.

jakarta.apache­.org/struts

Školení: TCP/IP na Linuxu I.

V tomto kurzu se seznámíte se síťováním v Linuxu na všech vrstvách. Ujasníte si možnosti použití Linuxu v roli klienta, serveru i routeru.

  • Počítačové sítě
  • Architektura TCP/IP
  • Ethernet
  • Protokol PPP
  • Protokoly IPv4 a IPv6
  • IP na ethernetu
  • IP routing
  • Chybové a řídící zprávy
  • Transportní protokoly
  • Překlady jmen a adres
  • Aplikace
  • Překlady síťových adres a proxying
  • Testování sítě
  • Aktuální situace na poli TCP/IP

Podrobnější informace a přihláška  

Ohodnoťte jako ve škole:
Průměrná známka 3,00

Přehled názorů

zajimave
Leos Literak 13. 5. 2003 09:50
Nový
└ 
Re: zajimave
lzap 13. 5. 2003 11:02
Nový
Taky zacinam experimentovat
Sigi 13. 5. 2003 13:30
Nový
└ 
Re: Taky zacinam experimentovat
lzap 13. 5. 2003 15:00
Nový
 
└ 
Re: Taky zacinam experimentovat
Pavel Kolesnikov 20. 5. 2003 10:40
Nový
akce a business logic
Pavel Kolesnikov 20. 5. 2003 10:55
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem