Seriál Webová aplikace v Javě od A do Z

V tomto seriálu si ukážeme, jak rozchodit webový systém naprosto od nuly, za použití těchto technologií: Java, Maven, Spring, Struts2, Hibernate, Oracle (nebo MySQL) a JQuery ve vývojovém prostředí Eclipse a serveru Tomcat.

V předchozích dílech tohoto seriálu jsme si připravili v Eclipse java projekt a nakonfigurovali Maven2 pro integraci externích knihoven do našeho projektu. Pro potřeby tohoto dílu budeme potřebovat do našeho projektu připojit framework Struts2. V minulém díle jsme tuto závislost do pom.xml již přidávali, přesto pro jistotu ještě jednou:

Obsah souboru pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>cz.atax</groupId>
<artifactId>base-maven</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
   <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.8</version>
    </dependency>
</dependencies>

</project>

Cíl

Zadat do webového prohlížeče konkrétní adresu, např. localhost:8095/Nu­llpointer/hello­World, která povede na stránku, kde nebude nic jiného než hláška Hello World.

Postup

  1. Vytvořit potřebné konfigurační soubory:

    a. struts.xml

    b. web.xml

  2. Vytvořit potřebné soubory pro vypsání hlášky:

    a. java třídu HelloWorldActi­on.java

    b. jsp soubor helloWorld.jsp

  3. Zprovoznit lokální server Tomcat a spustit na něm naši aplikaci – to vše přímo v Eclipsech

Ad 1) a. struts.xml

Nejdříve obsah souboru a posléze vysvětlím, o co tam jde:

Obsah souboru struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<package name="nullpointer" extends="struts-default">

        <action name="helloWorld" method="helloWorldMethod" class="cz.nullpointer.helloWorld.HelloWorldAction">
           <result name="success">helloWorld.jsp</result>
        </action>

</package>

</struts>

Soubor uložíme do source folder src/main/resou­rces pod jménem struts.xml. Tedy pravé tlačítko myši na folder src/main/resources v menu vybereme New…/Other…/Xml/XML file a do souboru zkopírujeme obsah uvedený výše. Soubor struts.xml je základ frameworku Struts2 a jeho pochopení je základ, který nám ovšem bude stačit i na mnohem složitější úkoly než Hello World. Důležitý je tento odstaveček:

<action name="helloWorld" method="helloWorldMethod" class="cz.nullpointer.helloWorld.HelloWorldAction">
        <result name="success">helloWorld.jsp</result>
</action>

Takže popořadě:

  • name=„helloWor­ld“: pokud bude požadavek v prohlížeči localhost:8095/Nu­llpointer/hello­World, bude se používat toto mapování.
  • method=„hello­WorldMethod“ a class=„cz.nullpo­inter.helloWor­ld.HelloWorldAc­tion“>: pro zpracování požadavku se bude volat metoda helloWorldMethod v java třídě cz.nullpointer­.helloWorld.He­lloWorldAction (zatím nemáme vytvořené, viz níže)
  • <result name=„success“>he­lloWorld.jsp</re­sult>: vrátí-li metoda helloWorldMethod řetězec „success“ zobrazí se v prohlížeči jsp soubor helloWorld.jsp (což je v podstatě takové obohacené html, viz níže).

Ad 1) b. web.xml

Pokud jste správně prošli předchozími kroky tohoto seriálu, měli byste mít již soubor web.xml ve vašem projektu, konkrétně ve složce WEB-INF. Pokud ne, vytvořte jej. Smažte jeho případný obsah a vložte do něj tento:

Obsah souboru web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

V tomto souboru lze provádět spoustu různých užitečných konfigurací, to však není předmětem našeho seriálu. Stručně se dá říct, že jsme zde řekli, ať všechny požadavky v url zpracovává Struts2 (a tím přijdou na řadu struts.xml) a to nám (nejen) pro Hello World bohatě stačí.

Ad 2) a. Java třída HelloWorldActi­on.java

V source folderu src/main/java vytvoříme package cz.nullpointer­.helloWorld a v něm třídu HelloWorldActi­on.java. Do něj zadáme tento obsah :

Obsah souboru HelloWorldActi­on.java

package cz.nullpointer.helloWorld;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

        public String helloWorldMethod() {
                return SUCCESS;
        }
}

Důležitá je metoda:

public String helloWorldMethod() {
        return SUCCESS;
}

Tato metoda nedělá nic jiného, než že vrací String konstantu SUCCESS, na kterou máme namapováno naše jsp (ještě není vytvořené, viz níže). Nyní není potřeba, aby se zde dělo cokoliv jiného, ale v běžném vývoji zde samozřejmě probíhá načítání potřebných dat pro zobrazení jsp (stránky), typicky načítání dat z databáze. Asi není třeba dodávat, že tohle je přesně ta třída a metoda (HelloWorldAction a helloWorldMethod), kterou jsme zmiňovali výše v našem struts.xml (viz bod 1) a.)

Ad 2) b. jsp soubor helloWorld.jsp

Než vytvoříme jsp helloWorld.jsp, je důležité vědět, kde je root, kam se struts2 defaultně dívá po jsp a kam tedy máme jsp soubor uložit. Možná jste si všimli, že ve struts.xml jsme uvedli pouze helloWorld.jsp, žádnou cestu, žádné složky. To znamená, že se jsp bude hledat v defaultní složce, což je ../WEB-INF (nadřazený WEB-INF, čili jsp musí být ve stejné složce jako je složka WEB-INF). Tam se budou hledat v prvé řadě jsp soubory. V konfiguraci Struts2 lze samozřejmě tuto cestu změnit, ale tím se nyní nebudeme zabývat. Vytovříme tedy soubor helloWorld.jsp s tímto obsahem:

Obsah souboru helloWorld.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<h1>Hello World!</h1>

Za komentář zde stojí možná jen <%@ taglib prefix=„s“ uri=„/struts-tags“%>. Tento zápis nám říká, že budeme v našem jsp používat struts2 tagy (některé nejtypičtější si ukážeme v dalším díle našeho seriálu), v současném jsp žádné Struts2 tagy nepoužíváme, vypisujeme jen Hello World v html nadpisu h1, ale radši jsem to uvedl již teď, ať na to pak nezapomeneme.

Ad 3) Zprovoznit lokální server Tomcat a spustit na něm naši aplikaci – to vše přímo v Eclipse

Nejdřív musíme stáhnout Tomcat na adrese http://tomcat.apache.org/ je v levé menu sekce download. Stáhněte nejnovější verzi (v tomto článku používám verzi Tomcat 7) a uložte jej na disk. V současné době lze již stáhnout verzi Tomcatu 8, ale zdá se, že jej Eclipse ve verzi jakou používám (viz předchozí díl seriálu) nepodporuje. Nyní přidáme Tomcat do Eclipse. V Eclipse dáme v menu Window/Show view…/Other/Ser­ver/Servers a tím si v prostředí trvale zobrazíme záložku Servers (záložka se ve spodní části vývojového prostředí). V ní by mělo být napsáno zhruba následující: No servers available. Define a new server from the new server wizard… Klikneme tedy na odkaz new server wizard. Objeví se dialogové okno, kde zvolíme Apache/Tomcat [VERZE] a klikneme na tlačítko Next. Eclipse bude chtít vědět cestu k Tomcatu, zadejte tedy umístění, kam jste Tomcat před chvíli nahráli. Zase Next. Nyní chce Eclipse vědět, které projekty chcete pod server umístit. Ve sloupci Available by měl být pouze jeden, náš projekt, klikněte na něj a pak klikněte na tlačítko Add >. Projekt by se měl přesunout do sloupce Configured. Nyní můžeme dát Finish.

V záložce Servers v Eclipse by již nyní měl být vidět přidaný server. Já tam mám označení Tomcat v7.0 Server at localhost [Stopped, Synchronized]. Pokud nám nic neběží na portu 8080, můžeme vše nechat při defaultním nastavení, jinak musíme port změnit. Navrhuji v každém případě radši port změnit, abychom se vyhnuli současným a případně i budoucím konfliktům. Klikněte dvakrát na server Tomcat v7.0 Server at localhost… a objeví se konfigurace. Zde nalevo najdeme sekce Ports, kde je tabulka používaných portů, kde je mimo jiné i http/1.1 a port number 8080. Ten změníme na něco jiného, třeba 8095, ať to máte stejné jak v tomto příkladu a uložíme změny pomocí CTRL+S.

Dále je velmi důležité nastavit projektu správný context root. Nyní už jsme kousek od toho zadat do prohlížeče toto: localhost:8095/Nu­llpointer/hello­World a zobrazit si nadpis Hello World! (tedy naše jsp) v prohlížeči. Považuji za důležité si tuto adresu ještě krátce rozebrat.

  • localhost:8095 – localhost je default a 8095 je port, který jsme před chvíli nastavovali v Tomcat konfiguraci.
  • Nullpointer – to jsme zatím nikde nenastavovali, to je právě onen context root. Dejme pravé tlačítko myši na project, zvolme v menu Properties a najděme v levém menu Web project settings a klikněme na tuto položku. Zde nastavíme Context root, můžeme dát Nullpointer, jak používám v tomto příkladě.
  • helloWorld – máme nastaveno ve struts.xml (viz výše, řádek <action name=„helloWorld“)

Důležité – Deployment Assembly: nyní je ještě potřeba překontrolovat jednu věc. Klikněte pravým tlačítkem na projekt (v levém sloupečku) a zvolte Properties/De­ployment Assembly. V tabulce byste měli mít ve sloupci Source 4 záznamy: /src/main/java, /src/main/resou­rces, /src/test/java, /WebContent a Maven Dependencies. Ve sloupci Deploy Path byste měli mít (popořadě) následující: WEB-INF/classes (3×), /, WEB-INF/lib. O co tu jde? Tady se říká, do jaké struktury má Eclipse zbuildovat náš projekt. Nemusíte mít přesně stejnou strukturu, jakou jsem tady nastínil. Záleží např. na tom, jakou používáte Eclipse perspektivu, jakou máte verzi Eclipse (viz předchozí díly), jak moc důsledně jste dodrželi kroky z předchozích dílů našeho seriálu apod. Každopádně ve WEB-INF/classes by měly být java soubory + struts.xml (já jej mám v src/main/re­sources), Maven Dependencies ve WEB-INF/lib a v kořenové složce / by měla být složka, kde máme jsp soubory (v našem případě jeden jsp soubor helloWorld.jsp) a později třeba javascriptové knihovny a css. Pokud vaši strukturu nemáte v tomto duchu, pomocí tlačítka Add.. doplňte potřebné věci. Hlavně Maven Dependencies zde často chybí.

Nyní nezbývá nic jiného, než pustit server a modlit se. Server pustíme tak, že v Eclipse v záložce Servers klikneme pravý tlačítkem myši na Tomcat v7.0 Server at localhost [Stopped, Synchronized] a zvolíme v menu Start nebo Debug (pro tuto chvíli je jedno co). Během pár vteřin by se měl server spustit, což uvidíme v Eclipse v záložce Console. Neměla by se tam objevit žádná chyba (Exception).

Zkuste si nyní spusti prohlížeč a zadat do adresního řádku localhost:8095/Nu­llpointer/hello­World. Vidíte text Hello World? Gratuluji, povedl se vám malý zázrak! A také jste úspěšně dokončili tuto část seriálu. Můžete si klidně vyzkoušet, že do jsp můžete vkládat libovolné html i css, jakoby to byl opravdu obyčejný html soubor.

Většinou se to hned napoprvé nepovede. Pokud se nepodařilo, pokusím se v následujícím odstavci poukázat na nejčastější chyby.

Nepovedlo se to rozjet?

V tomto případě po zadání adresy localhost:8095/Nu­llpointer/hello­World se určitě objeví chyba 404, že stránku nelze zobrazit.

  1. Zkontrolujte, že opravdu máte správně nastavený port (localhost:8095), context root (Nullpointer) a akci ve struts.xml (helloWorld, viz řádek <action name=„helloWorld“))
  2. Zkontrolujte v Eclipse konzoli, že se neobjevují žádné Exception. Pokud ano, zkuste následující:
    • zavřít a otevřít projekt (pravé tlačítko na projekt, Close Project/Open Project)
    • dejte pravé tlačítko na projekt a zvolte Refresh
    • dejte pravé tlačítko na server a zvolit možnosti Clean Tomcat Work Directory… a pak také ve stejném menu Clean…
    • v Eclipse nahoře v menu dejte Project/Clean/Cle­an all projects a rovnou zkontrolujte, jestli máte v nabídce Project zaškrtnuté Build Automatically
    • zkuste vypnout a znovu zapnout Eclipse a znovu provést refresh a cleanování. 
  3. Výjímka SEVERE: Exception starting filter struts2 java.lang.Clas­sNotFoundExcep­tion: org.apache.strut­s2.dispatcher­.ng.filter.Strut­sPrepareAndExe­cuteFilter: zkontrolujte, že máte v projektu (v levém sloupečku v Eclipse) Maven Dependencies. Pokud nemáte, nezafungoval maven a asi máte špatně pom.xml nebo špatně instalovaný maven plugin (viz předchozí díl tohoto seriálu). Pokud tam Maven Dependencies máte, zkuste v Eclipse pomocí CTRL+T vyhledat chybějící třídu org.apache.strut­s2.dispatcher­.ng.filter.Strut­sPrepareAndExe­cuteFilter. Pokud jste tuto třídu nenalezli, nejspíš vám v pom.xml chybí závislost na struts2 (viz začátek tohoto dílu). Pokud jste třídu nalezli, nejspíš je problém v chybějících Maven Dependencies v Deployment Assembly (viz pár odstavců výše).
  4. Pokud se stále Exception při startu objevuje, tak asi nezbývá než googlit nebo můžete napsat (např. do komentářů pod tento článek) váš problém (např. jakou Exception vám to háže při startu) a já vám mohu zkusit poradit a současně tím poté zkvalitnit tento odstavec.

Můžete také zkusit si na disku najít (po spuštění serveru, ať už úspěšném nebo neúspěšném) složku org.eclipse.wst­.server.core. Měla by být ve vašem workspace v cestě [CESTA_K_VASE­MU_WORKSPACE]/­.metadata/.plu­gins/ org.eclipse.wst­.server.core. Pokud tuto složku otevřete měla by tam být složka tmp0/ wtpwebapps a v ní složka Nullpointer (náš context root, viz výše). V této složce bychom měli najít další dvě složky Meta-inf a Web-inf a také naše jsp helloWorld.jsp. Sem totiž Eclipse zbuildoval (pokud se vše podařilo) náš projekt. Ještě můžeme zkontrolovat na tom stejném místě, že ve složce Web-inf/classes/cz/nu­llpointer/hello­World/ je zkompilovaná třída HelloWorldActi­on.class. Pokud tohle vše vidíme, tak build a deploy pod server proběhl v pořádku a chyba by měla být v zadávané adrese (špatný port, špatný název contextRoot, špatný název akce). Pokud to tam nevidíte, proběhl špatně build, nejspíš z důvodu nějaké Exception při startu serveru (vidíme v konzoli). Řešení Exception viz výše (bod 2.).

Závěr

Myslím, že to nejhorší máme v tomto seriálu za sebou a teď už přejdeme od nudných konfigurací k zábavnějším věcem. Ještě nás samozřejmě čeká konfigurace Springu a Hibernatu, ale to až přespříští díl. Příští díl si ukážeme základní využití Struts2 frameworku a seznámíme se s nejpoužívanějšími struts2 tagy.

Komentáře

~ před 4 lety

asi to ma vsechno smysl, ale aplikace Hello World na 100 radku me totalne od Javy odrazuje :-(

reagovat

Peter Láng před 4 lety

To celkem umím pochopit – kdybych si já chtěl hrát s Javou pokud možno bezbolestně, asi bych zkusil Play Framework. Koukal jsem na http://vimeo.com/58969923 a líbilo se mi to.

reagovat

karl před 4 lety

Pro začátečníky docela šílený postup…

Teď to srovnejte s tímto postupem:

  1. do souboru s názvem index.php napište: <?php echo ‚Hello world‘;
  2. soubor nahrajte do c:\xampp\htdocs\
  3. spusťte xampp, klikněte na Start Apache
reagovat

Lukáš Knápek před 4 lety

V Javě samotné by šlo Hello World samozřejmě napsat také mnohem rychleji. Myslím, že bych se asi taky vešel do třech bodů ;-) Tady se již ale používá Eclipse, Struts2, Maven a je zde nástin MVC architektury. Tyto technologie jsou určeny pro složitější aplikace (např. informační systémy) ne např. pro osobní stránky. A tento seriál má být průvodcem a rádcem pro vytvoření funkčního vývojářské prostředí např. pro nějakou enterprise aplikaci. Návod je navíc podrobný, protože se snažím v každém dílu seriálu vysvětlit každý krok. Tedy aby si u sebe čtenář nejen rozchodil Hello World, ale také alespoň trochu pochopil, jak to funguje „uvnitř“. A právě ona podrobnost podle mého soudu dělá tento seriál vhodný i pro začátečníka, alespoň doufám :-) Samozřejmě pro začátečníka, který má trochu času a chce tyto technologie poznat (nebo musí). Navíc myslím, že se některé informace mohou hodit i zkušenějšímu programátorovi, protože z mé vlastní zkušenosti má člověk tendenci některé věci zapomínat (přeci jen se tyto konfigurace nedělají každý den).

reagovat

Peter Láng před 4 lety

To nesrovnáváš správně, oproti seriálu ti něco málo chybí, namátkou:

  • framework nad jazykem
  • šablonovací jazyk
  • práce s databází
  • integrace s IDE
  • prostředí pro unit testy
  • prostředí pro debuggování

Jestli tohle všechno člověk zrovna potřebuje a jestli konkrétně to co je v tomto seriálu, je otazník, ale nesrovnávejme lopatu a bagr ;-)

reagovat

Dano před 4 lety

Pripajam sa k nazoru, ze na prezentaciu JEE ste si vybrali nevhodnu kombinaciu technologi. Bohate by stacil jetty plugin do mavena ako server, ked ste si vybrali spring, naco to komplikovat strutsom, ked Spring 3 MVC je tak krasne jednoduchy. Tento Vas serial vela ludi k Jave nepritiahne a podla mna ho nikto po Vas nezopakuje :(

reagovat

Lukáš Knápek před 4 lety

  • Nejedná se mi o prezentaci JEE, ani se nesnažím někoho přitáhnout k Javě, to není předmětem seriálu.
  • Není to nevhodná kombinace, neboť je používaná celkem dost v praxi (aspoň dle mých zkušeností).
  • Struts2 je také krásně jednoduchý :-) Dělal jsem chvíli i ve Spring MVC a oba frameworky mi přijdou podobné. Myslím, že Struts2 používá celkem dost uživatelů včetně mě, tak mělo smysl jej zařadit.
  • Já doufám, že kdo bude mít čas, chuť nebo potřebu, tak návod zopakuje. Tento seriál je podrobný, protože mi nejde jen o prosté rozjetí prostředí, ale snažím se také ukázat něco z vnitřní logiky.
reagovat

Matt před 4 lety

Mě se seriál líbí. Teď dělám ve strutsu 2 absolventku a řeším mnoho problému, ale čím více do toho pronikám, tím více se mi struts 2 líbí.Java SE je mnohem jednoduší, heloworld jde na 3 stisky kláves v Netbeans IDE, to je jasný, tady to je ale framework nad J2EE…Jak řikal Lukáš „Pro větší webový APPky“. Jen by tu toho mohlo být více, třeba o Interceptorech a Convetion pluginu..

reagovat

Lukáš Knápek před 4 lety

Děkuji za pozitivní reakci :-) Předmětem tohoto seriálu je především zprovoznění všech nástrojů a ukázat nejzákladnější použití, nechci jít příliš do hloubky, ani ve Struts2, ani ve Springu či Hibernatu. Něco o interceptorech ale časem určitě přidám, především vlastní login interceptor.

reagovat

Vojto před 4 lety

Chystáte aj pokračovanie seriálu?

reagovat

Lukáš Knápek před 4 lety

Určitě chystám, mám ještě naplánováno minimálně pět dílů a doufám, že aspoň jeden se mi podaří dopsat ještě do konce roku 2013 :-)

reagovat

Gogo před 4 lety

Zdravím, náhodou jsem narazil na tento seriál o programování v Java, musím říct že do teď jsem o Javě veděl jen to že existuje. Začal jsem s Javou seznamovat více méně donucen okolnostmi do teď mi stačlo PHP. Řekl bych že popis je připraven dost kvalitně pro absolutního laika v programování v Javě. Zkoušel jsem rozjet Hello World podle tohoto popisu na dvou strojích (v práci a doma) a po pár hodinovém laborování mi konečně napsalo v prohlížeči doma k mé velké radosti Hello World :) Pane Knápek určitě se nenechte odradit negativními příspěvky protože povaha lidská je taková že člověk většinou napíše jen kdyz se mu něco nelíbí. Mi se Váš seriál líbí moc jen by to chtělo trochu rychlejší vydávání dalších dílů ;) Přeji hodně trpělivosti při psaní dalších dílů. Je mi jasné že času nemá programátor dost nikdy a o to více oceňuji to že se o své zkušenosti podělíte s dalšími lidmi.

reagovat

Lukáš Knápek před 4 lety

Díky moc :-)

reagovat

xirtam před 4 lety

Seriál se mi taky moc líbí, škoda že ještě není hotový. Jinak jsem zastánce jetty, bylo by to jednodušší, ale nenechte se odradit ono se to určitě bude někomu hodit. Takových komplexních návodů není nikdy dost.

reagovat

NotBeginner před 3 lety

Pěkný článek. Škoda že jsi s tím skončil. Klidně by si mohl pokračovat s dalšími frameworky a udělat i něco komplikovanějšího. ( např. MySQL + hibernate + JavaFX atd..)

V každém případě díky. Zrovna, že by se český web hemžil takovými články jsem si zrovna nevšiml. Což je docela škoda.

A těm co prudí že něco jde jinak, lépe atd.., napiště sami nějaké tutoriály a zvěřejněte je. Tím dokažte své tvrzení, jinak jsou to jen kecy.

reagovat

Frantisek před 3 lety

Krasna prace, nadhernej uvod do hodne sloziteho sveta JAVA technologii. Skoda jen, ze neni dotazenej.

reagovat

Karel před rokem

Dobrý den, proč seriál dále nepokračoval? Lze někde najít zbývající kapitoly?

reagovat

Ghandhi před rokem

Myslim ze toto je super serial. Nie je to iba o vypisani „Hello world“ (ako niektori pochopili). Tesi ma ze som nasiel nieco co spaja viac frameworkov / kniznic a ukazuje ako ich integrovat od uplneho zaciatku. Skoda ze s tym autor skoncil.. Dufam ze pribudne diel 4 :)

reagovat

Altair před rokem

Čau, budeš v tomto seriálu ještě pokračovat? Bylo by super, kdyby na konci měl člověk jednoduchou web. aplikaci která používá spring a databázi + nahrání na server pomocí war. Díky.

reagovat

LevakBob před 9 měsíci

Mně se tento seriál též velice líbí. A jak už tu bylo řečeno, na českém webu je takovýchto seriálů, které spojují více prostředí a jsme srozumitelně popsány i pro „lepší začátečníky“ jako jsem já, pramálo. Oceňuji Váš zájem podělit se o vlastní vědomosti a děkuji za pěkně napsaný seriál. Bohužel chybí pokračování, což je velká škoda.. :-(

reagovat

Robert Mikšík před 18 dny

Zdravím, seriál je bezvadný, úžasný a bezkonkurenční i po čtyřech letech. Skvěle se čte. Nevím, jestli se dočkáme pokračování, ale i tak je bezvadný na začátek pro mě a určitě i pro spoustu dalších lidí. Takže opravdu velké díky. Skvělá práce!

reagovat

Robert Mikšík před 18 dny

Zdravím, seriál je bezvadný, úžasný a bezkonkurenční i po čtyřech letech. Skvěle se čte. Nevím, jestli se dočkáme pokračování, ale i tak je bezvadný na začátek pro mě a určitě i pro spoustu dalších lidí. Takže opravdu velké díky. Skvělá práce!

reagovat

Přidat komentář

  • Můžete použít Texy syntaxi, HTML není povoleno
  • Například: *kurzíva*, **tučně**, "text odkazu":adresa
 

Autor článku Lukáš Knápek

Od roku 2008 věnuji víceméně dobrovolně třetinu života vyvíjení webových aplikací, především prostřednictvím těchto jazyků a nástrojů: Java, Struts2, Hibernate, Spring, Maven, Dojo, JQuery, Tomcat a Eclipse. A to vše s vírou, že to bude užitečné nejen k vydělávání peněz pro potřeby Lukáše Knápka :-)