Hlavní menu

Nástroje

SlovnikTerminologie / JemnyUvodDoAplikace

View (print) - Edit page | Recent changes - Page history

Updated 20 February 2014, 00:16 by JR

SlovnikTerminologie.JemnyUvodDoAplikace History

Show minor edits - Show changes to markup

20 February 2014, 00:16 by JR -
Changed lines 309-311 from:
to:
02 February 2014, 23:54 by MartinKozisek -
Changed lines 249-250 from:

Poznámka: Pro testování je možné nastavit u tagu dwr:controller debug na true. V takovém případě je generována stránka na pro testování příslušných metod na adrese /dwr/index.html. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na false.

to:

Poznámka: Pro testování je možné nastavit u tagu dwr:controller debug na true. V takovém případě je generována stránka pro testování příslušných metod na adrese /dwr/index.html. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na false.

02 February 2014, 23:53 by MartinKozisek -
Changed lines 249-250 from:

Poznámka: Pro testování je možné nastavit u tagu dwr:controller debug na true. V takovém případě je generována stránka na pro testování na příslušných metod na adrese /dwr/index.html. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na false.

to:

Poznámka: Pro testování je možné nastavit u tagu dwr:controller debug na true. V takovém případě je generována stránka na pro testování příslušných metod na adrese /dwr/index.html. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na false.

02 February 2014, 23:52 by MartinKozisek -
Added lines 249-250:

Poznámka: Pro testování je možné nastavit u tagu dwr:controller debug na true. V takovém případě je generována stránka na pro testování na příslušných metod na adrese /dwr/index.html. Je ale důležité, aby nasazená aplikace měla tento debug mód nastavena na false.

23 May 2013, 20:35 by MartinKozisek -
Changed lines 114-115 from:

Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

to:

Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller (mapování URL na controllery je ve spot-servlet.xml), který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

Deleted lines 310-311:
23 May 2013, 20:25 by MartinKozisek -
Changed lines 90-91 from:

V současné době má datový model okolo 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.

to:

V současné době má datový model okolo 27 tabulek.

23 May 2013, 20:23 by MartinKozisek -
Changed lines 46-47 from:

Je více méně na vás, jaké IDE si zvolíte. Ať už Netbeans nebo Eclipse (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

to:

Je více méně na vás, jaké IDE si zvolíte. Ať už Netbeans nebo Eclipse (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás. Vhodné je použití Spring Tool Suite, což je vývojové prostředí založené na Eclipse, které usnadňuje vývoj aplikací s využitím Spring frameworku, Mavenu atd.

31 March 2013, 21:06 by MartinKozisek -
Added lines 25-26:
17 April 2010, 14:36 by JanSobisek -
Changed lines 51-52 from:

Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci eclipse-zkratky.txt

to:

Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci eclipse-zkratky.txt, další zajímavé informace na http://tipy.kiv.zcu.cz

06 December 2009, 17:48 by JanSobisek a RomanKunes -
Added line 249:
Changed lines 252-255 from:

Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb StaticPageControlleru. Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru spot-servlet.xml

to:
  • Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb StaticPageControlleru. Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru spot-servlet.xml
  • Snažte se psát v rámci možností validní HTML a validní CSS kód.
03 December 2009, 03:18 by JanSobisek a RomanKunes -
Added lines 65-70:

SVN pluginy pro eclipse

  • Subclipse - http://subclipse.tigris.org/
  • Subversive - http://www.eclipse.org/subversive/

v případě prioblémů zkuste navštívit http://wiki.eclipse.org/SVN_Howto

Changed lines 73-74 from:
to:

Netbeans IDE maji plugin pro SVN defaultně zabudovaný.

03 December 2009, 03:11 by JanSobisek a RomanKunes -
Added lines 51-52:

Nejčastější klávesové zkratky, které mohou výrazným způsobem urychlit práci eclipse-zkratky.txt

03 December 2009, 03:06 by JanSobisek a RomanKunes -
Deleted line 241:
Added lines 243-245:

Nastaveni kontrolerů pro poskytování statických stránek a namapováni jednotlivých kontrolerů na URL se nachází v souboru spot-servlet.xml

30 November 2009, 23:59 by JanSobisek a RomanKunes -
Changed lines 96-102 from:

S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace.

to:

S principiálním popisem začnu od pohledu uživatele.

  1. Tomu přijde do browseru html kód, které umí browser zobrazit.
  2. HTML kód se odešle ze servletového kontejneru po příchozím requestu.
  3. Servletový kontejner vytváří tento zmiňovaný kód ze servletů.
  4. Ty získává dynamicky překladem jsp stránek na servlety.

A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace.

30 November 2009, 23:56 by JanSobisek a RomanKunes -
Changed lines 90-94 from:
  • spot-servlet.xml - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator.
  • applicationContext.xml - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties přes PropertyPlaceholderConfigurator, beana pro messages aplikace a beana business logiky DictionaryManager.
to:
  • spot-servlet.xml - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator.
  • applicationContext.xml - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties přes PropertyPlaceholderConfigurator, beana pro messages aplikace a beana business logiky DictionaryManager.
30 November 2009, 23:54 by JanSobisek a RomanKunes -
Changed lines 81-84 from:

Implementace aplikace

Dodržujte prosím ImplementacniKonvence. Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování javadocu příkazem mvn javadoc:javadoc, který se defaultně vygeneruje do ./target/site/apidocs

to:

Implementace

  1. Dodržujte prosím ImplementacniKonvence.
  2. Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování javadocu příkazem mvn javadoc:javadoc, který se defaultně vygeneruje do ./target/site/apidocs

Konfigurační soubory

Added lines 94-95:

MVC - Model-view-controller

Changed lines 129-130 from:

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru AdminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter, který má 3 metody - preHandle(HttpServletRequest request, HttpServletResponse response, Object handler), postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) a afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například AuthInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru AdminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

to:

interceptory

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru AdminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter, který má 3 metody:

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex).

Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například AuthInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru AdminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Controllery

Added line 173:

DAO

30 November 2009, 23:35 by JanSobisek a RomanKunes -
Added lines 35-36:

Snažte se prosím tyto rady dodržovat a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).

Changed lines 77-78 from:

Jemné seznámení s datovým modelem

to:

Datový model

Changed lines 81-84 from:

Princip implementace aplikace

dodrzovat ImplementacniKonvence

to:

Implementace aplikace

Dodržujte prosím ImplementacniKonvence. Pro snažší zorientování ve třídách a metodách je doporučeno vygenerování javadocu příkazem mvn javadoc:javadoc, který se defaultně vygeneruje do ./target/site/apidocs

Changed lines 220-221 from:

Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).

to:
30 November 2009, 23:14 by JanSobisek a RomanKunes -
Added lines 215-216:
  • Při změně hodnoty v některém property souboru je nutný restart servletového kontejneru, protože tyto hodnoty se načítají pouze při jeho startu.
30 November 2009, 23:02 by JanSobisek a RomanKunes -
Changed lines 185-186 from:

Tak toto byla asi nejtěžší část celého seznámení se SPOTem?. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.

to:

Tak toto byla asi nejtěžší část celého seznámení se SPOTem. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.

Changed line 193 from:

Logování

to:

Logování a komentáře

Added lines 196-197:

Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Postupem doby se došlo k doporučení používat ke komentářům sice češtinu, ale bez diakritiky. Vývoj SPOTu probíhá na operačním systému windows a linux, každý systém používá defaultně jiné kódování a i přes opratrnost v commitech se vyskytují neustále problémy s diakritikou ve zdrojových kódech. Čeština tedy bez diakritiky!

Changed lines 216-217 from:

Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.

to:

Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích (bez diakritiky).

30 November 2009, 22:50 by JanSobisek a RomanKunes -
Added lines 49-59:

IDE, nastavení kódování projektu

Linux

Nastavení kódování celého projektu v IDE je velice důležité. Pod operačním systémem linux je automaticky v IDE Netbeans i Eclipse nastaveno kódování projektu (a všech jeho souborů) na UTF8.

Windows

V případě použítí MS windows je situace závislá na konkrétním IDE:

  • Netbeans - automaticky nastaveno na UTF8
  • Eclipse - automaticky na Cp1250, je doporučená změna na UTF8. Pravým tlačítkem kliknout na vybraný projekt -> Resource -> Text file encoding a vybrat Other UTF-8. Nebo provést změnu globálně pro všechny projekty: nabídka Window -> Preferences -> General -> Workspace -> Text file encoding a vybrat Other UTF-8.
30 November 2009, 21:29 by JanSobisek a RomanKunes -
Added lines 194-201:

Tipy a triky

  • tipy a triky pro práci s databázi na stránce NavrhAplikace
  • Pro rychlejší vývoj na localhostu a hlavně zachování věrohodnosti statistik přístupu je doporučeno zakomentovat v ./src/main/webapp/WEB-INF/jsp/include/header.jsp:
    • tag <link href="http://www.google.com/uds/css/gsearch.css".../>
    • tag <script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0"...</script>
    • tag <script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=AB...</script>
24 November 2009, 14:57 by JanSobisek -
Added line 8:
 /scripts - obsahuje jednoduché skripty pro windows(bat) i linux(sh), spuštění aplikace, vytvoření war souboru, vytvoření dokumentace
23 November 2009, 18:47 by JanSobisek -
Changed lines 41-42 from:

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclipse (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

to:

Je více méně na vás, jaké IDE si zvolíte. Ať už Netbeans nebo Eclipse (případně IntelliJ Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

Added lines 46-48:

Tutoriál pro spustění aplikace naleznete na stránce NasazeniAplikace

SVN

Changed lines 52-53 from:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí Netbeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:

to:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí Netbeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:

  • otevřete Netbeans IDE
Changed lines 59-60 from:

Tutoriál pro spustění aplikace naleznete na stránce NasazeniAplikace

to:

Odkazy

  • http://cs.wikipedia.org/wiki/Subversion
  • http://merlin.fit.vutbr.cz/wiki/index.php/SVN_tutoriál
23 November 2009, 18:36 by JanSobisek -
Changed line 46 from:

Nastavení SVN pro Netbeans

to:

Nastavení SVN pro Netbeans

Added lines 56-57:

Tutoriál pro spustění aplikace naleznete na stránce NasazeniAplikace

23 November 2009, 18:15 by JanSobisek -
Changed lines 39-40 from:
to:

Nastavení IDE

Changed lines 43-58 from:

Instalace a spuštění postgresql databáze

Návod instalce je určen pro linux. Práce v psql konzoli je nezávislá na platformě.

$ sudo apt-get install postgresql         #yum install postgresql
$ sudo passwd postgres			   #Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart	   #Restartuje server
$ su postgres				   #Přihlášení jako administrátor databáze

$ createdb postgres		#vytvoří databázi nazvanou 'postgres'
$ psql postgres			#přihlášení do databáze 'postgres'
postgres=# ALTER USER postgres with password 'postgres';	#nastaví heslo uživateli 'postgres' v databázi na 'postgres'
postgres=# \i spot.sql    #provedení příkazů ze souboru, př. nahraje dump databáze projektu 

Nastavení IDE Eclipse

to:

Eclipse

Deleted lines 59-62:

Spuštění aplikace

Pro windows: turorial-spot-app-spusteni.zip [0,4 MB]

23 November 2009, 18:11 by JanSobisek -
Changed lines 38-57 from:

Konfigurace aplikace

Je potřeba mít nainstalovaný:

  • Java 5.0 nebo vyšší
  • Maven, ideálně 2.0.x
  • Postgresql 8.1 - na toto pozor! Při mém 1. deploy běžel SPOT nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1...- a to je více méně vše.

Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem.

  1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii.
  2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár konfiguračních souborů pro local:

./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)

./src/main/resources/WEB-INF/classes/log4j.properties - nastavení cesty, kam se budou zapisovat logy, případně velikost logovacího souboru.

./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

to:
22 November 2009, 17:54 by JanSobisek -
Changed lines 50-51 from:

Pro zdárný běh aplikace je potřeba nakonfigurovat pár konfiguračních souborů pro local:

to:

Pro zdárný běh aplikace je potřeba nakonfigurovat pár konfiguračních souborů pro local:

10 November 2009, 18:47 by roman85 -
10 November 2009, 18:47 by roman85 -
Changed lines 64-69 from:

[@$ sudo apt-get install postgresql #yum install postgresql $ sudo passwd postgres #Změní heslo uživaleli 'postgres' $ sudo /etc/init.d/postgresql-* restart #Restartuje server $ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvří databázi nazvanou 'postgres'

to:

[@$ sudo apt-get install postgresql #yum install postgresql $ sudo passwd postgres #Změní heslo uživaleli 'postgres' $ sudo /etc/init.d/postgresql-* restart #Restartuje server $ su postgres #Přihlášení jako administrátor databáze

$ createdb postgres #vytvoří databázi nazvanou 'postgres'

10 November 2009, 18:45 by roman85 -
10 November 2009, 18:45 by roman85 -
Changed lines 62-64 from:

Návod instalce je určen pro linux. Práce v psqlkonzoli je nezávislá na platformě.

[@sudo apt-get install postgresql #yum install postgresql

to:

Návod instalce je určen pro linux. Práce v psql konzoli je nezávislá na platformě.

[@$ sudo apt-get install postgresql #yum install postgresql

10 November 2009, 18:44 by roman85 -
Changed lines 61-63 from:

/sudo apt-get install postgresql \sudo passwd postgres #Změní heslo

to:

Návod instalce je určen pro linux. Práce v psqlkonzoli je nezávislá na platformě.

sudo apt-get install postgresql      #yum install postgresql
$ sudo passwd postgres			#Změní heslo uživaleli 'postgres'
$ sudo /etc/init.d/postgresql-* restart	#Restartuje server
$ su postgres				#Přihlášení jako administrátor databáze

$ createdb postgres		#vytvří databázi nazvanou 'postgres'
$ psql postgres			#přihlášení do databáze 'postgres'
postgres=# ALTER USER postgres with password 'postgres';	#nastaví heslo uživateli 'postgres' v databázi na 'postgres'
postgres=# \i spot.sql    #provedení příkazů ze souboru, př. nahraje dump databáze projektu 

10 November 2009, 18:29 by roman85 -
Changed lines 61-63 from:

sudo apt-get install postgresql sudo passwd postgres #Změní heslo

to:

/sudo apt-get install postgresql \sudo passwd postgres #Změní heslo

10 November 2009, 18:28 by roman85 -
Added lines 60-63:

Instalace a spuštění postgresql databáze

sudo apt-get install postgresql sudo passwd postgres #Změní heslo

05 November 2009, 18:38 by JanSobisek -
Added lines 19-21:
 /target - defaultní adresář pro vygenerovaný war soubor a vygenerovanou dokumentaci
   /site - adresář pro vygenerované stránky projektu
     /apidocs - pro javadoc
03 November 2009, 20:54 by JanSobisek -
Changed line 7 from:
 /logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
to:
 /logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
Changed line 9 from:
 /src - adresář obsahuje všechny zdrojové a konfigurační souboru.
to:
 /src - adresář obsahuje všechny zdrojové a konfigurační soubory.
Changed line 13 from:
     /WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
to:
     /WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
Changed line 16 from:
       /properties - obsahuje konfigurační properties soubory
to:
       /properties - obsahuje konfigurační properties soubory
Changed lines 38-45 from:
 * Java 5.0 nebo vyšší
 * Maven, ideálně 2.0.x
 * Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
 - a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:

to:
  • Java 5.0 nebo vyšší
  • Maven, ideálně 2.0.x
  • Postgresql 8.1 - na toto pozor! Při mém 1. deploy běžel SPOT nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1...- a to je více méně vše.

Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem.

  1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii.
  2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár konfiguračních souborů pro local:

Changed lines 124-125 from:

A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

to:

A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

03 November 2009, 20:24 by JanSobisek - pridany odkazy
Changed line 8 from:
 /sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
to:
 /sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
Changed line 14 from:
       /classes - obsahuje soubory s lokalizačními řetězci.
to:
       /classes - obsahuje soubory s lokalizačními řetězci.
Changed line 18 from:
   /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
to:
   /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
Changed lines 37-40 from:

Je potřeba mít nainstalovaný:

 - Java 5.0 nebo vyšší
 - Maven, ideálně 2.0.x
 - Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
to:

Je potřeba mít nainstalovaný:

 * Java 5.0 nebo vyšší
 * Maven, ideálně 2.0.x
 * Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
Changed lines 52-53 from:

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclise (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

to:

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclipse (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

Changed lines 67-72 from:

Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. TODO pridat datovy model

to:

Jemné seznámení s datovým modelem

V současné době má datový model okolo 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit.

Changed lines 85-86 from:

S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace. Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

to:

S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace. Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

31 October 2009, 18:21 by JanSobisek - doplneny odkazy
Added lines 77-79:
Changed lines 183-185 from:
to:

Zpracování vyjímek

31 October 2009, 18:05 by JanSobisek -
Added line 187:
Added line 193:
31 October 2009, 17:14 by JanSobisek - merge dokumentace se SVN doc
Added lines 37-43:

Je potřeba mít nainstalovaný:

 - Java 5.0 nebo vyšší
 - Maven, ideálně 2.0.x
 - Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
 - a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.
Added lines 52-53:

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclise (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

Added lines 67-72:

Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. TODO pridat datovy model

31 October 2009, 16:44 by JanSobisek - odkazy na jiz vytvorene stranky
Changed lines 166-168 from:

JSP

Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.

to:

Lokalizace v JSP

Samostatná stránka věnovaná lokalizaci aplikace SPOT.

Changed lines 175-176 from:

Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.

to:

Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.

19 September 2009, 15:02 by jsobisek - drobnosti
Changed lines 178-179 from:

Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.

to:

Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.

06 September 2009, 15:55 by jsobisek -
Changed lines 59-60 from:
to:

Pro windows: turorial-spot-app-spusteni.zip [0,4 MB]

06 September 2009, 15:53 by jsobisek -
Changed line 48 from:

Nastavení SVN pro NetBeans?

to:

Nastavení SVN pro Netbeans

Changed line 51 from:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans?. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:

to:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí Netbeans. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:

06 September 2009, 15:47 by jsobisek - Pridan tutorial pro ide netbeans pro linux
Changed lines 46-47 from:
to:

Pro windows i pro unix: turorial-spot-win32-ide-eclipse.zip [1,4 MB]

Changed lines 49-50 from:
to:
06 September 2009, 11:45 by jsobisek - Pridany tutorialy pro ide eclipse a spusteni aplikace
Added lines 45-47:

Nastavení IDE Eclipse

turorial-spot-win32-ide-eclipse.zip [1,4 MB]

Changed lines 57-59 from:
to:

Spuštění aplikace

turorial-spot-app-spusteni.zip [0,4 MB]

29 March 2009, 18:50 by H -
Changed line 47 from:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans?. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se sprovoznění nepovede, je to velmi jednoduché:

to:

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans?. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se zprovoznění nepovede, je to velmi jednoduché:

29 March 2009, 18:48 by H -
Changed lines 45-54 from:
to:

Nastavení SVN pro NetBeans?

Pro týmovou spolupráci je vhodné zprovoznit SVN pro prostředí NetBeans?. Pokud nemáte operační systém Windows Vista 64-bit, u kterého se sprovoznění nepovede, je to velmi jednoduché:

  • otevřete NetBeans? IDE
  • v Menu/Versioning klikněte na Checkout
  • ponechejte defaultní nastavení a stiskněte OK
  • opakujte bod 2
  • nastavte cestu uložiště, jméno a heslo
09 March 2009, 22:34 by Tomas Peterka -
Added lines 157-158:
21 February 2009, 20:47 by Tomas Peterka -
Changed lines 41-42 from:

./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.

to:

./src/main/resources/WEB-INF/classes/log4j.properties - nastavení cesty, kam se budou zapisovat logy, případně velikost logovacího souboru.

21 February 2009, 20:44 by Tomas Peterka -
Changed line 16 from:
       /properties - obsahuje velkou část konfiguračních properties souborů
to:
       /properties - obsahuje konfigurační properties soubory
Changed lines 23-37 from:

projekt, application

značka, tag, kategorie

úzus, usage

odkaz, link

typ zdrojů, source usages

komentář, comment

uživatel, user

to:
  • projekt, application
  • značka, tag, kategorie
  • úzus, usage
  • odkaz, link
  • typ zdrojů, source usages
  • komentář, comment
  • uživatel, user
21 February 2009, 20:43 by Tomas Peterka -
Added line 25:
Added line 27:
Added line 29:
Added line 31:
Added line 33:
Added line 35:
Changed lines 39-42 from:

SPOT - Slovník Překladů Odborné terminologie. úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.

to:
  • SPOT - Slovník Překladů Odborné terminologie.
  • úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.
21 February 2009, 20:42 by Tomas Peterka -
Changed line 88 from:

Nyní tedy konečně přichází ke slovu AdminUserController. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest request, HttpServletResponse response), která navrací ModelAndView?(mv)@]. ModelAndView'' slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp");

to:

Nyní tedy konečně přichází ke slovu AdminUserController. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest request, HttpServletResponse response), která navrací ModelAndView(mv). ModelAndView slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp");

Changed lines 109-110 from:

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager?@] je do adminUserControlleru@] injektován Springem, proto je v controlleru tento setter:

to:

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager je do AdminUserControlleru injektován Springem, proto je v controlleru tento setter:

21 February 2009, 18:47 by Tomas Peterka -
Changed lines 86-90 from:

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru adminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter?, který má 3 metody - preHandle(HttpServletRequest? request, HttpServletResponse? response, Object handler), postHandle(HttpServletRequest? request, HttpServletResponse? response, Object handler, ModelAndView? modelAndView) a afterCompletion(HttpServletRequest? request, HttpServletResponse? response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například authInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru adminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu AdminUserController?. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest? request, HttpServletResponse? response), která navrací ModelAndView?(mv). ModelAndView? slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView?("/WEB-INF/jsp/admin/admin-users.jsp"); A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

to:

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru AdminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter, který má 3 metody - preHandle(HttpServletRequest request, HttpServletResponse response, Object handler), postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) a afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například AuthInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru AdminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu AdminUserController. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest request, HttpServletResponse response), která navrací ModelAndView?(mv)@]. ModelAndView'' slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView("/WEB-INF/jsp/admin/admin-users.jsp"); A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

Changed lines 109-110 from:

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager? je do adminUserControlleru injektován Springem, proto je v controlleru tento setter:

to:

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager?@] je do adminUserControlleru@] injektován Springem, proto je v controlleru tento setter:

Changed lines 115-116 from:

Zpět k volání dictionaryManager.getAllUsers(). Podíváme-li se na implementaci rozhraní DictionaryManager?, nalezneme tam tento kód:

to:

Zpět k volání dictionaryManager.getAllUsers(). Podíváme-li se na implementaci rozhraní DictionaryManager, nalezneme tam tento kód:

Changed lines 121-122 from:

Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace UserDaoImpl? je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.

to:

Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace UserDaoImpl je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.

Changed lines 128-129 from:

Metoda getAllUsers() je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití UserRowMapper?(). UserRowMapper? je vnitřní privátní třída třídy UserDaoImpl? a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty User.

to:

Metoda getAllUsers() je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití UserRowMapper(). UserRowMapper je vnitřní privátní třída třídy UserDaoImpl a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty User.

Changed lines 153-154 from:

Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.

to:

Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.

21 February 2009, 18:38 by Tomas Peterka -
Changed lines 49-54 from:
  • web.xml - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, context-param, servlet-mapping, taglibs a další.
  • spot-servlet.xml - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator?.
  • applicationContext.xml - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties a weight-votes.properties přes PropertyPlaceholderConfigurator?, beana pro messages aplikace a beana business logiky DictionaryManager?.
to:
  • web.xml - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, context-param, servlet-mapping, taglibs a další.
  • spot-servlet.xml - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator.
  • applicationContext.xml - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties přes PropertyPlaceholderConfigurator, beana pro messages aplikace a beana business logiky DictionaryManager.
21 February 2009, 18:37 by Tomas Peterka -
Changed lines 6-20 from:

/doc - tento adresář by měl obsahovat dokumentaci... /logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace /sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí. /src - adresář obsahuje všechny zdrojové a konfigurační souboru.

 /main
  /java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
  /resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
  /WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
   /classes - obsahuje soubory s lokalizačními řetězci.
   /jsp - obsahuje veškeré jsp soubory v daných podadresářích.
   /properties - obsahuje velkou část konfiguračních properties souborů
   /tld - potřebné tag libraries..
 /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.

/temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.

to:
 /doc - tento adresář by měl obsahovat dokumentaci...
 /logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace
 /sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí.
 /src - adresář obsahuje všechny zdrojové a konfigurační souboru.
   /main
     /java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
     /resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
     /WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
       /classes - obsahuje soubory s lokalizačními řetězci.
       /jsp - obsahuje veškeré jsp soubory v daných podadresářích.
       /properties - obsahuje velkou část konfiguračních properties souborů
       /tld - potřebné tag libraries..
   /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
 /temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.
Changed lines 39-44 from:

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local: ./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva) ./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru. ./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

to:

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local:

./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva)

./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru.

./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

21 February 2009, 18:32 by Tomas Peterka -
Changed lines 152-157 from:
to:

Logování

Když se dostanete k práci s neokomentovanou třídou, dookomentujte jí. Času je na to třeba minimum a když se nám pak předhodí log ze serveru s tím, že aplikace padá tehdy a tehdy, tak se alespoň bude dát z logu poznat, co se před spadnutím aplikace dělo a také proč spadla. Z toho plyne, ze nebude problém chybu opravit. Čtení logu má být jako čtení knihy s příběhem, v každé části by mělo být jasné co se děje.

Testování

Bylo by více než vhodné, aby jste při práci s třídami, na kterých budete pracovat, k nim rovnou psali alespoň základní testy. Netvrdím, že můj nástřel testů je dostačující, na druhou stranu ho lze použít jako vodítko.

Changed line 161 from:

Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb StaticPageControlleru?.

to:

Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb StaticPageControlleru.

21 February 2009, 18:22 by Tomas Peterka -
Deleted lines 4-28:

Co je potřeba mít nainstalované a v jaké verzi

Na tuto část je třeba dát si pozor. Když jsme projekt přebíral já, tak to vypadalo tak, že jsem se sešel s mým předchůdcem a ten mi řekl, že to běží nad Postgresql, používá se tam to to to a to, ale už neřekl nic o verzích. To, že jsme vyvíjel na nejnovějších verzích se mi následně vymstilo při deployi aplikace o půl roku později... Věnujte tedy prosím tomuto dokumentu pozornost a nezapomeňte jej pravidelně aktualizovat.

Je potřeba mít nainstalovaný:

 - Java 5.0 nebo vyšší
 - Maven, ideálně 2.0.x
 - Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
 - a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local: ./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva) ./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru. ./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

IDE

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclise (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. Pokud se podaří, bude externě dodáno schéma, na kterém bude jasně vidět, co s čím a jak je propojeno.

Bohužel vás asi jen odkážu na komentáře u jednotlivých tabulek a vaši fantazii. Bez ERA modelu, na který nemám čas, toho asi moc nepopíši.

Changed lines 10-18 from:
    /main
	 /java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
	 /resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
		/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
			/classes - obsahuje soubory s lokalizačními řetězci.
			/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
			/properties - obsahuje velkou část konfiguračních properties souborů
			/tld - potřebné tag libraries..
    /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
to:
 /main
  /java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
  /resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
  /WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
   /classes - obsahuje soubory s lokalizačními řetězci.
   /jsp - obsahuje veškeré jsp soubory v daných podadresářích.
   /properties - obsahuje velkou část konfiguračních properties souborů
   /tld - potřebné tag libraries..
 /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.
Deleted line 20:
Changed lines 37-44 from:
to:

Konfigurace aplikace

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local: ./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva) ./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru. ./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

21 February 2009, 18:18 by Tomas Peterka -
Added lines 1-175:

Jemný úvod od aplikace

Tento dokument má za cíl sloužit jako pomocník pro "rychlé" zorientování se ve aplikaci a její architektuře.

Co je potřeba mít nainstalované a v jaké verzi

Na tuto část je třeba dát si pozor. Když jsme projekt přebíral já, tak to vypadalo tak, že jsem se sešel s mým předchůdcem a ten mi řekl, že to běží nad Postgresql, používá se tam to to to a to, ale už neřekl nic o verzích. To, že jsme vyvíjel na nejnovějších verzích se mi následně vymstilo při deployi aplikace o půl roku později... Věnujte tedy prosím tomuto dokumentu pozornost a nezapomeňte jej pravidelně aktualizovat.

Je potřeba mít nainstalovaný:

 - Java 5.0 nebo vyšší
 - Maven, ideálně 2.0.x
 - Postgresql 8.1 - na toto pozor! Při mém 1. deployi SPOT běžel nad postgres 7.4 a kvůli mě a mým předchůdcům se překlápěl na 8.1  ...
 - a to je více méně vše. Nyní to záleží na zvycích vývojáře jak to vyřeší se servletovým kontejnerem. 1. volbou je využívat pluginu do mavenu jetty, o používání více v dokumentu popisTechnologii. 2. volbou je mít "nainstalovaný" servletový kontejner Tomcat a nebo Jetty, na kterých SPOT určitě běží. A poslední možností je používat spouštění aplikace z IDE. Předchůdci vyvíjeli v eclipse a zásadně buildili z něj.

Pro zdárný běh aplikace je potřeba nakonfigurovat pár souborů pro local: ./src/main/resources/WEB-INF/properties/jdbc.properties - přístup k postgresql(heslo a jméno databáze a uživatele, který k ní má práva) ./src/main/resources/WEB-INF/classes/log4j.properties - nastavit cestu, kam se budou zapisovat logy, případně velikost logovacího souboru. ./src/main/resources/WEB-INF/classes/spot.properties - různé možnosti nastaveni vlastní aplikace.

IDE

Je více méně na vás, jaké IDE si zvolíte. Ať už NetBeans? nebo Eclise (případně IntelliJ? Idea nebo jiné) nabízí nepřeberné množství různých pluginů, které nám mají usnadnit práci. Dají se nainstalovat pluginy pro práci s Mavenem, Springem aj. Tato volba je opravdu jen na vás.

Jemné seznámení s datovým modelem.

V současné době má datový model 20 tabulek. Avšak v blízké či vzdálenější budoucnosti je v plánu tento stav o pár dalších rozšířit. Pokud se podaří, bude externě dodáno schéma, na kterém bude jasně vidět, co s čím a jak je propojeno.

Bohužel vás asi jen odkážu na komentáře u jednotlivých tabulek a vaši fantazii. Bez ERA modelu, na který nemám čas, toho asi moc nepopíši.

Adresářová struktura

/doc - tento adresář by měl obsahovat dokumentaci... /logs - sem se mohou(podle nastavení v log4j.properties) zapisovat logy aplikace /sql - obsahuje sql scripty pro vytvoření potřebných tabulek a sekvencí. /src - adresář obsahuje všechny zdrojové a konfigurační souboru.

    /main
	 /java/cz/zcu/kiv/spot - adresář, kde se nachází veškeré zdrojové kódy.
	 /resources/static - adresář s javascripty, potřebnými obrázky a kaskádovými styly.
		/WEB-INF - adresář jako takový obsahuje konfigurační soubory pro spring + web.xml.
			/classes - obsahuje soubory s lokalizačními řetězci.
			/jsp - obsahuje veškeré jsp soubory v daných podadresářích.
			/properties - obsahuje velkou část konfiguračních properties souborů
			/tld - potřebné tag libraries..
    /test/java/cz/zcu/kiv/spot - adresář obsahující veškeré testy aplikace.

/temp - obsahuje vzorové soubory pro import slov ze souboru a je pracovním adresářem při hromadném importu slov.

Jmenné konvence

Tato kapitola je v rámci SPOTu? docela problémová. Člověk se v aplikaci může setkat s tím, že jeden termín má i 3 ekvivalentní výrazy. Tomuto bych zde rád věnoval pár řádků. Zde jsou uvedená některá synonyma, na která jsem si vzpomněl:

projekt, application značka, tag, kategorie úzus, usage odkaz, link typ zdrojů, source usages komentář, comment uživatel, user

Význam některých výrazů:

SPOT - Slovník Překladů Odborné terminologie. úzus - například angličtina může mít několik odnoží. Například je rozdíl mezi anglickou a americkou angličtinou. Tyto varianty angličtin pak nazveme úzusy.

Princip implementace aplikace

  • web.xml - kde jinde bych měl začít, když než u tohoto souboru. Jde o vstupní od do každé webové aplikace napsané v Javě. Definují se zde základní listenery, context-param, servlet-mapping, taglibs a další.
  • spot-servlet.xml - beany controllerů a interceptorů, beany pro namapovaní konkrétních částí URL patřičným controllerům, načtení spot.properties přes PropertyPlaceholderConfigurator?.
  • applicationContext.xml - beany pro transakce, DAO objekty, validátory, načtení jdbc.properties a weight-votes.properties přes PropertyPlaceholderConfigurator?, beana pro messages aplikace a beana business logiky DictionaryManager?.

S principiálním popisem začnu od pohledu uživatele. Tomu přijde do browseru html kód, které umí browser zobrazit. HTML kód se odešle ze servletového kontejneru po příchozím requestu. Servletový kontejner vytváří tento zmiňovaný kód ze servletů. Ty získává dynamicky překladem jsp stránek na servlety. A teď, po trochu nudném úvodu, se dostáváme ke kořenu věci, tedy k tomu, jakým způsobem nám Spring zajistí propojení celé aplikace. Servletovému kontejneru přijde požadavek, který obsahuje informace ve stylu: "Pošli mi potřebná data pro toto URL: http://ip.adresa.servletové.kontejneru:port/spot/sprava/uzivatele". Spring ví, že s daným URL je provázán konkrétní controller, který se stará o to, aby byla uživateli poslaná potřebná data. Controller je vždy nadefinován ve své beaně.

<bean id="adminUsersController" class="cz.zcu.kiv.spot.controllers.AdminUsersController"> 
    <property name="dictionaryManager" ref="dictionaryManager" />
    <property name="pagingHelper" ref="pagingHelper" />
</bean>

Id značí unikátní jméno, pod kterým je daná beana známa ostatním beanám, class je cesta ke controlleru a property říká, že je závislá na těch daných beanách.

Toto provázání je zaznamenáno v beanách v souboru spot-servlet.xml. Konkrétně:

<bean id="urlAbcMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" abstract="false" singleton="true"
        lazy-init="default" autowire="default" dependency-check="default"> 
    <property name="interceptors">
      <list>
        <ref bean="settingInterceptor" />
	<ref bean="authInterceptor" /> 
      </list>
    </property>
    <property name="urlMap">
      <map>
	.
	.
        <entry key="/sprava/uzivatele" value-ref="adminUsersController" />
	.
	.       	    
      </map>
    </property>
    <property name="alwaysUseFullPath" value="true" /> 
</bean>

Jenže než přijde ke slovu konkrétní controller, tak v této beaně jsou přiřazeny 2 interceptory v části properties. Takovýto interceptor má na starosti provést implementovaný kód před tím, než předá řízení controlleru adminUserController. (Pozn.: tedy v případě,že interceptory jsou implementované ve spotu. Intercetpory dědí od HandlerInterceptorAdapter?, který má 3 metody - preHandle(HttpServletRequest? request, HttpServletResponse? response, Object handler), postHandle(HttpServletRequest? request, HttpServletResponse? response, Object handler, ModelAndView? modelAndView) a afterCompletion(HttpServletRequest? request, HttpServletResponse? response, Object handler, Exception ex). Ve Spotu je implementována pouze metoda preHandle().) Beana interceptoru vypadá podobně jako beana controlleru. Například authInterceptor se stará o jednoduché řízení přístupu k některým URL na základě práv, která mají jednotlivý uživatelé. Pokud průchod interceptorem skončí návratovou hodnotou true, předá se řízení controlleru adminUserController, jinak se (v naší implementaci) provede přesměrování na jiné URL a vyhození vyjímky.

Nyní tedy konečně přichází ke slovu AdminUserController?. Tento implementuje rozhraní Controller, který má k naimplementování pouze 1 metodu, tou je handleRequest(HttpServletRequest? request, HttpServletResponse? response), která navrací ModelAndView?(mv). ModelAndView? slouží k předávání objektů získaných například z databáze na základě požadavku uživatele. Tyto objekty se pak předají do patřičných jsp stránek a zobrazí uživateli. Patřičné jsp strámky jsou vždy uvedeny uvnitř controlleru. Příklad: mv = new ModelAndView?("/WEB-INF/jsp/admin/admin-users.jsp"); A nebo v případě nějaké chyby se do mv vloží Object reprezentující chybový stav. Tohoto je pak využito v kódu jsp stránek, kdy v případě, že došlo k nějaké chybě se vypíše chybová hláška například "error.unknow" na místo toho, aby se vypsala nekompletní data. Řetězec error.unknow je k uložen v souborech messages_xx.properties v různých jazykových mutacích.

try {
    /* Pokud bylo zadane nove heslo */
    if (!pass.equals("")) {
    	user.setNpass(user.getPass());
    }
    dictionaryManager.saveUser(user);
    mv.addObject("completeMsg", "editUser.complete");
}
catch (Exception e) {
    logger.error("V aplikaci doslo k nasledujici chybe: " + e);
    mv.addObject("errorViewMsg", "error.unknow");
    return;
}

Tak a nyní se dostáváme k tomu, jak se data z databáze dostanou ke controlleru.

List<User> users = dictionaryManager.getAllUsers();

Tento kousek kódu říká, že do daného Listu, se mají uložit všichni uživatelé. DictionaryManager? je do adminUserControlleru injektován Springem, proto je v controlleru tento setter:

public void setDictionaryManager(DictionaryManager dictionaryManager) {
    this.dictionaryManager = dictionaryManager;
}

Zpět k volání dictionaryManager.getAllUsers(). Podíváme-li se na implementaci rozhraní DictionaryManager?, nalezneme tam tento kód:

public List<User> getAllUsers() {
    return userDao.getAllUsers();
}

Z něho vidíme, že je třeba jít do datové vrstvy aplikace k DAO rozhraním a jejich implementaci. Implementace UserDaoImpl? je ta třída, která už komunikuje s databází.(Pozn.: S db komunikuje přímo jdbc, ale naše DAO jsou poslední z pohledu aplikace.) Pojďme se podívat jak přesně funguje.

public List<User> getAllUsers () {
    String sql = "SELECT * FROM users ORDER BY login";
    return getJdbcTemplate().query(sql, new UserRowMapper ());
}

Metoda getAllUsers() je přehledná. Nejdříve je popsán string, který představuje SQL dotaz nad databází. Následuje return, který navrací volání dotazu sql za použití UserRowMapper?(). UserRowMapper? je vnitřní privátní třída třídy UserDaoImpl? a zajišťuje namapování jednotlivých záznamů z tabulky "users" na doménové objekty User.

private class UserRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
	User user = new User();			
	user.setId(rs.getInt("users_id"));
	user.setLogin(rs.getString("login"));
	user.setPass(rs.getString("pass"));
	user.setFirstname(rs.getString("firstname"));
	user.setLastname(rs.getString("lastname"));
	user.setEmail(rs.getString("email"));
	user.setEmailpub(rs.getString("email_pub"));
	user.setHomepage(rs.getString("homepage"));
	user.setDescription(rs.getString("description"));
	user.setRights(rs.getInt("rights"));
	user.setActive(rs.getInt("active"));
	user.setActiveCode("active_code");
	return user;
    }
}

Tak toto byla asi nejtěžší část celého seznámení se SPOTem?. Doufám tedy, že jsem vám alespoň objasnil základní princip fungování aplikace. Na principu tohoto příkladu příkladu více méně funguje celá aplikace.

JSP

Cílem je, aby se veškeré zobrazované statické texty načítaly z messages_xx.properties, kde xx představuje danou jazykovou mutaci(cz, en a de). Tyto texty se snadno vypíší například přes <fmt:message key="index.jakPrispet.popis" />, kde index.jakPrispet.popis je záznam v messages_xx.properties a má přiřazen daný přeložený řetězec, který se vypíše. Volba příslušné jazykové mutace je závislá na aktuální uživatelově volbě.

Všeobecně

Zkuste psát minimálně dostačující dokumentační komentáře, které budou vašim následovníkům k něčemu a ne k ničemu. Stejně tak se snažte dodržet použité jmenné konvence a nevnášejte do aplikace ještě větší zmatek, než je v ní nyní ;) Dále by bylo více než vhodné třídy, metody a proměnné pojmenovávat anglicky a češtinu používat pouze v komentářích.

Pokud budete chtít přidat stránku se statickým obsahem, využijte služeb StaticPageControlleru?.