KIV/PIA – Semestrální práce Diskuzní fórum
Tomáš Časta(A10N0057P)
[email protected]
1. Architektura aplikace 1.1 MVC Model-view-controller (MVC) je softwarová architektura, která rozděluje datový model aplikace, uživatelské rozhraní a řídící logiku do tří nezávislých komponent tak, že modifikace některé z nich má minimální vliv na ostatní.
Obrázek 1: MVC (převzato ze zdrojak.root.cz) Model představují třídy uložené v balíčku beans, jsou to třídy ForumBean, UserBean, MessageBean, které odpovídají třem tabulkám v databázi MySQL. View vrstu tvoří JSP stránky umísteně v adresáři jsp. Vrstvu Controller tvoří třídy Servletu, v tomto případě při použití frameworku Stripes se jedná o třídy umístěné v balíčku actions, další pomocné třídy jsou v balíčku db a jsou to třídy pro práci s databázi, Forum, User, Message, které poskytují potřebné operace nad databází, jako jsou výběr, vkládání, editace a mazání řádků v tabulkách.
1.2 Diagram tříd Diagram tříd je velký a kdyby byl přidán do tohoto dokumentu, bylo by to nečitelné, tři odpovídající obrázky jsou umístěny ve stejném složce, jako tato dokumentace. Jsou to soubory beans.png, user.png, action.png, které odpovídají diagramu tříd v jednotlivých balíčcích.
1.3 Diagram případů užití Ukazuje jednotlivé uživatelské role a co mohou daní uživatele provádět za operace v aplikaci.
Obrázek 2: Diagram případů užití
1.4 Databázový model Představuje struktura tabulek v databázi. Význam jednotlivých položek je zřejmý z jejich názvu, každá tabulka obsahuje unikátní id a mezi tabulkami casta_message, casta_forum a casta_message, casta_user jsou vytvoření relace 1:N. První slouží k tomu, aby bylo poznat, do jakého fóra vzkaz patří a druhá k tomu, aby se dle id_user, tedy id autora příspěvku daly dohledat další informace o něm.
Obrázek 3: Databázový model
1.5 Framework Stripes Pro aplikaci jsem použil framework Stripes, vývoj s ním přináší určité změny oproti čistým Servletům, proto zde popíšu jak to funguje ve vytvořené aplikaci. První změna je v souboru web.xml, kde jsou nejdůležitější následující nastavení.
<param-name>ActionResolver.Packages <param-value>action <param-name>LocalePicker.Locales <param-value>en_US:UTF-8,cs_CZ:UTF-8 …........... Kde parametr ActionResolver.Package je důležitý pro nastavení jména balíčku, kde jsou třídy, které provádějí akce na stránce, jako je například mazání, editace, či zobrazování příspěvků, v podstatě
jsou to třídy, kde by bez použití Stripes byly třídy Servletu implementující metody, jako je doGet() a doPost(). Parametr LocalePicker.Locales je důležitý pro nastavené kódování a správného zobrazování češtiny v aplikaci. Jinak je soubor web.xml nastaven dle http://www.stripesframework.org/display/stripes/Quick+Start+Guide Třídy umístěné v balíčku action pak implementuji rozhraní ActionBean a místo implementace metod doGet(), doPost() a jiný implementujeme metody dle svého uvážení s tím, že jejich volání na stránce nám zajišťují anotace jako například @DefaultHandler, která se zavolá vždy. K přesměrování se používá metody ForwarResolution. Další věcí, kterou Stripes provádí v aplikaci je validace vstupních dat. Ta se provádí pomoc anotací @Validate. @Validate(required = true, minlength = 2, maxlength = 20) private String login Takto nadefinovaná anotace znamená, že položku login je nutno zadat a a musí být dlouhá od 2 do 20 znaků, pokud tomu tak není, nedojde k odeslání dat z formuláře, ani spuštění metody z ActionBean třídy. Aby vše fungovalo jak má, je nutné v jsp stránce použit Stripes tady, v tom případě následující. <stripes:form beanclass="action.RegistrationActionBean" focus="" > <stripes:text name="login" class="border"/> <stripes:errors field="login" /> …......................................... Tag stripes:error se pak stará o vypsání chyby, v případě, že zadaná data neodpovídají požadavků ve validaci. Text chyby je uložen v souboru StripesResources.properties v následujícím formátu. action.LoginActionBean.login.valueNotPresent=Musíte zadat login. action.LoginActionBean.login.valueTooShort=Login musí mít minimálně 2 znaky. action.LoginActionBean.login.valueTooLong=Login muí mít maximálně 20 znaků. Tyto věci z frameworku Stripes jsem použil, samozřejmě tomu umí ještě mnohem více, ale na to je třeba použít další externí knihovny.
1.6 Specifikace implementace Při rozhodování o problému, když dojde ke smazání uživatele zůstanou po něm příspěvky, jsem se rozhodl, je nemazat ale nastavit jako autora příspěvku uživatele s id=1 (lze změnit konstantu DEFAULT_USER), který se jmenuje uživatel_vymazán, přijde mi to lepší, než vymazat všechny jeho příspěvky, protože to by mohlo vadit při čtení fóra, když by čtenář vlastně nevěděl, jestli tam nechybí nějaké příspěvky, či jaký byl jejich obsah. Problémem by bylo, kdyby byl tento uživatel vymazán, ale ani administrátor by měl vědět, co dělá, stejně jako ten kdo se dostane do databáze a může tam libovolně mazat by měl vědět, co dělá.
2. Instalace 2.1 Přeložení
Pro přeložení je připraven antový skript build.xml. Ten se stará o samotný překlad a připojení všech použitých knihoven.
2.2 Nasazení na server Pro nasezení na server je připraven antový skript deploy.xml, který nahraje překompilované soubory a potřebné knihovny na server Tomcat. Před spuštěním aplikace je ještě nutné pustit antový skript db.xml, který vytvoří potřebné tabulky v databázi a naplní je daty. Ještě je nutné v souboru web.xml nastavit správné údaje pro připojení k databázi.
3. Uživatelská příručka 3.1 Nepřihlášený uživatel Používání aplikace je velmi jednoduché. Po zobrazení hlavní stránky můžete libovolně listovat seznamem všech fór a číst si všechny odpovědi k nim. Po kliknutí na jméno autora příspěvku se zobrazí informace o něm, spolu s vypočítaným věkem uživatele, pokud uživatel zadal datum svého narození. Pro využívání dalších funkcí, je nutné vytvořit účet (položka Registrovat v menu), nebo se přihlásit (položka Přihlásit se v menu)
3.2 Registrace Pro vytvoření uživatelské účtu musíte zadat požadované informace, jako je uživatelské jméno, heslo, email, krátké info o vás a vaše pohlaví. Můžete také zadat datum svého narození, pak bude ve vašem profilu zobrazen váš věk, tato volba není povinná, datum zadávejte ve formátu mm.dd.yyyy. Uživatelské jméno musí být být dlouhé 2 až 20 znaků a nesmí již být použito, heslo pak musí být dlouhé minimálně 6 znaků. Poslední co je nutné vyplnit je ochrana proti spamu, které spočívá v jednoduchém početním příkladu.
3.3 Přihlášený uživatel Jako přihlášený uživatel můžete provádět vše, co nepřihlášený uživatel a můžete navíc vytváře nová fóra a přidávat k nim vaše odpovědi. Po ukončení činnosti se odhlašte (položka Odhlásit se v menu).
3.4 Administrátor Jako administrátor máte všechny výše popsané možnosti a může navíc libovolný vzkaz smazat (kliknutím na smaž), nebo editovat (kliknutím na edituj). V případě, že mazaný příspěvek ve fóru bude poslední, bude smazáno i celé fórum. Další možnosti je smazání celého fóra, včetně všechny příspěvků v němu. Administrátor může také vidět profily všech uživatelů a mazat je, po smazání uživatele nedojde ke smazání jeho příspěvků, ale bude jako autor u nich uvedeno uživatel vymazán.
4.Závěr Semestrální práce mi pomohla seznámit s vývojem webových aplikací v Javě, s čímž jsem doposud neměl zkušenost. Ze začátku jsem měl problémy s nastavením frameworku Stripes a chvíli mi trvalo, než jsem do něj proniknul, ale v konečném důsledku mi určitě ušetřil práci. Práce dle mě splňuje požadavky určené v zadání a je plně funkční.