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ím díle tohoto seriálu jsme si připravili v Eclipse java projekt. Nyní do projektu přidáme užitečné nástroje a frameworky, a to především Maven a Struts2, později pak Spring a Hibernate. Java aplikace jsou z velké části postavené na externích knihovnách, tzv. knihovnách třetích stran, což jsou prostě hotové a vyladěné programy jiných programátorů, které nám mají ulehčit práci. Proč strávit spoustu času programováním věcí, které už někdo před námi udělal? Jedná se především o:

1) Frameworky: výrazně nám usnadňují psaní java a web kódu, protože spoustu nutných režijních věcí udělají za nás. Často tak odpadá „byrokracie“ okolo programování aplikace, o kterou se postará framework za nás. Také nás většinou nenásilně donutí psát slušně strukturovanou aplikaci, např. aby se držela architektura MVC, případně dodržovaly jiné, praxí ověřené programovací standardy. Je to, jako bychom byli zvoleni ministry a na běžnou nudnou administrativní práci bychom si najali šikovné úředníky. Ti mají znalosti o současných zákonech a jejich novelách a o nutných administrativních činnostech potřebných pro správný chod ministerstva. My se pak můžeme zvesela věnovat ministrování :-)

2) Utilitní knihovny: poskytují různou užitečnou funkcionalitu, kterou můžeme využívat v naší aplikaci, aniž bychom si ji museli sami psát. V tomto seriálu budeme nejspíš později využívat pouze knihovnu Joda time pro práci s datumy. Takže naše výsledná webová aplikace bude souhrn těchto tří částí:

  • našeho vlastního kódu
  • frameworků
  • utilitních knihoven

Nástroj, který umí tyto tři části slepit v jeden fungující celek se jmenuje Maven.

Maven

Maven je nástroj pro buildování java aplikací a kromě toho umí spoustu dalších věcí. My po něm ale v našem seriálu chtít jediné. Aby vzal naši aplikaci napsanou v javě a v hml, přidal k ní všechny potřebné závislosti na knihovnách třetích stran (tedy frameworky a utilitní knihovny) a vytvořil jeden tzv. WAR soubor, který si potom budeme moci spustit na lokálním serveru a následně se ve webovém prohlížeči podívat na výsledek naší práce. A nyní již prakticky. Asi nejjednodušší a nejpohodlnější způsob jak vyvíjet, je nainstalovat si do Eclipse maven plugin a nechat Eclipse, ať pomocí mavenu automaticky builduje naší aplikaci. Prakticky to pak bude vypadat tak, že budeme psát v Eclipse kód a výsledky rovnou zobrazovat ve webovém prohlížeči.

Maven plugin (m2eclipse)

Maven pluginů je víc, já budu používat m2eclipse. Do Eclipse jej nainstalujeme velmi jednoduše:

  1. Otevřeme Eclipse a menu vybereme možnost Help/Eclipse Marketplace.
  2. V okně nic nebudeme měnit, jen do políčka Search dáme vyhledat m2eclipse.
  3. Mezi nalezenými záznamy by měl být Maven integration for Eclipse (přesně takovýto název, neinstalujte žádný WTP, for Incubation apod.)
  4. U toho záznamu stiskneme tlačítko Install a nainstalujeme plugin.
  5. Nakonec se Eclipse bude chtít restartovat, takže mu to povolíme a plugin je připraven k používání.

Ještě je důležité našemu vytvořenému projektu (viz první díl tohoto seriálu) říct, že má maven používat. To se dělá takto:

  • v Eclipse klikněte pravým tlačítkem myši na projekt (levý sloupec)
  • zvolte nabídku Configure/Convert to maven project

Maven – Pom.xml

V mavenu všechno začíná a končí u souboru pom.xml. V něm vyjmenujeme všechny java knihovny, na kterých bude náš projekt záviset (viz výše). To je jediné, co se po nás chce. Maven je pro nás automaticky stáhne z internetu, připojí je k našemu projektu a my je můžeme začít používat. Vytvořme si nyní v Eclipse nový soubor pom.xml:

  • pravé tlačítko myši na název projektu (v Eclipse v pravém sloupci, viz minulý díl seriálu), nabídka New/Other/Xml/Xml f­ile.
  • soubor pojmenujte jako pom.xml a dejte finish.

Do pom.xml dáme pro začátek tento obsah:

<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.nullpointer</groupId>
<artifactId>base-maven</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

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

<dependencies>
</dependencies>

</project>

Mezi tagy <dependencies></de­pendencies> budeme dávat zmiňované závislosti, jak si nyní ukážeme. První externí knihovnou, kterou budeme v našem projektu využívat (a závislost na ní tedy uvedeme v pom.xml), je Struts2 framework.

Struts2 – integrace do projektu pomocí Mavenu

Struts2 je framework, který nám významně usnadní tvorbu java webových aplikací. Abychom ho mohli začít používat, musíme jej nejdříve přidat k závislostem našeho projektu, tedy do souboru pom.xml, který jsme si vytvořili před chvílí. Celý soubor pom.xml pak bude vypadat takto:

<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.nullpointer</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>

Nyní mavenu říkáme, že v našem projektu budeme chtít používat struts2 verzi 2.3.8 (v době psaní tohoto článku nejaktuálnější). Jakmile soubor pom.xml uložíme, měl by maven plugin v Eclipse stáhnout tuto závislost a přiřadit ji k našemu projektu. To poznáme tak, že v projektu uvidíme kontejner Maven Dependencies, do které nám bude maven dávat všechny jar knihovny, které jsou potřeba k závislostem, které jsme uvedli v souboru pom.xml. Měl by se objevit hned pod kontejner JRE System Library (JDK…), tedy pod Javou, kterou jsme do projektu přidali v minulém díle.

Může se bohužel stát, že se však kontejner Maven Dependencies v projektu neobjeví, což se stalo i mně v době psaní tohoto seriálu. Nejpravděpodob­nějším viníkem je špatný obsah souboru .classpath.

Maven plugin a .classpath

V první řadě zkontrolujte, že jste zkonvertovali svůj projekt na maven projekt. To se dělá pravým tlačítkem na projekt, v nabídce vyberte Configure/Convert to maven projekt (v tomto článku jsme to již dělali výše, uvádím jen pro úplnost). V ikonce projektu by se mělo objevit malé modré M. Pokud se přesto kontejner Maven Dependencies neobjevuje, problém je s nejvyšší pravděpodobností v obsahu souboru .classpath, který obsahuje každý Eclipse projekt. Tento soubor neuvidíme v Eclipse, musíme si náš projekt najít na disku, např. pomocí Total Commandera nebo průzkumníka. Můj .classpath vypadá nyní následovně:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
        <classpathentry kind="src" path="src/main/java"/>
        <classpathentry kind="src" path="src/main/resources"/>
        <classpathentry kind="src" path="src/test/java"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
        <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
        <classpathentry kind="output" path="build/classes"/>
</classpath>

Což je problém, protože tu vůbec není maven a proto se nestahují potřebné závislosti (v našem případě Struts2).Změňte obsah souboru .classpath na:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
        <classpathentry kind="src" output="target/classes" path="src/main/java"/>
        <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
        <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
                <attributes>
                        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
        <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
        <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
        <classpathentry kind="output" path="target/classes"/>
</classpath>

Samozřejmě pokud máte jinou strukturu projektu než já, musíte soubor .classpath patřičně upravit. Jedná se o source folders, v příkladu jsou to src/main/java, src/test/java a src/main/resources (viz předchozí díl tohoto seriálu, kde jsme takto zakládali projekt). Nyní se vraťte do Eclipse a mělo by stačit zavřít a znovu otevřít projekt (pravé tlačítko myši na projekt a nabídka Close project, posléze Open project), můžete předtím pro jistotu ještě pomocí F5 projekt refreshnout. Nyní by se již v projektu měl objevit kontejner Maven Dependencies (pozor, je vidět jen v Eclipse, ne na disku u projektu, kde jsme editovali .classpath) a v něm je nyní v mém případě 11 jar knihoven.

Pokud se stále Maven Dependencies neobjeví, zkuste re-savnout soubor pom.xml, což je i do budoucna dobrá cesta, jak donutit Maven plugin, aby provedl update závislostí.

Ještě si zkontrolujte, že máte zaškrtnutý checkbox automatického buildování – v menu Eclipse Project/Build Automatically. Můžete také zkusit udělat Project/Clean…/Cle­an all project.

Lokální maven repository

Všechny jar knihovny, které jsou v kontejneru Maven Dependencies, maven stáhl k vám na lokální disk do tzv. lokálního maven repositáře. Cestu lze vidět v Eclipse u každé jar knihovny. Je to závislé na používaném OS, např. ve Windows 7 je cesta k repositáři tato:

C:\Users\<VASE_JME­NO>\.m2\reposi­tory…

Pro naše potřeby není znalost tohoto umístění příliš důležitá, ale není špatné o tom vědět.

Závěr

Ačkoliv jsem minule sliboval již Hello world, tak nakonec se ukázala problematika rozjetí maven pluginu pro Eclipse širší, než jsem původně čekal :-) a určitě si zasloužila samostatný článek . Náš projekt je nyní připraven používat Struts2 a přidávání dalších závislostí je již analogické, pouze přidáme dependency do pom.xml. Příště začneme rovnou rozjetím Tomcatu v Eclipse (což je oproti maven opravdu hračka) a konečně vypsáním Hello world v prohlížeči za pomocí frameworku Struts2.

Komentáře

Dano před 4 lety

Zdravim, dostal sa mi pod ruky Vas serial a som nesmierne rad, ze som vo svojich zaciatkoch pouzival Netbeans ;) Lebo tak komplikovany start v Netbeanse nie je potrebny. Staci iba download, install and devel.

reagovat

Lukáš Knápek před 4 lety

No, do diskuzí Netbeans vs Eclipse se radši pouštět nebudu, beztak už je toho plný internet :-)

reagovat

Johny před 3 lety

Díky za tutoriál. Jen mi tu chybělo, jak přímo vytvořit maven projekt v eclipse pro webovou aplikaci. Měl jsem problém na to přijít, ale nakonec mi pomohl tento „tutoriál“:: http://visionplus.cz/…-projekt.php Třeba také někomu pomůže.

reagovat

James před 9 dny

Wonderful site. Plenty of useful info here. I'm sending it to a few pals ans additionally sharing in delicious. And naturally, thank you to your sweat!

reagovat

James před 9 dny

Wonderful site. Plenty of useful info here. I'm sending it to a few pals ans additionally sharing in delicious. And naturally, thank you to your sweat!

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 :-)