Servlet - tämä on Java-nporpaMMa, joka käyttää luokkaa superluokkanaan HttpServiet. Servlettiä käytetään olemassa olevan palvelimen, erityisesti Web-palvelimen, ominaisuuksien laajentamiseen. Tyypillisesti servlet toimii erityisellä palvelimella. Tällaisia palvelimia kutsutaan Java-sovelluspalvelimiksi. Java-sovelluspalvelin sisältää rakennuspalikkana web-palvelimen (joskus ei yhden, vaan useita), sekä palvelimia, jotka toimivat palvelinkomponenttien kanssa, apupalvelupalvelimia jne. Servlet toimii siinä ympäristössä, jonka palvelin sille tarjoaa. Palvelimen osaa, joka on suunniteltu käsittelemään servlettejä, kutsutaan servlet-säiliöksi. Servlet-spesifikaatio olettaa, että servlet-luokassa on vakiomenetelmiä, joiden suorittaminen tapahtuu jossakin servletin elinkaaren vaiheessa. Servlet-säilö kutsuu näitä menetelmiä. Servlet-spesifikaatioiden toteutus sisältyy vakio Java-kielipaketteihin.
Tämä kirja kattaa Java-sovelluspalvelimen nimeltä Blazix. Blazix Server tarjoaa täydellisen joukon ominaisuuksia servlettien kanssa työskentelemiseen. Sen lisäksi, että luot servlet-luokan (tai luokat) sekä määrität luodun servlet-ohjelman ja asennat sen palvelimelle, sinun on muutettava Web-palvelimen asetustiedostoa. Perusarvot määritetään asetustiedostossa seuraavasti: servlet.name: myservlet
servlet.myservlet.className: mypackage.MyServletClass servlet.myservlet.url: /mysrvlet
Jokaiselle servletille on annettava nimi(servlet.name), jolla se tunnistetaan palvelimella. Tätä nimeä käytetään servletin ominaisuuksien asettamiseen, erityisesti osoittamaan sen luokan nimeä, johon servlet-ohjelma on tallennettu (seuraava rivi), sekä osoitteen, josta tätä servletiä käytetään (kolmas rivi).
Asiakas kysyy Web-palvelimelta osoitetta, jossa servlet sijaitsee (osoite on määritettävä servlet.myservlet.url-arvona Web-palvelimen asetustiedostossa). Palvelin välittää pyynnön ja tiedot (jos sellaisia on) servletille, vastaanottaa vastauksen servletiltä ja välittää sen asiakkaalle.
Tämä voisi olla servletin selityksen loppu. On kuitenkin monia mielenkiintoisia ja hyödyllisiä yksityiskohtia, joihin sinun tulee kiinnittää huomiota ja tutkia niitä tarkemmin.
On erityisen tärkeää pitää mielessä, että servlet-luokan polku on määritettävä muuttujassa ciasspath tai se voidaan sijoittaa hakemistoon C:\Blazix\classes tai hakemistoon, joka on määritetty Web-palvelimen asetustiedostossa nimellä server.ciassDir. Kun asetustiedostoa on muokattu sisältämään tiedot uudesta servletistä, palvelin on pysäytettävä ja käynnistettävä uudelleen. Servlet voidaan sijoittaa myös käynnissä olevalle palvelimelle hallintatyökalun avulla, mutta tätä varten servlet on pakattava Web-arkisto WAR-tiedostoon. Jos servlet-luokkatiedostoa on muutettu, palvelinta ei tarvitse pysäyttää ja käynnistää uudelleen. Oletusarvoisesti palvelin on määritetty niin, että servlet-soittimen kutsuminen osoitteessa http://localhost:81/_reload saa aikaan sen, että kaikki luokat ladataan uudelleen ja muokattu servlet-luokka on käytettävissä asiakaspyyntöjä varten (Kuva 4.1). Vieraile tällä sivulla, kun servlet-luokkatiedostoa on muokattu. Palvelimen pysäyttäminen ei yksinkertaisesti ole välttämätöntä.
Jos lukijalla on kokemusta servleteistä, hän arvostaa Blazix-palvelimen yksinkertaisuutta verrattuna muihin Java-palvelimiin, kuten Tomcatiin.
Aloita heti, katsotaanpa yksinkertainen esimerkki, servlet joku-Servlet (Luettelo 4.1).
Listaus 4.1. Servlet SomeServlet.java I
tuo java.io.*; tuonti javax.servlet.*; tuonti javax.servlet.http.*;
public class SomeServlet laajentaa HttpServlet ( public void doGet(HttpServletRequest request,
HttpServletResponse response) heittää ServletExceptionin, IOExceptionin ( Printwriter out = vastaus.getWriter(); out.println("Hei maailma");
Kirjoita Web-palvelimen asetustiedostoon seuraava:
servlet.name: ensimmäinen
servlet.first.className: SomeServlet
servlet.first.url: /dofirst
Sitten selaimen kutsu servletille näyttää tältä http://localhost:81 /dofirst (Kuva 4.2).
Java-servletit tarjoavat alustasta riippumattoman menetelmän verkkosovellusten luomiseen (tämä ei ole kiistaton, mutta emme käsittele tätä asiaa sen enempää, koska silloin meidän on päätettävä, mitä tarkoitamme Web-sovelluksella, joka ei sisälly luetteloon käsiteltävistä aiheista) ja monet sovellukset Ne ovat nopeita eivätkä ne sisällä CGI-sovellusten rajoituksia. Servlet toimii Web-palvelimen ohjauksessa, eikä se, toisin kuin sovelma, vaadi graafista käyttöliittymää. Servlet on vuorovaikutuksessa palvelimen kanssa vaihtamalla pyyntöjä ja vastauksia sen kanssa. Asiakasohjelma tekee pyynnöt palvelimelle. Palvelin käsittelee pyynnön, välittää sen servletille ja servlet lähettää vastauksen palvelimen kautta asiakkaalle. Nykyään servletit ovat erittäin suosittuja luotaessa interaktiivisia Web-sovelluksia. On monia web-palvelimia, jotka voivat käsitellä servlettejä, mukaan lukien Tomcat, iPlanet Web Server (aiemmin Netscape
Enterprise Server), Blazix. J Builder Enterprise käyttää mukana tulevaa Borland Enterprise Serveriä (BES) ja tukee myös sitä Web-palvelimet Logic, WebSphere ja iPlanet. J Builder Enterprise Server sisältää oletusarvoisen Tomcat-palvelimen.
Riisi. 4.2. Soittaminen servletiin
Yksi servlettien tärkeä etu on niiden nopeus. Toisin kuin CGI-sovellukset, servletit ladataan muistiin vain kerran ja suoritetaan sitten suoraan muistista. Servletit ovat pohjimmiltaan monisäikeisiä sovelluksia. Lisäksi ne ovat alustariippumattomia, koska ne on kirjoitettu Java-kielellä.
JSP-tekniikkaa, joka on omistettu Luku 3 on servlet-tekniikan laajennus JSP:hen Erityistä huomiota keskittyy työskentelyyn HTML- ja XML-dokumenttien kanssa. JSP-fragmentteja käytetään yleisimmin osana HTML- ja XML-koodia. Kuinka tehdä valinta ja päättää, käytetäänkö servlettejä vai palvelinsivuja? Servletit sopivat paremmin matalan tason ohjelmointiongelmien ratkaisemiseen ja vähemmän sovellusten esityslogiikan luomiseen liittyvien ongelmien ratkaisemiseen. JSP-palvelinsivut puolestaan keskittyvät pääasiassa siihen, kuinka tulos esitetään käyttäjälle kätevimmällä tavalla. Palvelinpuolen sivut luodaan upotettuna HTML-koodiin käyttämällä HTML-dokumentin kirjoitustyyliä. JSP-tekniikka tarjoaa paljon rikkaampia ominaisuuksia kuin tavallinen HTML. JSP-sivut voivat tarjota mahdollisuuden toteuttaa sovelluslogiikkaa käyttämällä yksinkertaisia Java-komponentteja sekä EJB-palvelinkomponentteja luomalla mukautettuja pikakuvakekirjastoja. Java-palvelinsivut itsessään voivat olla modulaarisia, uudelleenkäytettäviä esityslogiikkakomponentteja, joita voidaan käyttää yhdessä erilaisten mallien ja suodattimien kanssa. JSP-sivut muunnetaan servletteiksi, joten teoriassa voit käyttää vain servlettejä. JSP-tekniikka luotiin kuitenkin yksinkertaistamaan Web-asiakirjojen luontiprosessia erottamalla sovelluksen esityslogiikka asiakirjan sisällöstä. Useimmissa tapauksissa asiakkaalle lähetettävä vastaus koostuu sekä asiakirjan esitysmalleista että tiedoista, jotka generoidaan automaattisesti täyttämällä malli. Tällaisissa tilanteissa on paljon helpompaa työskennellä JSP:n kanssa kuin servlettien kanssa.
Yksi Javan parhaista asioista on sen monipuolinen luonne. Tietenkin perinteisen työpöydän ja jopa luominen mobiilisovelluksia- Tämä on suurenmoista. Mutta entä jos haluat poistua syrjäytyneeltä tieltä ja astua Java-verkkosovelluskehityksen alueelle? Sinulle on yksi hyviä uutisia: Kielen mukana tulee täysi Servlet API, jonka avulla voit luoda luotettavia verkkosovelluksia ilman suurta vaivaa.
Java-sovellusten rakentaminen servlettien avulla
Joten olemme jo luoneet sovelluksen määritystiedostot. Nykytilanteessa se ei kuitenkaan tee kirjaimellisesti mitään. Haluamme, että asiakkaat voivat rekisteröityä HTML-lomakkeella, joten seuraavaksi meidän on luotava JSP-tiedostot, jotka näyttävät yllä olevan lomakkeen ja asiakkaan tiedot, kun rekisteröinti on suoritettu onnistuneesti. Näin teemme nyt.
Työskentelemme ulkoasun parissa
Sovelluksen ulkoasu määritellään kahdella JSP-tiedostolla - MVC-kontekstissa näitä kutsutaan näkymiksi. Ensimmäinen vastaa ilmoittautumislomakkeen näyttämisestä ja mahdollisia virheitä, soitettiin syötettyjen tietojen tarkistuksen jälkeen. Toinen on tavallinen tervetulosivu, joka näyttää asiakkaan syöttämät tiedot, kun rekisteröintiprosessi on suoritettu onnistuneesti.
Tässä on ensimmäinen JSP-tiedosto:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Rekisteröinti
$(rikkomus).
Tiedosto sisältää yksinkertaisen HTML:n parilla lisäyksellä. Tämä on JSP:n kauneus yhdistettynä JSTL:ään ja JELiin. Huomaa, kuinka helppoa on tarkistaa vahvistusvirheet käyttämällä vakiotunnisteita, kuten<с:if>Ja
Rekisteröintilomakkeen action-attribuutti osoittaa seuraavaan URL-osoitteeseen: $(pageContext.request.contextPath)/processcustomer . Tämä tarkoittaa, että joka kerta, kun asiakas yrittää rekisteröityä, tiedot lähetetään prosessoijalle riippumatta siitä URL-osoitteesta, jossa lomaketta käytetään. Tämä saavutetaan JSP-tiedostosta saatavien objektien toiminnallisuudella, kuten request .
Pian näemme, kuinka servlet sitoutuu prosessiasiakkaan URL-osoitteeseen ja miten se on vuorovaikutuksessa syötteen kanssa. Katsotaanpa toistaiseksi tervetulosivusta vastaavaa JSP-tiedostoa:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Kiitos rekisteröinnistä!
Antamasi tiedot:
Nimi:$(etunimi)
Sukunimi:$(sukunimi)
Sähköposti:$(sähköposti)
Nyt kun olemme ymmärtäneet sivun renderöinnin, seuraava askel on luoda servlet, joka vastaa asiakastietojen keräämisestä POST-pyynnöistä ja tietojen validoinnista yksinkertaisella tavalla.
Ohjaimen kirjoittaminen
Servletin kirjoittaminen, joka voi hakea tietoja rekisteröintilomakkeesta, ei voisi olla helpompaa. Meidän tarvitsee vain kirjoittaa HttpServlet-luokan alaluokka ja toteuttaa sen doGet()- tai doPost()-metodit (tai molemmat, jos tarpeen). Tässä tapauksessa servlet on vuorovaikutuksessa POST-pyynnöistä tulevien tietojen kanssa.
Tältä se näyttää:
@Verkkopalvelu mRequestParameters (asiakas); .setAsRequestAttributes(request) Luettelo rikkomuksista = customer.validate(); , vastaus); yksityinen merkkijono määrittääUrl(Lista rikkomukset) ( if (!violations.isEmpty()) ( palauttaa "/"; ) else ( palauttaa "/WEB-INF/views/customerinfo.jsp"; ) ) yksityinen staattinen luokka RequestCustomer ( yksityinen lopullinen merkkijono etunimi; yksityinen lopullinen merkkijono sukunimi; yksityinen lopullinen merkkijonosähköposti; yksityinen RequestCustomer(String etunimi, merkkijono sukunimi, merkkijono sähköpostiosoite) ( this.firstName = etunimi; this.sukunimi = sukunimi; this.email = sähköposti; ) julkinen staattinen RequestCustomer fromRequestParameters(HttpServletRequest-pyyntö) (palauta uusi RequestCustomer(request.getParameter("etunimi"), request.getParameter("sukunimi"), request.getParameter("email")); ) julkinen void setAsHletRestttributes requestAsHletResttpststrequest ( request.setAttribute("etunimi", etunimi); request.setAttribute("sukunimi", sukunimi); request.setAttribute("sähköposti", sähköposti); ) public List validate() ( Listan rikkomukset = new ArrayList<>(); if (!StringValidator.validate(etunimi)) (breaks.add("Etunimi on pakollinen kenttä"); ) if (!StringValidator.validate(sukunimi)) (breaks.add("Sukunimi on pakollinen kenttä") ; ) if ( !EmailValidator.validate(email)) (breaks.add("Sähköpostin tulee olla hyvin muotoiltu"); ) palauttaa rikkomukset; ) ) )
Ensimmäinen huomioitava asia tässä on @WebServlet(name ="CustomerController", urlPatterns = "/processcustomer") -merkinnän käyttö. Se käskee servlet-säilöä käyttämään CustomerController-luokkaa käsittelemään HTTP-pyyntöjä osoitteeseen /processcustomer. Sama vaikutus voidaan saavuttaa lisäämällä servlet-kartoitusohjeet web.xml:ään tällä tavalla, mutta koska käytämme Servlet Specification 3.1:tä, meidän ei tarvitse tehdä tätä.
Tässä olemme nimenneet servletin CustomerControlleriksi, koska hyvänä käytäntönä on käyttää servlet-luokan nimeä @WebServlet-merkinnän name-attribuutin arvona. Muutoin jotkin säilöistä eivät täsmää, mikä johtaa 404-virheeseen.
CustomerController-luokka itse tekee muutamia yksinkertaisia asioita. Ensinnäkin se kerää lomakkeen syötteitä käyttämällä HttpServletRequest-käyttöliittymän toteutusta, joka sisältää arvot, jotka vastaavat lomakkeen etunimi-, sukunimi- ja sähköpostikenttiä. Sitten se asettaa nämä arvot kyselymääritteiksi, jotta ne voidaan näyttää uudelleen joko lomakkeella tai tulossivulla. Lopuksi validaattorit tarkistavat syötettyjen tietojen oikeellisuuden.
Validaattorit ovat yksinkertaisia luokkia, jotka tarkistavat tietyt ominaisuudet, kuten onko merkkijono tyhjä vai näyttääkö sähköposti sähköpostilta. Voit tarkastella niiden toteutusta kirjoittajan GitLabissa.
Validointitulos vaikuttaa tapahtumien jatkoon: jos tiedot eivät ole kelvollisia, asiakas ohjataan RequestDispatcher-objektin kautta rekisteröintisivulle, jossa vastaavat virheet näytetään. Jos kaikki on kunnossa, tervetulosivu tulee näkyviin.
Olemme siis luoneet kokonaisen Java-verkkosovelluksen, jonka avulla voit rekisteröidä asiakkaita HTML-lomakkeella, perusservletillä ja muutamalla JSP-tiedostolla. On aika käynnistää se.
Käynnistä sovellus
Sovelluksen käynnistämiseksi sinun on suoritettava seuraavat vaiheet:
IntelliJ IDEA). Kun otat projektin käyttöön ja suoritat sen, oletusselaimen pitäisi käynnistyä rekisteröintiikkunalla.
Johtopäätös
Joten olet hankkinut kaikki taidot, joita tarvitaan oman verkkosovelluksen luomiseen Javalla ilman, että sinun tarvitsee turvautua monimutkaisiin kehyksiin. Tarvitset vain Servlet API:n, JSP:n kaltaisen tekniikan renderöintiin ja alkuperäiset Java-työkalut. Hienoa, eikö?
On syytä huomata, että CustomerController-luokan toteutus tuo esiin servlettien vahvuudet ja heikkoudet: toisaalta se näyttää lyhyesti, kuinka helppoa on käsitellä pyyntöparametreja ja lähettää vastauksia asiakkaalle. eri formaatteja. Mutta tällä toiminnallisuudella on hintansa: molemmat HttpServletResponse- ja HttpServletResponse-rajapintojen toteutukset ovat tavallisia palvelun paikantajia. Tämä ei tarkoita, että tämä olisi huono asia, koska paikantimet sisältävät vain tietoja. Sinun on kuitenkin muistettava, että nämä toteutukset on aina sidottu servletiin.
Servlet on java-ohjelma, joka toimii verkkosovelluksen palvelinpuolella. Aivan kuten sovelmat laajenevat dynaamisesti toiminnallisuutta Web-selaimen servletit laajentavat dynaamisesti Web-palvelimen toimintoja.
Job servlet"ja voidaan kuvata seuraavasti: kun pyyntö saapuu asiakkaalta, Web-palvelin voi erityisen määritystiedoston avulla määrittää, mikä servlet on suoritettava. Tämän jälkeen Web-palvelin käynnistää JVM:n, joka puolestaan suorittaa Servlet käsittelee pyynnön ja siirtää sisällön Webiin - palvelimelle (mahdollisesti HTML-sivun muodossa Web-palvelin lähettää vastauksen asiakkaalle (servletin luoma HTML-sivu).
WEB-palvelin on pohjimmiltaan eräänlainen kontti, joka latautuu servlet"s, suorittaa ne ja saatuaan heiltä tuloksen lähettää sen asiakkaalle.
Servlet verkkosovellusarkkitehtuurissa
Tehon ja joustavuuden ansiosta servlet"Sillä voi olla merkittävä rooli järjestelmän arkkitehtuurissa. Ne voivat suorittaa väliohjelmistolle tarkoitettuja sovellustehtäviä, toimia asiakkaan välityspalvelimena ja jopa parantaa väliohjelmiston toimivuutta lisäämällä tukea uusille protokollille ja muille ominaisuuksille. toimii sovelluspalvelimena niin sanotussa kolmikerroksisessa asiakas-palvelinjärjestelmässä ja sijaitsee kevyen asiakkaan, kuten web-selaimen, ja tietolähteen välissä.
Servlet välityspalvelimena
Sovelmien tukemiseksi servletit voivat toimia niiden välityspalvelimina. Tämä voi olla tärkeää, koska Java-suojauksen avulla sovelmat voivat muodostaa yhteyden vain palvelimeen, josta ne on ladattu. Jos sovelman on muodostettava yhteys toisessa koneessa sijaitsevaan tietokantapalvelimeen, servlet voi luoda tämän yhteyden appletille.
Väliaikainen ja pysyvä servlet"s
Servletit voidaan käynnistää ja pysäyttää jokaisen asiakkaan pyynnöstä. Ne voidaan myös käynnistää Web-palvelimen käynnistyessä ja olla olemassa, kunnes se pysähtyy. Väliaikainen servlet"s latautuvat pyynnöstä ja tarjoavat hyvän tavan säästää palvelinresursseja harvoin käytettyjä toimintoja varten. Pysyvät servletit ladataan, kun Web-palvelin käynnistyy, ja ne kestävät, kunnes se pysäytetään. Servletit asennetaan pysyvinä laajennuksina palvelimelle, jos käyttökustannukset ne ovat erittäin korkeat (kuten tietokantayhteyden muodostaminen), jos ne tarjoavat pysyviä palvelinpuolen toimintoja (kuten RMI-palvelua) tai tapauksissa, joissa niiden on vastattava asiakkaan pyyntöihin mahdollisimman nopeasti antaa. servlet"ja pysyvä tai väliaikainen; tämä on verkkopalvelimen määrittämisen toiminto.
Servlet-elinkaari, javax.servlet.Servlet
Servletit toimivat Web-palvelinalustalla osana samaa prosessia kuin itse Web-palvelin. Web-palvelin on vastuussa jokaisen servlet-ilmentymän alustamisesta, kutsumisesta ja tuhoamisesta. Web-palvelin on vuorovaikutuksessa servletin kanssa yksinkertaisen käyttöliittymän kautta: javax.servlet.Servlet.
Javax.servlet.Servlet-käyttöliittymä sisältää kolme päämenetelmää:
- sen sisällä()
- palvelu()
- tuhota()
ja kaksi apumenetelmää:
- getServletConfig()
- getServletInfo()
Samankaltaisuudet rajapintojen välillä servlet"Ja Java-sovelma ovat ilmeisiä. Juuri näin se on suunniteltu! Java-servletit ovat Web-palvelimille samat kuin sovelmat verkkoselaimille. Sovelma toimii Web-selaimessa ja suorittaa toimintoja sen pyynnöstä erityisen käyttöliittymän kautta. Servlet tekee sama asia kun työskentelet web-palvelimella.
Servletin alustus, init()-menetelmä
Kun servlet ladataan ensimmäisen kerran, init()-metodi kutsutaan. Tämä antaa servletille mahdollisuuden tehdä mitä tahansa asennustyötä, kuten avata tiedostoja tai muodostaa yhteyksiä palvelimiinsa. Jos servlet on asennettu pysyvästi palvelimelle, se ladataan palvelimen käynnistyessä. Muussa tapauksessa palvelin aktivoi servletin, kun se vastaanottaa ensimmäisen pyynnön asiakkaalta suorittaa kyseisen servletin tarjoama palvelu.
On taattu, että menetelmä sen sisällä() päättyy ennen muita kutsuja servletille - kuten menetelmäkutsua palvelu(). ota huomioon, että sen sisällä() kutsutaan vain kerran; sitä ei kutsuta ennen kuin servlet on purettu ja palvelin lataa sen sitten uudelleen.
Menetelmä sen sisällä() ottaa yhden argumentin - viittauksen objektiin ServletConfig, joka sisältää argumentit servletin alustamiseksi. Tällä objektilla on menetelmä getServletContext() palauttaa esine ServletContext, joka sisältää tietoa servletin ympäristöstä.
Servlet-ydin, service()-menetelmä
Menetelmä palvelu() on servletin sydän. Jokainen asiakkaan pyyntö johtaa yhteen menetelmäkutsuun palvelu(). Tämä menetelmä lukee pyynnön ja luo vastausviestin käyttämällä kahta argumenttia ServletRequest ja ServletResponse:
On siis kaksi tapaa siirtää tietoja asiakkaalta servletille. Ensimmäinen on arvojen välittäminen pyyntöparametreissa. Parametriarvot voidaan lisätä URL-osoitteeseen. Toinen tapa siirtää tietoja asiakkaalta servletille on InputStreamin (tai Readerin) kautta.
Kuinka menetelmä toimii palvelu() on pohjimmiltaan yksinkertainen - se luo vastauksen jokaiseen asiakaspyyntöön, joka lähetetään sille palvelimelta. Sinun on kuitenkin muistettava, että useita rinnakkaisia pyyntöjä voidaan käsitellä samanaikaisesti. Jos menetelmä palvelu() vaatii ulkoisia resursseja, kuten tiedostoja, tietokantoja, silloin on varmistettava, että resurssien käyttö on säikeen turvallista.
Servletin purkaminen, tuhoa()-menetelmä
Menetelmä tuhota() kutsutaan vapauttamaan kaikki resurssit (esim. avata tiedostoja ja tietokantayhteydet) ennen servletin purkamista. Tämä menetelmä voi olla tyhjä, jos viimeistelytoimintoja ei tarvitse suorittaa. Ennen kuin soitat menetelmälle tuhota() palvelin odottaa joko kaikkien ylläpitotoimien valmistumista tai tietyn ajan päättymistä. Tämä tarkoittaa, että menetelmä tuhota() voidaan kutsua jonkin pitkäkestoisen menetelmän suorittamisen aikana palvelu().
On tärkeää virallistaa menetelmä tuhota() siten, että vältetään tarvittavien resurssien sulkeminen ennen kaikkia puheluita palvelu() ei valmistu.
Servlet-määritys, getServletConfig() -menetelmä
Menetelmä getServletConfig() palauttaa viittauksen objektiin, joka toteuttaa rajapinnan ServletConfig. Tämä objekti tarjoaa pääsyn servlet-määritystietoihin, ts. pääsy servletin alustusparametreihin ja servlet-kontekstiobjektiin ServletContext, joka antaa pääsyn servletiin ja sen ympäristöön.
Servlet-tiedot, getServletInfo() -menetelmä
Menetelmä getServletInfo() servletin luovan ohjelmoijan määrittämä, jotta se palauttaa merkkijonon, joka sisältää tietoja servletistä, kuten servletin tekijän ja version.
ServletRequest-käyttöliittymä
ServletRequest tarjoaa asiakastiedot HTTP-pyyntöparametreista servletille, ts. tarjoaa dataa, mukaan lukien parametrien nimen ja arvot, attribuutit ja syöttövirran. Tämä tieto välitetään menetelmälle palvelu().
Seuraava esimerkki servletistä näyttää kuinka saada tietoa parametrista pyyntö menetelmä palvelu():
Puskuroitu Reader-lukija; merkkijono param1; merkkijono param2; julkinen void -palvelu (ServletRequest-pyyntö, ServletResponse-vastaus) (lukija = request.getReader(); param1 = request.getParameter("Ensimmäinen"); param2 = request.getParameter("Toinen"); )
Lisätietoa pyynnöstä on servletille saatavilla menetelmien kautta, joista tärkeimmät on esitetty seuraavassa taulukossa:
getAttribute() | Palauttaa tämän pyynnön määritetyn attribuutin arvon. |
getContentLength() | Pyydä kokoa, jos tiedossa. |
getContentType() | Palauttaa pyynnön rungon MIME-tyypin. |
getInputStream() | Palauttaa InputStreamin binääritietojen lukemista varten pyynnön rungosta. |
GetParameterNames() | Palauttaa joukon merkkijonoja, joissa on kaikkien parametrien nimet. |
getParameterValues() | Palauttaa määritetyn parametrin arvojoukon. |
getProtocol() | Palauttaa pyynnön protokollan ja version merkkijonona |
getReader() | Palauttaa BufferedReaderin tekstin hakemiseksi pyynnön rungosta. |
getRealPath() | Palauttaa määritetyn virtuaalipolun todellisen polun. |
getRemoteAddr() | Tämän pyynnön lähettäneen asiakkaan IP-osoite. |
getRemoteHost() | Tämän pyynnön lähettäneen asiakaskoneen isäntänimi. |
getScheme() | Palauttaa tämän pyynnön URL-osoitteessa käytetyn mallin (esimerkiksi https, http, ftp jne.). |
getServerName() | Tämän pyynnön hyväksyneen palvelimen isäntänimi. |
getServerPort() | Palauttaa tämän pyynnön vastaanottamiseen käytetyn portin numeron. |
ServletResponse-käyttöliittymä
Käyttöliittymä ServletResponse on työkalu tietojen lähettämiseen asiakkaalle. Kaikki tämän työkalun menetelmät palvelevat erityisesti tämän ongelman ratkaisemista:
Julkinen java.lang.String getCharacterEncoding() public void setLocale(java.util.Locale loc) julkinen java.util.Locale getLocale()
Ensimmäinen menetelmä palauttaa MIME-koodaustyypin (esimerkiksi UTF8), jossa tiedot näytetään. Kaksi toista menetelmää toimivat myös merkkisarjan kanssa. Ne osoittavat asiakirjassa käytetyn kielen (esim. venäjä).
Julkinen ServletOutputStream getOutputStream() heittää java.io.IOException
GetOutputStream-menetelmä palauttaa servletin tulosvirran. Tätä virtaa käytetään esimerkiksi binääritiedostojen tulostamiseen. Tekstidata voidaan tulostaa käyttämällä java.io.Writer-ohjelmaa:
Julkinen java.io.PrintWriter getWriter() heittää java.io.IOExceptionin
GetWriter()-menetelmä muuntaa merkkijonot automaattisesti getCharacterEncoding()- ja getLocale()-metodeissa määritetyiksi merkistöiksi.
Public void setContentLength(int len)
Metodi setContentLength asettaa HTTP-otsikkokentän "Content-Length" arvon.
Public void setContentType (merkkijonotyyppi)
SetContentType-menetelmää käytetään asiakirjan MIME-sisältötyypin lähettämiseen. HTTP-otsikkokenttä "Content-Type".
Lähtötietovirta puskuroidaan. Tämä tarkoittaa, että osa tiedoista luovutetaan asiakkaalle vasta, kun puskuri on täynnä.
Public void setBufferSize(int size) public int getBufferSize() public void flushBuffer() heittää java.io.IOException public void resetBuffer()
Yllä olevat 4 menetelmää antavat vastaavasti asettaa lähetyspuskurin koon, saada sen koon, alustaa puskurin sisällön lähettämisen asiakkaalle odottamatta sen täyttymistä ja myös tyhjentää puskurin tiedoista.
Julkinen boolean isCommitted()
IsCommitted-menetelmällä saat lipun, joka ilmaisee, onko datan lähettäminen asiakkaalle jo aloitettu. Lippu on positiivinen, jos HTTP-vastauksen otsikko on jo lähetetty.
Public void reset()
Jos HTTP-otsikkoa ei ole vielä lähetetty, nollausmenetelmä "palauttaa" HTTP-otsikon oletusarvoihinsa.
JFreeChart-kaaviot servletteissä
JFreeChart-grafiikkakirjastoa voidaan käyttää servletteissä kaavioiden luomiseen ja niiden näyttämiseen verkkosivuilla kuvina. Esitellään kuvauksen yksityiskohdat ja esimerkkejä JFreeChartin käytöstä servletissä.
Servlet grafiikkakirjastolla Chart.js
JNI servletissä
Joissakin tapauksissa voi olla tarpeen käyttää JNI:tä WEB-sovelluksessa. Esitetään esimerkki JNI:n käytöstä servletissä.
JMS-viestit servletissä
Servletiä voidaan käyttää kommunikointiin JMS viestit sovellusten välillä. Esitetään esimerkki servletin käyttämisestä JMS-viestien lähettämiseen ja lukemiseen JBoss-säiliössä.
Java Servlet on samannimisellä ohjelmointikielellä kirjoitettu palvelinpuolen ohjelma, joka vastaanottaa signaaleja asiakkaalta ja lähettää vastaukset takaisin sille. Se on avainelementti, joka muodostaa tyypillisen Java EE:n JSP:n, EJB:n, XML:n ja muiden vastaavien teknologioiden lisäksi. Sovelluksen voi pakata sisään WAR-tiedosto(Web AR chive) verkkopalvelimelle käyttöönotettaviksi. Palvelinta, joka voi ajaa Java-servletiä, kutsutaan säilöksi. Tällaisella palvelimella toimiva ohjelma voi luoda dynaamisia verkkosivuja.
Java Servlet: Perusteet
Suosituimmat ja laajimmin käytetyt säiliöt ovat Tomcat ja JBoss. Teknisesti servlet on normaali Java-luokka, jolla on laajennus Common Client-Server Protocol -protokollalle tai HTTP:lle. Käytännössä sitä käytetään pyyntöjen käsittelemiseen HttpServlet GET- ja POST-ohitusten kautta. Java Servlet -säilö sisältää Http.ServletRequest ja Http.ServletResponse, jotka ovat pyyntö-vastausobjekteja. Ja sitä käytetään yleensä yhdessä JSP:n kanssa dynaamisen sisällön luomiseen.
Tyypillinen malliskenaario:
Java-servlet-suodattimet ovat Java-laajennusten komponentteja, joita käytetään sieppaamaan ja käsittelemään pyyntöjä ennen kuin ne lähetetään servleteille ja vastataan sen koodin valmistuttua ja ennen kuin säilö lähettää vastauksen asiakkaalle.
Suodattimilla suoritetut yleiset tehtävät:
Suodattimet otetaan käyttöön ja määritetään käyttöönoton kuvaustiedostossa (web.xml). Servletit ja suodattimet eivät tunne toisistaan, joten voit lisätä tai poistaa suodattimen yksinkertaisesti muokkaamalla web.xml-tiedostoa. On mahdollista käyttää useita suodattimia yhdelle resurssille tai luoda suodatinketju web.xml:lle tai käyttää Java Servlet -suodattimia, jotka toteuttavat javax.servlet.Filter-liittymän.
Rinnakkaispyynnöt palvelimelle käsitellään säikeillä, mikä tarjoaa webin tärkeitä ominaisuuksia - monisäikeisyyden ja rinnakkaisuuden.
Päätoiminnot:
Tarve käyttää dynaamisia verkkosivuja
On monia syitä, miksi yritys haluaa luoda dynaamisia verkkosivuja lennossa, esimerkiksi silloin, kun verkkosivuston tiedot muuttuvat usein. Uutis- ja sääsivustot luottavat yleensä CGI:hen pitääkseen sisällön tuoreena ilman jatkuvaa kehittäjän huomiota. Verkkokaupan verkkosivut, joilla luetellaan tämänhetkiset hinnat ja varastotasot, käyttävät CGI:tä tämän sisällön noutamiseen pyynnöstä ja noutaakseen sen yrityksen sisäisestä infrastruktuurista.
Monilla käyttäjillä on kokemusta Java-teknologian käyttämisestä CGI-pohjaisten verkkopalvelujen luomiseen, mutta Java-servletit ovat tehokkaampia, tehokkaampia, helpompi käyttää ja halvempia kuin perinteiset CGI-vaihtoehdot.
Java Servlettien edut:
Java-ohjelmointikielen käyttöönotosta on kulunut melkein kaksikymmentä vuotta. Tänä aikana Javan ennustettiin kuolevan ja unohdettaviksi ohjelmoijat nauroivat sen hitaudelle ja resurssien ahneudelle. Mutta oli myös niitä, jotka uskoivat Javaan, he kehittivät kaikenlaisia kirjastoja, kehittivät yhteisöä, osoittivat sitkeästi, että Javalla ei ole rajoja: reaaliaikainen, sulautettu, tekoäly - kaikki on mahdollista. Päätimme olla syrjään ja tehdä pienen sarjan Java-artikkeleita tähän osioon. Mennä!
Teekannu valitsee Java
Mukaan Oracle itse, tänään virtuaalinen java kone asennettu yli kolmeen miljardiin laitteeseen. Ja nämä eivät ole vain tietokoneita ja älypuhelimia, vaan myös kameroita, televisioita, Blue-ray-soittimia, tulostimia, SIM-kortteja, pankkiautomaatteja ja jopa autoja. Tämä lista kasvaa tasaisesti ja sen mukana työnantajien tarjoukset Java-ohjelmoijille. Jo nyt Java-ohjelmoijien avoimien työpaikkojen määrä ylittää muut. Ja yritykset ovat valmiita maksamaan yhä enemmän, houkuttelemalla työntekijöitä ja järjestämällä suotuisampia työoloja.
Mihin se on hyvä?
Java-ohjelmoijia houkuttelee sen syntaksin minimalismi. Ei tarpeettomia muokkaajia tai funktiosanoja. Jopa moniperinnön puuttuminen, joka aluksi hieman hämmensi C++-ohjelmoijia, osoittautuu lopulta järkeväksi ja oikeutetuksi. Yksinkertainen logiikka, automaattinen työskentely muistin kanssa, yksityiskohtainen dokumentaatio, foorumit, joissa on vastauksia kaikenlaisiin kysymyksiin, avoin lähdekoodi - kaikki tämä antaa sinun ymmärtää nopeasti kehitysprosessin ja vähentää merkittävästi mahdollisten virheiden määrää. Jopa intialaiset talonpojat hallitsevat Jaavan parissa kuukaudessa, niin ainakin heidän diplominsa sanoo :). Lisäksi Java on tulkittu kieli. Kääntäjä muuntaa lähdekoodin ns. tavukoodiksi, joka on helppo muuntaa takaisin, mikä tekee Javasta erityisen houkuttelevan käänteissuunnittelussa.
No, aloitetaan
Java on oliokieli, mikä tarkoittaa, että kaikki muuttujat, menetelmät ja vakiot ilmoitetaan luokassa. Luokkien lisäksi on myös rajapintoja - erityinen abstrakti rakenne, jonka avulla voit kuvata objektin käyttäytymistä määrittelemättä tiettyä toteutusta. Ja jos Javassa ei ole luokkien moninkertaista periytymistä, luokka voi toteuttaa minkä tahansa määrän rajapintoja, mikä sallii yhdellä objektilla olla useita toimintoja, mutta tarjota vain osan niistä.
Tietotyypit voidaan jakaa kahteen ryhmään: yksinkertainen (int, long, char ja niin edelleen) ja objektityypit: luokat, rajapinnat, taulukot. Yksinkertaisilla tyypeillä on aina ja kaikkialla kiinteä ulottuvuus. Esimerkiksi missä tahansa arkkitehtuurissa ja missä tahansa laitteessa int vie neljä tavua muistia. Tämä on varsin kätevä laskelmissa. Tietotaulukko sisältää erityisen pituusattribuutin, joka tallentaa taulukon koon, mistä erityiskiitokset kehittäjille. Erityyppiset tiedot välitetään menetelmille eri tavalla. Yksinkertaiset tyypit välitetään aina arvon mukaan. Objekti - aina viittauksella muistin säästämiseksi. Tämä tarkoittaa, että jos annamme in a = 10 ja muutamme sen arvoksi 5 kutsutussa menetelmässä, niin alkuperäisessä menetelmässä a on edelleen 10. Mutta jos muutamme objektin ominaisuutta, se muuttuu alkuperäisessä menetelmässä. .
Muista muisto
Vaikka Java-ohjelmoija on vapautettu tarpeesta varata ja vapauttaa muistia, tietämättömyys joistakin käyttöominaisuuksista virtuaalikone ja roskankerääjä voi helposti muuttaa ohjelmasi kyltymättömäksi hirviöksi, joka kuluttaa suorittimen aikaa ja kaiken käytettävissä olevan muistin.
Kun luot uutta taulukkoa, muista aina, että on paljon helpompi luoda useita pieniä muistikappaleita kuin yksi suuri. Muussa tapauksessa saatat joutua Muisti täynnä -virheeseen, mikä tarkoittaa karkeasti, että sinulla oli muistia, mutta se on poissa.
Monet ohjelmoijat, kun he siirtyvät Javaan ja oppivat automaattisen muistin puhdistuksen, alkavat luoda objekteja valtavia määriä toivoen, että kaikki selviää itsestään. Samaan aikaan roskakori on kuin kone, joka pystyy poistamaan vain talon lähellä olevaan roskakoriin heitetyn roskat. Jos et enää tarvitse joitain tietoja, sinun ei kannata tallentaa niitä varmuuden vuoksi, kuten kasa vanhoja postikortteja - määritä dataosoittimelle nolla ja auta vahtimestaria siivoamaan :). On myös hyvä tyhjentää luettelo, jos et enää tarvitse sitä. Muista, että objekti säilyy muistissa niin kauan kuin koodissa on viittauksia siihen. Vaikka ohjelmasi pyörii 16 keikan muistilla, eikä se ole vaarassa kaatua Muisti täynnä, ylimääräisen muistin vuoksi siitä tulee entistä kömpelömpää ja hitaampaa. 99 % käyttäjien valituksista hitaista Java-ohjelmista johtuu tehottomasta kirjoituksesta lähdekoodi. Jos sinun on jatkuvasti luotava objekteja, joita käytetään nopeasti ja joita ei enää tarvita, kuten monia pieniä viestejä, harkitse poolin luomista, joka tallentaa useita esiintymiä toistuvaa käyttöä varten. Muista, että objektin luominen ja poistaminen on kallis toimenpide.
Mennään töihin, herrat.
Yksi esimerkki on tuhannen sanan arvoinen. Voit selata käsikirjaa ja katsoa tavallisia tervehdyssanoja ilman meitä, joten oletamme, että olet jo tehnyt tämän ja olet valmis toteuttamaan mielenkiintoisemman esimerkin.
Sinä ja minä harjoitamme Javan palvelinpuolen sovellusta ja kirjoitamme pienen ohjelman käyttäjien "seurantaan". sosiaaliset verkostot. Tätä varten sinun ei tarvitse edes hankkia työtä NSA:lta - käyttäjät julkaisevat kaiken itselleen, ja meidän tarvitsee vain vastaanottaa nämä tiedot, systematisoida ja näyttää ne kauniisti. Otetaan yksi suosituimmista sosiaalipalvelut, esimerkiksi foursquare, ja piirrä ystäviemme liikkeet kartalle.
Katsotaan ensin, mitä voimme saada neljästä neliöstä. Tutkittuamme kehittäjien sivut, kiinnitämme huomiomme kahteen tapaan:
- https://developer.foursquare.com/docs/users/checkins - paikat, joissa käyttäjä on käynyt. Valitettavasti toistaiseksi sitä tuetaan vain ohjelmaan rekisteröityneelle käyttäjälle, ja on huhuttu, että toteutusrajoitusten vuoksi se pysyy sellaisena;
- https://developer.foursquare.com/docs/checkins/recent - paikat, joissa rekisteröityneen käyttäjän ystävät ovat vierailleet. Jos pelaat vähän tällä toiminnolla, selviää surullinen tosiasia: jokaiselle ystävälle palautetaan täsmälleen yksi paikka - viimeinen paikka, jossa hän kirjautui sisään.
Käyttääksesi foursquare-sovellusliittymää sinun on rekisteröitävä tuleva sovelluksemme, mene tähän osoitteeseen: https://ru.foursquare.com/developers/register ja täytä kentät (kyllä, sinun on myös rekisteröidyttävä itse foursquare-sovellukseen, mutta voit tehdä sen hienosti ilman minua).
Tärkeistä kentistä voimme huomioida vain "Sovelluksen nimi", "Lataa / tervetulosivun URL-osoite" (kirjoita tähän mukautettu verkko-osoite) ja "Uudelleenohjaus-URI(t)" - tämä on osoite, johon palvelin lähettää meille rekisteröinnin jälkeen. Kirjoitamme halutun arvon tähän myöhemmin, mutta toistaiseksi voit kirjoittaa minkä tahansa verkko-osoitteen. Napsauta "Tallenna", ja seurantasovelluksemme on rekisteröity onnistuneesti.
Pilviin nouseminen
Captain Obvious ilmaisee, että mikä tahansa palvelinsovellus vaatii palvelimen toimiakseen. Palvelimen kasvattaminen yksin on tuskaa, joten käytämme tällä hetkellä suosittuja pilviratkaisuja. Pilviä sponsoroi Google Corporation, koska heidän Google App Enginensä on ilmainen ja melko helppo asentaa ja käyttää. Siirry ensin tänne ja lataa Google App Engine SDK Javalle.
Nyt voit aloittaa projektin luomisen. Java-kehitykseen käytän IntelliJ IDEA:ta, mutta voit käyttää ilmaista ja yhtä tunnettua Eclipse-ympäristöä.
Valitaan uusi Java-projekti. Kutsutaan sitä nsa_trackeriksi.
Merkitse seuraavassa välilehdessä Web Application ja Google App Engine vasemmalla ja osoita polku aiemmin ladatulle ja pakkaamattomalle App Engine SDK:lle.
Istu nyt alas ja anna IDE:n tehdä asiansa. Jos valitsit IDEA:n ja teit kaiken oikein, tuloksena näet valmiin projektin, joka käynnistettäessä avaa selainikkunan, jossa on tyhjä sisältö. Voit aloittaa koodauksen.
Aloitetaan etsiminen
Joten meillä on projektikansio, joka sisältää src-kansion. Laitamme lähteet sinne. Java-lähteet on ryhmitelty paketteihin. Paketti on levyllä oleva kansio. Paketteja tarvitaan, jotta kaikkia lähteitä ei upota kasaan, vaan ne erotetaan toisistaan logiikan periaatteiden ohjaamana. Esimerkiksi käyttöliittymään liittyvä koodi sijoitettaisiin loogisesti UI-pakettiin, verkkovuorovaikutukset verkkopakettiin. Tämä helpottaa huomattavasti projektin kehittämistä ja tukemista myöhemmin. Historiallisesti käytäntönä on ollut aloittaa pakettirakenne yrityksen nimellä, jota seuraa ohjelman nimi. Tämä auttaa sinua tunnistamaan lähteemme helposti samankaltaisten joukosta tulevaisuudessa. Ohjelmaamme varten luomme paketin org.nsa.tracker. Luomme siihen luokkia.
Servlettejä käytetään palvelimella käyttäjien pyyntöjen käsittelyyn. Servlet on luokka, joka pääsääntöisesti perii HttpServletin ja toimii pyyntö-vastaus -periaatteella. Kaikki mitä tarvitaan, on ohittaa doGet-menetelmä. Käyttäjän pyynnöstä meidän tulee kirjautua sisään foursquareen, ladata ystävien kirjautumisluettelo ja ohjata pyyntö kartan sisältävälle sivulle.
Foursquare API:n kanssa työskentelyyn käytämme ilmaista foursquare-api-java-kirjastoa, jonka voi ottaa täältä. Java-kirjasto on ZIP-arkisto, jossa on jar-laajennus, joka sisältää käännettyjä Java-luokkia, jotka toteuttavat tiettyjä toimintoja. Valtuutusta varten tarvitsemme ClientId:n ja ClientSecretin, jotka hankitaan hakemuksen rekisteröintivaiheessa foursquare-muodossa. Koska nämä parametrit eivät muutu ohjelman suorituksen aikana, määritämme ne vakioiksi.
Yksityinen staattinen lopullinen merkkijono CLIENT_ID = "FAKE_CLIENT_ID"; yksityinen staattinen lopullinen merkkijono CLIENT_SECRET = "FAKE_CLIENT_SECRET";
Final tarkoittaa, että tälle muuttujalle on määritetty lopullinen arvo, jota ei voi muuttaa. Static antaa muuttujan kaikkien tietyn luokan esiintymien saataville. Käyttämällä valtuutusesimerkkiä foursquare-api-java-kirjastosta, saamme suunnilleen seuraavan koodin:
Suojattu void doGet(HttpServletRequest req, HttpServletResponse resp) heittää ServletExceptionin, IOExceptionin ( FoursquareApi foursquareApi = new FoursquareApi(CLIENT_ID, CLIENT_SECRET, CALLBACK_URL); Merkkijono = "Parcode" = (" req."); Siirry rekisteröintisivulle resp.sendRedirect(foursquareApi.getAuthenticationUrl()); else ( try ( foursquareApi.authenticateCode(code); // Rekisteröinti onnistui, lataa tulostiedot)
Huomaa "heittää ServletExceptionin, IOExceptionin" menetelmän määrittelyssä. Tämä rivi tarkoittaa, että menetelmä voi mahdollisesti aiheuttaa jonkin näistä poikkeuksista. Poikkeus Javassa on objekti, joka ilmaisee poikkeuksellisen tilanteen. Ne ovat todennettavissa ja ei-todennettavissa. Valitut poikkeukset on käsiteltävä ympäröimällä osa koodista try-catch-esteellä tai ohitettava edellä. Valitsemattomia poikkeuksia ei yleensä käsitellä, koska ne tapahtuvat, kun ohjelma ei pysty palauttamaan tilaansa. Tässä menetelmässä käsittelemme vain FoursquareApiExceptionin.
Kun verkkopalvelin vastaanottaa sovelluksen pyynnön, se käyttää käyttöönottokuvaajaa sovittaakseen pyynnön URL-osoitteen koodiin, jonka tulee käsitellä pyyntö. Käyttöönoton kuvaaja on XML-tiedosto nimeltä web.xml. Lisätään kuvaus seurantaservletistä.
Nyt /track-pyynnöt käsitellään servletissämme nimeltä TrackerServlet. Voit asettaa Callback Url -parametrin oikeaan arvoon http://localhost:8080/track.
Voit näyttää tulokset käyttämällä Static Maps -sovellusliittymää, jonka ystävällisesti tarjoaa sama Google-yritys (https://developers.google.com/maps/documentation/staticmaps/). Servletimme luo yksinkertaisen HTML-sivun ja palauttaa sen vastauksena käyttäjän pyynnöstä.
StringBuilder sb = new StringBuilder("
- "); indeksi = 1; for (Tarkista sisäänkirjautuminen: result.getResult()) ( sb.append("
Sivun luomiseen käytetään StringBuilder-luokkaa, mikä johtuu siitä, että Javan merkkijonot ovat muuttumattomia objekteja. Kun ketjutetaan merkkijonoja +-operaattorilla. on luotu uusi rivi mielessä. StringBuilder säästää muistia käyttämällä char-taulukkoa tallentaakseen yhdistettävät merkkijonot. Lähetämme vastauksen käyttäjälle:
Tavu resultBytes = sb.toString().getBytes("utf-8"); resp.setContentLength(resultBytes.length); resp.getOutputStream().write(resultBytes);
...Ja kaikki on valmista. Käynnistämme sen ja näemme jotain samanlaista kuin kuva, jossa lukee "Ohjelman tulos".
Mitä seuraavaksi?
Sovellusta voidaan parantaa, esimerkiksi erottaa tiedonkeruu ja näyttö. Siirrä tiedonkeruu erilliseen palveluun, joka toimii jatkuvasti ja muistaa kaikki käyttäjien liikkeet tietokannassa. Sitten on mahdollista näyttää ei yksittäisiä pisteitä, vaan yhdistetty reitti. Kun tutkit hieman foursquare-sovellusliittymää, voit poimia entistä enemmän tietoa käyttäjien toiminnasta.
Mutta toivon, että onnistuin pääasiassa: vakuuttamaan sinut siitä, että Java on yksinkertainen ja siisti. Nähdään kuukauden päästä!
Kirjat Java-ohjelmoijalle
Suosittelemme aloittamaan kielen opiskelun kirjan "Java. Java: Herbert Schildtin opas aloittelijoille. Seuraava taso on "Java. Täydellinen opas» häneltä, ja voit oppia lisää servletistä Bruce W. Perryn kirjasta "Java Servlets and JSP: A Collection of Recipes" (Java Servlet and JSP Cookbook).