Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Lekce 1 - Java server - Úvod

Java Server pro klientské aplikace Java server - Úvod

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u kurzu ze sekce Java, ve kterém si ukážeme, jak vytvořit server pro klientské aplikace. V tomto případě se zaměříme na server pro chat, ale základ bude stejný i pro jiné použití. V této lekci si stanovíme cíle, kterých chceme dosáhnout, popíšeme si použité technologie, a založíme projekt.

Cíle

Jak již bylo řečeno v úvodu, tento kurzu si klade za cíl ukázat, že napsat kvalitní server v Javě není až tak těžké, jak by se mohlo zdát. V první polovině kurzu implementujeme základní části, které budou použitelné pro jakoukoliv aplikaci serveru, od chatu po jednoduchý herní server. Druhá polovina se zaměří na samotný chat.

Funkce serveru

Server bude poskytovat následující funkce:

  • správa klientů
    • zahájení přímé komunikace
    • vložení do čekací fronty
  • čekací fronta pro případ, že je na serveru příliš mnoho klientů
  • snadné nalezení serveru v lokální síti
  • snadná rozšiřitelnost pomocí pluginů
  • interaktivní komunikace se správcem serveru

Použité technologie

Protože se jedná o kurzu v sekci Java, tak celou aplikaci napíšeme právě v Javě. O správu projektu a závislostí se bude starat Gradle a dependency injection nám zajistí Google Guice.

Založení projektu

Začneme založením projektu. K programování doporučuji používat rozumné IDE. Já budu v celém kurzu používat IntelliJ IDEA.

Klikneme tedy v menu na tlačítko File -> New -> Project... Otevře se okno jako je na obrázku níže. V tomto okně zaškrtněte, že chcete, aby se o projekt staral Gradle. Pokud Gradle není v možnosti, je potřeba aktivovat plugin v nastavení: File -> Settings -> Plugins Otevře se okno s nastavením pluginů. Do vyhledávacího políčka zadáme název pluginu "Gradle", zaškrtneme checkbox, klikneme na tlačítko apply a ok. Po restartu prostředí již bude Gradle aktivní. Jazyk vyberte Java (měl by být vybrán ve výchozím nastavení). Pokračujte tlačítkem Next.

Založení nového projektu v IntelliJ Idea s Gradle

V dalším okně je potřeba vyplnit políčka GroupId a ArtifactId. GroupId představuje balíček, který obvykle reprezentuje firmu/institu­ci/jedince, která stojí za aplikací. Já sem obvykle vyplňuji cz.stechy. ArtifactId je název aplikace, kterou se snažíme vytvořit. V tomto případě zadáme jednoduše chat. Je zde ještě políčko Version. To udává verzi aplikace. Políčko nechte vyplněno výchozí hodnotou a pokračujte tlačítkem Next.

Nastavení GroupID a ArtifactID s IntelliJ IDEA

Další okno obsahuje nastavení Gradlu. Vše ponechte ve výchozích hodnotách a zaškrtněte checkbox Use auto-import. Pokračujte dál tlačítkem Next.

Nastavení Gradlu v intelliJ IDEA

Následuje poslední okno, ve kterém si nastavíte kořenový adresář projektu. Až budete spokojeni s umístěním projektu, tlačítkem Finish dokončíte jeho zakládání.

Nastavení kořenového adresáře projektu

Hned po vytvoření projektu se začne inicializovat Gradle.

Struktura projektu

Struktura našeho projektu je vidět na následujícím obrázku.

Základní struktura projektu

V adresáři projektu se nacházejí dvě skryté složky: .gradle/ a .idea/. V těchto složkách se nacházejí konfigurační soubory pro gradle a idea, nevšímejte si jich. Dále se zde nachází složky:

  • gradle/, obsahující wrapper pro gradle.
  • src/, která je prázdná.

Žádnou z těchto složek nemažte ani needitujte. Složku src/ nebudeme používat. Ze souborů se zde nachází:

  • build.gradle, konfigurační soubor obsahující informace o sestavení hlavního modulu chat.
  • Soubor settings.gradle obsahující informaci o názvu projektu.
  • Soubory gradlew a gradlew.bat, které jsou spouštěcími soubory pro gradle.

S touto strukturou se ale nespokojíme, protože chceme tvořit klient-server aplikaci. Vytvoříme si tedy moduly reprezentující klienta, server a sdílenou část. Klikneme pravým tlačítkem na kořenovou složku (chat/) a vybereme New -> Module. Zobrazí se nám stejné okno jako při zakládání nového projektu. Opět vybereme, že chceme, aby se o závislosti staral Gradle. Dále vybereme, že chceme jazyk Java a pokračujeme tlačítkem Next.

V dalším okně se nachází nastavení GroupId a ArtifactId. GroupId je již předvyplněno a nebudeme ho měnit. Do ArtifactId napíšeme název nového modulu. Nejdříve založíme modul pro klienta, takže do políčka vyplníme client a pokračujeme tlačítkem Next.

Nastavení ArtifactID nového modulu v IntelliJ IDEA

V posledním okně se zobrazí nastavení umístění modulu. Vše necháme ve výchozích hodnotách a tlačítkem Finish dokončíme vytvoření prvního modulu. Stejně postupujte i pro modul server a share.

Výsledná struktura projektu je k dispozici na následujícím obrázku.

Výsledná struktura projektu s vytvořenými moduly v IntelliJ IDEA

Každý modul disponuje složkou src/main/java/, do které budeme psát zdrojový kód. Složka resources/ slouží pro případné doplňující soubory jako jsou obrázky, překlady apod. Složka test/ obsahuje stejné složky jako main/, ale je určena k testování aplikace.

Nastavení závislostí

Nyní si nastavíme závislosti mezi moduly. Modul share bude obsahovat třídy, které budou společné jak pro klienta, tak pro server.

V modulu client otevřeme soubor build.gradle a doplníme závislost na modulu share příkazem compile project(':share') do místa nastavení závislostí dependencies. Ten samý příkaz vložíme i do modulu server.

Jednotlivé moduly lze zkompilovat příkazem:

client: gradlew :client:compileJava
server: gradlew :server:compileJava
share: gradlew :share:compileJava

Příkazy se spouští v příkazové řádce. V IntelliJ existuje plugin terminal, který zpřístupní příkazovou řádku přímo v prostředí. Pokud máte plugin aktivní, můžete terminál zobrazit kliknutím na záložku terminal ve spodní části IDE. V opačném případě je potřeba plugin povolit v nastavení pluginů: File -> Settings -> Plugins. V okně zadáte do vyhledávacího pole název pluginu terminal a zaškrtnete checkbox. Po potvrzení změn a restartu IDE bude terminál aktivní a připravený k použití.

Nyní, pokud spustíte kompilaci klienta, tak se nejdříve zkompiluje modul share a až pak modul client.

Ještě chvilku zůstaneme u modulu client a souboru build.gradle. Abychom mohli klienta snadno spouštět, je potřeba přidat plugin, který se o to postará. Na začátku souboru do definice pluginů přidejte plugin application:

plugins {
    id 'java'
    id 'application'
}

Tento plugin ještě potřebuje zadefinovat název hlavní třídy a to se všemi balíčky, ve kterých se třída nachází. Vytvoříme proto novou proměnnou, která nebude v žádném bloku a nazveme ji mainClassName:

mainClassName = 'cz.stechy.chat.SimpleClient'

Přesuneme se do modulu server, opět do souboru build.gradle. Server budeme v budoucnu spouštět s parametry. Abychom tyto parametry snadno předali JVM, je potřeba vytvořit vlastní task:

task run (type: JavaExec, dependsOn: classes){
    if(project.hasProperty('arg')){
        args(arg.split(','))
    }

    main = "cz.stechy.chat.Server"
    classpath = sourceSets.main.runtimeClasspath
    jvmArgs = [
            "-Dkey=value"
    ]
}

Spouštění klienta a serveru bude následující:

client: gradlew :client:run
server: gradlew :server:run -Parg=-port=21298

To by bylo z úvodní lekce vše. Příště, v lekci Java server - Parametry serveru, začneme tvořit serverovou část chatu.


 

Stáhnout

Staženo 12x (110.59 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

 

Článek pro vás napsal Petr Štechmüller
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje primárně programování v Jave, ale nebojí se ani webových technologií.
Miniatura
Všechny články v sekci
Server pro klientské aplikace v Javě
Miniatura
Následující článek
Java server - Parametry serveru
Aktivity (6)

 

 

Komentáře

Avatar
Štěpán
Člen
Avatar
Štěpán:4. listopadu 13:36

Chvilku jsem bádal nad proměnnou mainClassName. V článku se píše "vytvoříme v bloku plugins novou proměnnou", přesto že proměnná musí být mimo ten blok, ne?

 
Odpovědět 4. listopadu 13:36
Avatar
Odpovídá na Štěpán
Petr Štechmüller:4. listopadu 13:47

Dobrý postřeh, opravím...

Odpovědět 4. listopadu 13:47
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.