1. diel - Java server - Úvod
Vitajte u kurzu zo sekcie Java, v ktorom si ukážeme, ako vytvoriť server pre klientskej aplikácie. V tomto prípade sa zameriame na server pre chat, ale základ bude rovnaký aj pre iné použitie. V tejto lekcii si stanovíme ciele, ktoré chceme dosiahnuť, popíšeme si použité technológie, a založíme projekt.
Ciele
Ako už bolo povedané v úvode, tento kurzu si kladie za cieľ ukázať, že napísať kvalitný server v Jave nie je až tak ťažké, ako by sa mohlo zdať. V prvej polovici kurze implementujeme základnej časti, ktoré budú použiteľné pre akúkoľvek aplikáciu servera, od chatu po jednoduchý herný server. Druhá polovica sa zameria na samotný chat.
Funkcie servera
Server bude poskytovať nasledujúce funkcie:
- správa klientov zahájenie priamej komunikácie
vloženie do čakacej fronty
- zahájenie priamej komunikácie
- vloženie do čakacej fronty
- čakacej front pre prípad, že je na serveri príliš veľa klientov
- ľahké nájdenie servera v lokálnej sieti
- jednoduchá rozšíriteľnosť pomocou pluginov
- interaktívnej komunikácie so správcom servera
Výsledná podoba
Nižšie môžete vidieť výsledného chat klienta. U kontaktov sa zobrazuje počet neprečítaných správ. Ďalej indikátor písania sa zobrazuje v tabu. Ak je konverzácia dlhší, zobrazí sa scrollbar.
Použité technológie
Pretože sa jedná o kurze v sekcii Java, tak celú aplikáciu napíšeme práve v Jave. O správu projektu a závislostí sa bude starať grádl a dependency injection nám zaistí Google Guice.
Založenie projektu
Začneme založením projektu. K programovaniu odporúčam používať rozumné IDE. Ja budem v celom kurze používať IntelliJ IDEA.
Klikneme teda v menu na tlačidlo File -> New -> Project ... Otvorí sa okno ako je na obrázku nižšie. V tomto okne zaškrtnite, že chcete, aby sa o projekt staral grádl. Ak grádl nie je v možnosti, je potrebné aktivovať plugin v nastavení: File -> Settings -> Plugins Otvorí sa okno s nastavením pluginov. Do vyhľadávacieho políčka zadáme názov pluginu "grádl", zaškrtneme checkbox, klikneme na tlačidlo apply a ok. Po reštarte prostredie už bude grádl aktívny. Jazyk vyberte Java (mal by byť vybraný v predvolenom nastavení). Pokračujte tlačidlom Next.
V ďalšom okne je potrebné vyplniť políčka GroupID a ArtifactId. GroupID
predstavuje balík, ktorý zvyčajne reprezentuje firmu / inštitúcii /
jedinca, ktorá stojí za aplikácií. Ja sem zvyčajne vyplňuji
cz.stechy
. ArtifactId je názov aplikácie, ktorú sa snažíme
vytvoriť. V tomto prípade zadáme jednoducho chat
. Je tu ešte
políčko Version. To udáva verziu aplikácie. Políčko nechajte vyplnené
východiskovými hodnotami a pokračujte tlačítkom Next.
Ďalšie okno obsahuje nastavenia grádl. Všetko ponechajte vo východiskových hodnotách a zaškrtnite checkbox Use auto-import. Pokračujte ďalej tlačidlom Next.
Nasleduje posledné okno, v ktorom si nastavíte koreňový adresár projektu. Až budete spokojní s umiestnením projektu, tlačidlom Finish dokončíte jeho zakladaní.
Hneď po vytvorení projektu sa začne inicializovať grádl.
Štruktúra projektu
Štruktúra nášho projektu je vidieť na nasledujúcom obrázku.
V adresári projektu sa nachádzajú dve skryté zložky:
.gradle/
a .idea/
. V týchto zložkách sa
nachádzajú konfiguračné súbory pre grádl a idea, nevšímajte si ich.
Ďalej sa tu nachádza zložky:
gradle/
, obsahujúci wrapper pre grádl.src/
, ktorá je prázdna.
Žiadnu z týchto zložiek nemažte ani needitujte. Zložku src/
nebudeme používať. Zo súborov sa tu nachádza:
build.gradle
, konfiguračný súbor obsahujúci informácie o zostavení hlavného moduluchat
.- Súbor
settings.gradle
obsahujúci informáciu o názve projektu. - Súbory
gradlew
agradlew.bat
, ktoré sú spúšťacími súbormi pre grádl.
S touto štruktúrou sa ale neuspokojíme, pretože chceme tvoriť
klient-server aplikáciu. Vytvoríme si teda moduly reprezentujúce klienta,
server a spoločnú časť. Klikneme pravým tlačidlom na koreňovú zložku
(chat/
) a vyberieme New -> Module. Zobrazí sa nám rovnaké
okno ako pri zakladaní nového projektu. Opäť vyberieme, že chceme, aby sa o
závislosti staral grádl. Ďalej vyberieme, že chceme jazyk Java a
pokračujeme tlačidlom Next.
V ďalšom okne sa nachádza nastavenie GroupID a ArtifactId. GroupID je už
predvyplnené a nebudeme ho meniť. Do ArtifactId napíšeme názov nového
modulu. Najskôr založíme modul pre klienta, takže do políčka vyplníme
client
a pokračujeme tlačidlom Next.
V poslednom okne sa zobrazí nastavenie umiestnenia modulu. Všetko necháme
vo východiskových hodnotách a tlačidlom Finish dokončíme vytvorenie
prvého modulu. Rovnako postupujte aj pre modul server
a
share
.
Výsledná štruktúra projektu je k dispozícii na nasledujúcom obrázku.
Každý modul disponuje zložkou src/main/java/
, do ktorej
budeme písať zdrojový kód. Zložka resources/
slúži pre
prípadné doplňujúce súbory ako sú obrázky, preklady a pod. Zložka
test/
obsahuje rovnaké zložky ako main/
, ale je
určená na testovanie aplikácie.
Nastavenia závislostí
Teraz si nastavíme závislosti medzi modulmi. Modul share
bude
obsahovať triedy, ktoré budú spoločné ako pre klienta, tak pre server.
V module client
otvoríme súbor build.gradle
a
doplníme závislosť na module share
príkazom
compile project(':share')
do miesta nastavenia závislostí
dependencies
. Ten istý príkaz vložíme aj do modulu
server
.
Jednotlivé moduly možno skompilovať príkazom:
client: gradlew :client:compileJava server: gradlew :server:compileJava share: gradlew :share:compileJava
Príkazy sa spúšťa v príkazovom riadku. V IntelliJ existuje plugin terminal, ktorý sprístupní príkazový riadok priamo v prostredí. Ak máte plugin aktívny, môžete terminál zobraziť kliknutím na záložku terminal v spodnej časti IDE. V opačnom prípade je potreba plugin povoliť v nastaveniach pluginov: File -> Settings -> Plugins. V okne zadáte do vyhľadávacieho poľa názov pluginu terminal a zaškrtnete checkbox. Po potvrdení zmien a reštarte IDE bude terminál aktívny a pripravený na použitie.
Teraz, ak spustíte kompiláciu klienta, tak sa najskôr skompiluje modul
share
a až potom modul client
.
Ešte chvíľku zostaneme pri module client
a súboru
build.gradle
. Aby sme mohli klienta ľahko spúšťať, je
potrebné pridať plugin, ktorý sa o to postará. Na začiatku súboru do
definície pluginov pridajte plugin application:
plugins { id 'java' id 'application' }
Tento plugin ešte potrebuje zadefinovať názov hlavnej triedy a to so
všetkými balíčky, v ktorých sa trieda nachádza. Vytvoríme preto novú
premennú, ktorá nebude v žiadnom bloku a nazveme ju
mainClassName
:
mainClassName = 'cz.stechy.chat.SimpleClient'
Presunieme sa do modulu server
, opäť do súboru
build.gradle
. Server budeme v budúcnosti spúšťať s
parametrami. Aby sme tieto parametre ľahko odovzdali JVM, je potreba vytvoriť
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" ] standardInput = System.in }
Spúšťanie klienta a servera bude nasledujúce:
client: gradlew :client:run server: gradlew :server:run -Parg=-port=21298
To by bolo z úvodnej lekcie všetko. Nabudúce, v lekcii Java server - Parametre servera , začneme tvoriť serverovú časť chatu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 52x (110.59 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java