Servlety. Píšeme servlet na špehovanie používateľov sociálnych sietí Vami zadané údaje

Java Servlet je program na strane servera napísaný v programovacom jazyku s rovnakým názvom, ktorý prijíma signály od klienta a odosiela mu odpovede. Je to kľúčový prvok, ktorý popri JSP, EJB, XML a ďalších súvisiacich technológiách tvorí typický Java EE. Aplikácia môže byť zabalená do súboru WAR (Web AR chive) na nasadenie na webovom serveri. Server, ktorý môže spúšťať servlet Java, sa nazýva kontajner. Program, ktorý beží na takomto serveri, dokáže vytvárať dynamické webové stránky.

Základy Java Servlet

Najpopulárnejšie a najpoužívanejšie kontajnery sú Tomcat a JBoss. Technicky je Servlet normálna trieda Java, ktorá má rozšírenie pre Common Client/Server Protocol alebo HTTP. V praxi sa používa na spracovanie požiadaviek prostredníctvom prepisov HttpServlet GET a POST. Kontajner Java Servlet poskytuje Http.ServletRequest a Http.ServletResponse, čo sú objekty typu žiadosť-odpoveď. A zvyčajne sa používa v spojení s JSP na generovanie dynamického obsahu.

Typický modelový scenár:

  • JSP predloží používateľovi formulár na zadanie údajov.
  • Servlet prijme vstup, spracuje ho a odošle odpoveď.
  • Pre kvalitnú prácu používa špeciálne filtre.
  • Filtre servletov Java sú doplnky Java, ktoré sa používajú na zachytenie a spracovanie požiadaviek pred ich odoslaním na servlet a odpoveďou po dokončení jeho kódu a predtým, ako kontajner odošle odpoveď späť klientovi.

    Bežné úlohy, ktoré je potrebné vykonať s filtrami:

  • Registrácia parametrov dotazu na registráciu súborov.
  • Autentifikácia a autorizácia žiadosti o zdroj.
  • Formátovanie tela požiadavky alebo hlavičky pred odoslaním na servlet.
  • Kompresia údajov odozvy odoslaných klientovi.
  • Zmenená odpoveď, pridanie niektorých cookies.
  • Informácie o hlavičke Java Servlet.
  • Filtre sú zahrnuté a nakonfigurované v súbore deskriptora nasadenia (web.xml). Servlety a filtre o sebe nevedia, takže môžete pridať alebo odstrániť filter jednoduchou úpravou web.xml. Je prijateľné mať viacero filtrov pre jeden zdroj alebo reťazové filtre pre web.xml alebo spúšťať filtre Java Servlet implementáciou rozhrania javax.servlet.Filter.

    Paralelné požiadavky na server sú spracovávané vláknami, čo poskytuje dôležité vlastnosti webu - multithreading a paralelizmus.

    Hlavné funkcie:

  • Prenosnosť. Pretože Java je nezávislá na platforme, to isté platí pre servlety. Napríklad je možné ho postaviť na operačnom systéme Windows, takže vývojári GlassFish ho používajú ako webový server a potom ho môžu spustiť na akomkoľvek inom OS, ako je Unix, Linux s webovým serverom Apache Java Servlet. Táto funkcia ho robí prenosným a to je jeho hlavná výhoda oproti CGI.
  • Efektívnosť a škálovateľnosť. Akonáhle je servlet nasadený a načítaný na webovom serveri, môže okamžite začať vykonávať požiadavky klientov. Volá sa pomocou ľahkého vlákna, takže pomocou funkcie multithreadingu Java je možné vyplniť viacero požiadaviek klientov súčasne. Na rozdiel od CGI, kde server iniciuje nový proces pre každú požiadavku klienta.
  • Spoľahlivosť. Vďaka zdedeniu špičkových funkcií Java, ako je zber odpadu, spracovanie výnimiek, bezpečnostný manažér Java a iné, je menej náchylný na problémy so správou a úniky pamäte. Vďaka tomu je vývoj aplikácie v nej bezpečný a bezchybný.
  • Potreba dynamických webových stránok

    Existuje mnoho dôvodov, prečo by firma chcela vytvárať dynamické webové stránky za chodu, napríklad keď sa údaje na webovej lokalite často menia. Stránky so správami a počasím sa zvyčajne spoliehajú na CGI, aby udržali obsah čerstvý bez neustálej pozornosti vývojárov. Webové stránky elektronického obchodu, ktoré uvádzajú aktuálne ceny a úrovne zásob, využívajú CGI na získanie tohto obsahu na požiadanie, pričom ho získavajú z internej infraštruktúry spoločnosti.

    Mnoho používateľov má skúsenosti s používaním technológie Java na vytváranie webových služieb založených na CGI, ale servlety Java sú efektívnejšie, výkonnejšie, ľahšie sa používajú a sú lacnejšie ako tradičné alternatívy CGI.

    Výhody Java servletov:

  • Efektívnosť. V tradičnom CGI každá požiadavka HTTP spúšťa nový proces CGI. Aj keď je jeho kód dobre implementovaný, často dochádza k značnej réžii, a to nielen pri spustení procesu, ale aj počas jeho vykonávania. Keď sa použijú servlety, JVM zostane načítaný v pamäti a každú požiadavku spracuje vlákno Java. Ako príklad Java Servlet, ak existuje X počet súbežných požiadaviek v tradičnom modeli CGI, znamená to, že kód pre program sa načíta do pamäte X-krát. To sa stáva nadmerným zaťažením webového servera. V prostredí servletov však existuje X vlákien, kde beží iba jedna kópia jeho triedy. Výsledkom je zvýšená efektivita a škálovateľnosť na viacerých platformách.
  • Pohodlie. Pri používaní programu nemá zmysel učiť sa nový jazyk, ako napríklad Perl, len na vykonávanie funkcií CGI. Okrem toho majú servlety bohatú infraštruktúru pre mnohé úlohy súvisiace s HTML, čo výrazne urýchľuje proces vývoja.
  • Sila – Bohužiaľ, tradičné CGI skripty zanechávajú veľa požiadaviek. Ich bežné programy napríklad nemôžu komunikovať priamo s webovými servermi, čo znamená, že musí byť vytvorené celé rozhranie. Servlety môžu komunikovať priamo s webovými servermi, čím uľahčujú operácie, ktoré vyžadujú priamy prístup k úložiskám údajov. Sú tiež jedinečné, pretože môžu komunikovať s inými servletmi a udržiavať informácie medzi požiadavkami, vďaka čomu je sledovanie relácie mimoriadne jednoduché.
  • Prenosnosť Java sa rozširuje priamo na servlety. V skutočnosti takmer každý hlavný webový server, ktorý sa v súčasnosti používa, podporuje servlety Java buď priamo alebo prostredníctvom zásuvného modulu.
  • Šetrnosť. Z hľadiska vývoja je implementácia servletov oveľa lacnejšia ako iné možnosti, ktoré vyžadujú vlastné kódovanie na správnu komunikáciu s webovými servermi. Presmerovanie Java Servlet je pripravené na použitie a môže čo najviac znížiť náklady na podnikanie bez obetovania výhod dynamického obsahu.
  • Servlet je java program, ktorý beží na strane servera webovej aplikácie. Tak ako aplety dynamicky rozširujú funkčnosť webového prehliadača, servlety dynamicky rozširujú funkčnosť webového servera.

    práca servlet"a dá sa opísať takto: keď príde požiadavka od klienta, webový server môže určiť, ktorý servlet je potrebné vykonať pomocou špeciálneho konfiguračného súboru. Potom webový server spustí JVM, ktorý následne spustí servlet." Servlet spracuje požiadavku a odovzdá obsah webového servera (prípadne vo forme HTML stránky). Webový server odošle odpoveď (HTML stránku vygenerovanú servletom) klientovi.

    WEB server je v podstate druh kontajnera, ktorý sa sťahuje servlet"s, vykoná ich a po prijatí výsledku ich odošle klientovi.

    Servlet v architektúre webových aplikácií

    Vďaka svojej sile a flexibilite, servlet"s môžu hrať významnú úlohu v architektúre systému. Môžu vykonávať aplikačné úlohy určené pre strednú vrstvu, fungovať ako proxy server pre klienta a dokonca zlepšiť funkčnosť strednej vrstvy pridaním podpory nových protokolov a Ďalšie funkcie Stredná vrstva funguje ako aplikačný server v takzvanom trojvrstvovom systéme klient-server a nachádza sa medzi „ľahkým“ klientom, ako je webový prehliadač, a zdrojom údajov.

    Servlet ako proxy

    Na podporu apletov môžu servlety fungovať ako ich proxy servery. To môže byť dôležité, pretože bezpečnostný systém Java umožňuje iba appletom pripojiť sa k serveru, z ktorého boli stiahnuté. Ak sa aplet potrebuje pripojiť k databázovému serveru umiestnenému na inom počítači, servlet môže vytvoriť toto pripojenie pre applet.

    Dočasné a trvalé servlet"s

    Servlety je možné spustiť a zastaviť pre každú požiadavku klienta. Môžu byť spustené aj pri spustení webového servera a existujú, kým sa nezastaví. Dočasné servlet"S sa načítavajú na požiadanie a ponúkajú dobrý spôsob, ako ušetriť prostriedky servera pre zriedka používané funkcie. Trvalé servlety sa načítajú pri spustení webového servera a trvajú, kým sa nezastaví. Servlety sa inštalujú ako trvalé rozšírenia na server, ak náklady na spustenie sú veľmi vysoké (napr. nadviazanie databázového pripojenia), ak ponúkajú trvalú funkčnosť na strane servera (napr. služba RMI), alebo v prípadoch, keď potrebujú čo najrýchlejšie reagovať na požiadavky klientov. Neexistuje žiadny špecifický kód na priradenie servlet ale trvalé alebo dočasné; toto je funkcia nastavenia webového servera.

    Životný cyklus servletu, javax.servlet.Servlet

    Servlety bežia na platforme webového servera ako súčasť rovnakého procesu ako samotný webový server. Webový server je zodpovedný za inicializáciu, volanie a zničenie každej inštancie servletu. Webový server komunikuje so servletom prostredníctvom jednoduchého rozhrania: javax.servlet.Servlet.

    Rozhranie javax.servlet.Servlet obsahuje tri hlavné metódy:

    • init()
    • služba()
    • zničiť ()

    a dve pomocné metódy:

    • getServletConfig()
    • getServletInfo()

    Podobnosti medzi rozhraniami servlet"a applet Java je zrejmý. Tak bol navrhnutý! Java servlety sú pre webové servery tým, čím sú aplety pre webové prehliadače. Applet beží vo webovom prehliadači a vykonáva akcie na základe jeho požiadavky cez špeciálne rozhranie. Servlet robí to isté pri práci na webovom serveri.

    Inicializácia servletu, metóda init().

    Pri prvom načítaní servletu sa zavolá metóda init(). To umožňuje servletu vykonávať akúkoľvek inštalačnú prácu, ako je otváranie súborov alebo vytváranie pripojení k ich serverom. Ak je servlet natrvalo nainštalovaný na serveri, načíta sa pri spustení servera. V opačnom prípade server vyvolá servlet pri prvej požiadavke klienta na vykonanie služby poskytovanej týmto servletom.

    Je zaručené, že metóda init() skončí pred akýmkoľvek iným volaním servletu, ako je napríklad volanie metódy služba(). poznač si to init() bude zavolaný iba raz; nezavolá sa, kým sa servlet neuvoľní a potom ho server znova nenačíta.

    Metóda init() berie jeden argument - odkaz na objekt ServletConfig, ktorý obsahuje argumenty na inicializáciu servletu. Tento objekt má metódu getServletContext(), ktorý vráti objekt ServletContext A, ktoré obsahuje informácie o prostredí servletu.

    Jadro servletu, metóda service().

    Metóda služba() je srdcom servletu. Každá požiadavka od klienta vedie k jednému volaniu metódy služba(). Táto metóda prečíta požiadavku a vygeneruje správu s odpoveďou pomocou svojich dvoch argumentov ServletRequest a ServletResponse:

    Existujú teda dva spôsoby, ako odovzdať informácie z klienta do servletu. Prvým je odovzdávanie hodnôt v parametroch požiadavky. Hodnoty parametrov je možné vložiť do adresy URL. Druhý spôsob, ako odovzdať informácie z klienta do servletu, je cez InputStream (alebo Reader).

    Operácia metódy služba() je v podstate jednoduchý – vytvára odpoveď na každú požiadavku klienta, ktorá mu bola odovzdaná zo servera. Majte však na pamäti, že môže byť súčasne spracovávaných niekoľko paralelných požiadaviek. Ak metóda služba() vyžaduje akékoľvek externé zdroje, ako sú súbory, databázy, potom je potrebné zabezpečiť, aby bol prístup k zdrojom bezpečný pre vlákna.

    Uvoľnenie servletu, metóda zničit().

    Metóda zničiť () volaný na uvoľnenie všetkých prostriedkov (ako sú otvorené súbory a databázové pripojenia) pred uvoľnením servletu. Táto metóda môže byť prázdna, ak nie je potrebné vykonávať žiadne konečné operácie. Pred volaním metódy zničiť () server čaká buď na dokončenie všetkých servisných operácií, alebo na uplynutie určitého času. To znamená, že metóda zničiť () možno volať počas vykonávania akejkoľvek zdĺhavej metódy služba().

    Je dôležité formalizovať metódu zničiť () takým spôsobom, aby sa predišlo uzavretiu potrebných zdrojov až do všetkých hovorov služba() neskončí.

    Konfigurácia servletu, metóda getServletConfig().

    Metóda getServletConfig() vráti odkaz na objekt, ktorý implementuje rozhranie ServletConfig. Tento objekt poskytuje prístup k informáciám o konfigurácii servletu, t.j. prístup k parametrom inicializácie servletu a objektu kontextu servletu ServletContext, ktorý umožňuje prístup k servletu a jeho prostrediu.

    Informácie o servlete, metóda getServletInfo().

    Metóda getServletInfo() definované programátorom vytvárajúcim servlet, aby vrátil reťazec obsahujúci informácie o servlete, ako je autor a verzia servletu.

    Rozhranie ServletRequest

    ServletRequest poskytuje klientovi informácie o parametroch HTTP požiadavky servletu, t.j. poskytuje údaje vrátane názvu a hodnôt parametrov, atribútov a vstupného toku. Tieto informácie sa odovzdávajú metóde služba().

    Ďalšie príklad servletu ukazuje, ako získať informácie z parametra žiadosť metóda služba():

    čítačka BufferedReader; String param1; String param2; public void service (požiadavka ServletRequest, odpoveď ServletResponse) ( reader = request.getReader(); param1 = request.getParameter("First"); param2 = request.getParameter("Second"); )

    Ďalšie informácie o požiadavke má servlet k dispozícii prostredníctvom metód, z ktorých hlavné sú uvedené v nasledujúcej tabuľke:

    getAttribute() Vráti hodnotu zadaného atribútu tejto požiadavky.
    getContentLength() Veľkosť požiadavky, ak je známa.
    getContentType() Vráti typ MIME tela požiadavky.
    getInputStream() Vráti InputStream na čítanie binárnych údajov z tela požiadavky.
    GetParameterNames() Vráti pole reťazcov s názvami všetkých parametrov.
    getParameterValues() Vráti pole hodnôt pre zadaný parameter.
    getProtocol() Vráti protokol a verziu požiadavky ako reťazec formulára /..
    getReader() Vráti BufferedReader na prijatie textu z tela požiadavky.
    getRealPath() Vráti skutočnú cestu pre zadanú virtuálnu cestu.
    getRemoteAddr() IP adresa klienta, ktorý odoslal túto požiadavku.
    getRemoteHost() Názov hostiteľa klientskeho počítača, ktorý odoslal požiadavku.
    getScheme() Vráti schému použitú v adrese URL tejto požiadavky (napríklad https, http, ftp atď.).
    getServerName() Názov hostiteľa servera, ktorý prijal túto požiadavku.
    getServerPort() Vráti číslo portu použité na prijatie tejto požiadavky.

    Rozhranie ServletResponse

    Rozhranie ServletResponse je nástroj na odosielanie dát klientovi. Všetky metódy tohto nástroja slúžia presne na túto úlohu:

    Public java.lang.String getCharacterEncoding() public void setLocale(java.util.Locale loc) public java.util.Locale getLocale()

    Prvá metóda vráti typ kódovania MIME (napríklad UTF8), v ktorom budú informácie zobrazené. Druhé dve metódy tiež pracujú so znakovou sadou. Označujú jazyk použitý v dokumente (napríklad ruština).

    Verejný ServletOutputStream getOutputStream() vyvolá výnimku java.io.IOException

    Metóda getOutputStream vracia výstupný tok pre servlet. Tento prúd sa používa napríklad na výstup binárnych súborov. Textové údaje možno vygenerovať pomocou java.io.Writer:

    Verejná java.io.PrintWriter getWriter() vyvolá výnimku java.io.IOException

    Metóda getWriter() automaticky konvertuje reťazce na znakovú sadu špecifikovanú v metódach getCharacterEncoding() a getLocale().

    public void setLength(int len)

    Metóda setContentLength nastavuje hodnotu poľa hlavičky HTTP "Content-Length"

    public void setContentType (typ reťazca)

    Metóda setContentType sa používa na odoslanie typu obsahu MIME dokumentu. Pole hlavičky HTTP "Content-Type".

    Výstupný tok sa ukladá do vyrovnávacej pamäte. To znamená, že časť údajov bude klientovi odoslaná až po naplnení vyrovnávacej pamäte.

    public void setBufferSize(int size) public int getBufferSize() public void flushBuffer() vyvolá java.io.IOException public void resetBuffer()

    Vyššie uvedené 4 metódy umožňujú nastaviť veľkosť vyrovnávacej pamäte na odosielanie, získať jej veľkosť, inicializovať odosielanie obsahu vyrovnávacej pamäte klientovi bez čakania na jej naplnenie a vymazať túto vyrovnávaciu pamäť z údajov.

    Verejná logická hodnota isCommitted()

    Pomocou metódy isCommitted môžete získať príznak, či už sa začalo odosielanie údajov klientovi. Príznak bude kladný, ak už bola odoslaná hlavička odpovede HTTP.

    public void reset()

    Ak hlavička HTTP ešte nebola odoslaná, metóda reset "resetuje" hlavičku HTTP na predvolené hodnoty.

    Grafy JFreeChart v servletoch

    Grafickú knižnicu JFreeChart možno použiť v servletoch na vytváranie grafov a ich zobrazovanie ako obrázky na webových stránkach. Uvádzajú sa podrobnosti popisu a príklady použitia JFreeChart v servletoch.

    Servlet s grafickou knižnicou Chart.js

    JNI v Servlet

    V niektorých prípadoch možno budete musieť použiť JNI vo webovej aplikácii. Je uvedený príklad použitia JNI v servletoch.

    Správy JMS v servlete

    Servlet je možné použiť na výmenu JMS správy medzi aplikáciami. Je poskytnutý príklad použitia servletu na odosielanie a čítanie správ JMS v kontajneri JBoss.

    Servlety sú programy Java, ktoré bežia na strane servera webovej aplikácie. Tak ako aplety dynamicky rozširujú funkčnosť webového prehliadača, servlety dynamicky rozširujú funkčnosť webového servera. Hoci servlety môžu obsluhovať akúkoľvek požiadavku, bežne sa používajú na rozšírenie webových serverov. Pre takéto aplikácie technológia Java Servlet definuje triedy servletov špecifické pre HTTP. Balíky javax.servlet a javax.servlet.http poskytujú rozhrania a triedy na vytváranie servletov.

    • Aká je štruktúra webového projektu?

    • Čo je kontajner na servlety? Životný cyklus servletov.

    Kontajner servletov je program, ktorý riadi životný cyklus servletov.
    Životný cyklus servletu: je riadený kontajnerom servletu, pri prvom prístupe k servletu sa načíta do pamäte a zavolá sa metóda init(). Počas behu aplikácie sa volajú metódy service() na spracovanie požiadaviek klientov. Keď sa aplikácia ukončí, zavolá sa metóda cancel() a servlet sa uvoľní z pamäte.

    • Aké sú úlohy, funkčnosť kontajnera servletov?

    Kontajner servletu môže fungovať ako úplný samostatný webový server, poskytovať stránky inému webovému serveru, ako je Apache, alebo sa môže integrovať do aplikačného servera Java EE. Zabezpečuje výmenu dát medzi servletom a klientmi, vykonáva také funkcie, ako je vytváranie softvérového prostredia pre fungujúci servlet, identifikácia a autorizácia klientov, organizácia relácie pre každého z nich.

    • Ako sa sendRedirect() líši od forward()?

    Ak chcete volať JSP pomocou relatívnej cesty, použite metódu forward(), ak chcete získať prístup k JSP pomocou absolútnej cesty, použite metódu sendRedirect(). Rozdiel medzi týmito metódami je v tom, že už existujúci objekt požiadavky sa odovzdá pomocou metódy forward() a pri volaní metódy sendRedirect() sa vytvorí nová požiadavka. Informácie v druhom prípade by sa mali prenášať s inými objektmi. Metóda forward() je navyše rýchlejšia.

    • Čo viete o filtroch servletov?

    Implementácia rozhrania Filter umožňuje vytvoriť objekt, ktorý zachytí požiadavku, dokáže transformovať hlavičku a obsah požiadavky klienta. Filtre nevytvárajú požiadavku ani odpoveď, ale iba ich upravujú. Filter predbežne spracuje požiadavku predtým, ako zasiahne servlet, a potom (ak je to potrebné) spracuje odpoveď zo servletu. Filter môže interagovať s rôznymi typmi zdrojov, najmä so servletmi a stránkami JSP. Filtre servletov môžu:

    • zachytiť iniciáciu servletu pred spustením servletu.
    • určiť obsah požiadavky pred vyvolaním servletu.
    • upraviť hlavičky a údaje požiadavky, v ktorých je zabalená prichádzajúca požiadavka.
    • upraviť hlavičky a údaje odpovede, v ktorých je prijatá odpoveď zabalená.
    • zachytiť spustenie servletu po volaní na servlet.

    Filter servletov možno nakonfigurovať tak, aby fungoval na jednom servlete alebo skupine servletov. Základom pre tvorbu filtrov je rozhranie javax.servlet.Filter, ktoré implementuje tri metódy:

    • void init(FilterConfig config) vyhodí ServletException;
    • void zničit();
    • void doFilter(požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) vyvolá IOException, ServletException;

    Pred spustením filtra sa zavolá metóda init() a nastaví konfiguračný objekt filtra. Metóda doFilter vykonáva skutočnú prácu filtra. Server teda raz zavolá init() na spustenie filtra a potom zavolá doFilter() toľkokrát, koľkokrát je priamo na tento filter odoslaných požiadaviek. Keď filter dokončí svoju prácu, zavolá sa metóda cancel().

    • Prečo potrebujeme poslucháčov v servletoch?

    Poslucháči kontextu a relácie sú triedy, ktoré môžu sledovať, kedy bol kontext alebo relácia inicializovaná, alebo sledovať, kedy by mala byť zničená a kedy boli atribúty pridané alebo odstránené z kontextu alebo relácie. Servlet 2.4 rozširuje model poslucháča požiadaviek tak, aby sledoval, ako je požiadavka vytvorená a zničená a ako sa atribúty pridávajú a odstraňovajú zo servletu. Servlet 2.4 pridal nasledujúce triedy:

    • ServletRequestListener
    • ServletRequestEvent
    • ServletRequestAttributeListener
    • ServletRequestAttributeEvent

    • Ako spracovať výnimky vyvolané iným servletom v aplikácii?

    Keďže prehliadač rozumie iba HTML, keď aplikácia vyvolá výnimku, kontajner servletu túto výnimku spracuje a vygeneruje HTML odpoveď. Je to podobné ako pri chybových kódoch ako 404, 403 atď. Servlet API poskytuje podporu pre natívne servlety na spracovanie výnimiek a chýb, ktoré môžeme nastaviť v deskriptore nasadenia. Hlavnou úlohou takýchto servletov je spracovať chybu alebo výnimku a odoslať používateľovi odpoveď HTML čitateľnú pre človeka. Môžete napríklad uviesť odkaz na hlavnú stránku, ako aj popis niektorých podrobností o chybe.

    • Čo je deskriptor nasadenia?

    Deskriptor nasadenia je konfiguračný súbor artefaktu, ktorý bude nasadený do kontajnera servletu. V špecifikácii Java Platform, Enterprise Edition deskriptor nasadenia opisuje, ako sa má komponent, modul alebo aplikácia (napríklad webová alebo podniková aplikácia) nasadiť.

    Tento konfiguračný súbor špecifikuje voľby nasadenia pre modul alebo aplikáciu so špecifickými nastaveniami, bezpečnostnými voľbami a popisuje špecifické konfiguračné požiadavky. Syntax pre súbory deskriptorov nasadenia je XML.

    • Ako implementovať spustenie servletu so spustením aplikácie?

    Kontajner servletu zvyčajne načíta servlet pri prvej požiadavke od klienta, ale niekedy je potrebné načítať servlet hneď pri štarte aplikácie (napríklad ak je servlet veľký a jeho načítanie bude trvať dlho). Ak to chcete urobiť, musíte použiť prvok load-on-startup v deskriptore (alebo anotáciu loadOnStartup), ktorý bude indikovať, že servlet by sa mal načítať pri spustení.

    Hodnota musí byť int. Ak je hodnota záporná, servlet sa načíta na žiadosť klienta a ak 0 a ďalej, načíta sa pri štarte aplikácie. Čím nižšie číslo, tým skôr bude servlet vo fronte sťahovania.

    • Čo je objekt ServletConfig?

    Rozhranie javax.servlet.ServletConfig sa používa na odovzdanie konfiguračných informácií servletu. Každý servlet má svoj vlastný objekt ServletConfig, za ktorého vytvorenie je zodpovedný kontajner servletu. Parametre init vo web.xml (alebo anotácie WebInitParam) sa používajú na nastavenie konfiguračných parametrov. Metóda getServletConfig() sa používa na získanie objektu ServletConfig tohto servletu.

    • Čo je objekt ServletContext?

    Rozhranie javax.servlet.ServletContext definuje množinu metód, ktoré servlet používa na komunikáciu so svojim kontajnerom servletov, ako je získanie typu MIME súboru, odosielanie požiadaviek alebo zápis do protokolového súboru. Objekt ServletContext je jedinečný a dostupný pre všetky servlety vo webovej aplikácii. Objekt ServletContext môžeme použiť, keď potrebujeme udeliť prístup k jednému alebo viacerým servletom k inicializovaným parametrom webovej aplikácie. Ak to chcete urobiť, použite prvok vo web.xml. Objekt ServletContext je možné získať pomocou metódy getServletContext() v rozhraní ServletConfig.

    Kontajnery servletov môžu tiež poskytovať kontextové objekty, ktoré sú jedinečné pre skupinu servletov. Každá zo skupín bude spojená s inou sadou adries URL hostiteľskej cesty.

    ServletContext bol rozšírený v špecifikácii Servlet 3, aby poskytoval programové pridávanie poslucháčov a filtrov do aplikácie. Toto rozhranie má tiež mnoho užitočných metód ako getMimeType(), getResourceAsStream() atď.

    • Aký je rozdiel medzi ServletContext a ServletConfig?

    Nižšie sú uvedené niektoré rozdiely:

    • ServletConfig je jedinečný pre každý servlet, zatiaľ čo ServletContext je jedinečný v celej aplikácii.
    • ServletConfig sa používa na poskytnutie inicializačných parametrov servletu a ServletContext sa používa na poskytnutie inicializačných parametrov aplikácie pre všetky servlety.
    • Nemáme možnosť nastaviť atribúty objektu ServletConfig, zatiaľ čo môžeme nastaviť atribúty objektu ServletContext, ktoré budú dostupné pre iné servlety.

    • Rozhranie ServletResponse.

    Rozhranie ServletResponse je nástroj na odosielanie údajov klientovi. Všetky metódy tohto nástroja slúžia na tento účel.

    • Rozhranie ServletRequest.

    Rozhranie ServletRequest je nástroj na získanie parametrov požiadavky HTTP. Toto rozhranie má niekoľko metód, ktoré sú svojím názvom a účelom rovnaké ako ServletContext.

    • Čo je to Dispečer žiadostí?

    Rozhranie RequestDispatcher sa používa na odovzdanie požiadavky inému zdroju (môže to byť HTML, JSP alebo iný servlet v tej istej aplikácii). Môžeme to použiť na pridanie obsahu iného zdroja do odpovede. Toto rozhranie sa používa na internú komunikáciu medzi servletmi v rovnakom kontexte. Rozhranie má dva spôsoby:

    • void forward(ServletRequest var1, ServletResponse var2) - prepošle požiadavku zo servletu na iný zdroj (servlet, JSP alebo súbor HTML) na serveri.
    • void include(ServletRequest var1, ServletResponse var2) – zahŕňa obsah zdroja (servlet, stránku JSP alebo HTML) v odpovedi.

    Rozhranie je prístupné pomocou metódy ServletContext getRequestDispatcher(String s). Cesta musí začínať znakom / , ktorý bude interpretovaný vo vzťahu k aktuálnej koreňovej ceste kontextu.

    • Ako je možné vytvoriť zablokovanie v servlete?

    Deadlock (deadlock) možno dosiahnuť implementáciou volania metódy v slučke, napríklad volaním metódy doPost () v metóde doGet () a volaním doGet () v metóde doPost ().

    • Ako získať adresu servletu na serveri?

    Ak chcete získať skutočnú cestu servletu na serveri, môžete použiť túto konštrukciu: getServletContext().getRealPath(request.getServletPath()).

    • Ako získať informácie o serveri zo servletu?

    Informácie o serveri možno získať pomocou objektu ServletContext pomocou metódy getServerInfo(). Tie. getServletContext().getServerInfo().

    • Ako získať IP adresu klienta na serveri?

    Použite request.getRemoteAddr() na získanie IP klienta v servlete.

    • Čo viete o triedach obalu servletov?

    Servlet HTTP API poskytuje dve triedy wrapperov, HttpServletRequestWrapper a HttpServletResponseWrapper. Pomáhajú vývojárom implementovať ich vlastné implementácie typov požiadaviek a odpovedí servletu. Tieto triedy môžeme rozšíriť a prepísať iba nevyhnutné metódy na implementáciu vlastných typov objektov odpovedí a požiadaviek. Tieto triedy sa nepoužívajú v štandardnom programovaní servletov.

    Jednou z najpríjemnejších vlastností Java je jej mnohostranná povaha. Samozrejme, vytváranie tradičných desktopových a dokonca aj mobilných aplikácií je skvelé. Ale čo ak chcete vyjsť zo zabehnutých koľají a vstúpiť do oblasti vývoja webu Java? Dobrou správou pre vás je, že jazyk prichádza s kompletným Servlet API, ktoré vám umožňuje vytvárať robustné webové aplikácie bez prílišných problémov.

    Vytváranie aplikácií Java pomocou servletov

    Takže sme už vytvorili konfiguračné súbory aplikácie. V súčasnom stave však nerobí doslova nič. Chceme, aby sa klienti mohli zaregistrovať pomocou formulára HTML, takže ďalšia vec, ktorú musíme urobiť, je vytvoriť súbory JSP, ktoré po úspešnej registrácii zobrazia vyššie uvedený formulár a podrobnosti o klientovi. To je to, čo teraz urobíme.

    Práca na vzhľade

    Vzhľad aplikácie bude definovaný dvoma súbormi JSP – v kontexte MVC sa nazývajú pohľady. Prvý bude zodpovedný za zobrazenie registračného formulára a prípadné chyby spôsobené po validácii zadaných údajov. Druhá bude bežná uvítacia stránka, na ktorej sa zobrazia údaje zadané zákazníkom po úspešnom dokončení procesu registrácie.

    Tu je prvý súbor JSP:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Registrácia

    Registrácia

    $ (porušenie).