Parametri inicijalizacije konteksta i servleta

1. Pregled

Servleti su obične Java klase koje se izvode u spremniku servleta.

HTTP servleti (određena vrsta servleta) građani su prve klase u Java web aplikacijama. API HTTP servleta je usmjeren na rukovanje HTTP zahtjevima kroz tipični ciklus obrade zahtjeva i obrade, implementiran u protokolima klijent-poslužitelj.

Nadalje, servleti mogu kontrolirati interakciju između klijenta (obično web preglednika) i poslužitelja koristeći parove ključ / vrijednost u obliku parametara zahtjev / odgovor.

Ti se parametri mogu inicijalizirati i vezati za opseg cijele aplikacije (parametri konteksta) i opseg specifičan za servlet (parametri servleta).

U ovom uputstvu naučit ćemo kako definirati i pristupiti parametrima konteksta i inicijalizacije servleta.

2. Inicijalizacija parametara servleta

Parametre servleta možemo definirati i inicijalizirati pomoću napomena i standardnog deskriptora implementacije - "Web.xml" datoteka. Vrijedno je napomenuti da se ove dvije mogućnosti međusobno ne isključuju.

Istražimo dubinski svaku od ovih mogućnosti.

2.1. Korištenje napomena

Inicijalizacija parametara servleta s napomenama omogućuje nam zadržavanje konfiguracije i izvornog koda na istom mjestu.

U ovom ćemo odjeljku pokazati kako definirati i pristupiti parametrima inicijalizacije koji su vezani uz određeni servlet pomoću napomena.

Da bismo to učinili, primijenit ćemo naivnost UserServlet klasa koja prikuplja korisničke podatke putem običnog HTML obrasca.

Prvo, pogledajmo JSP datoteku koja prikazuje naš obrazac:

   Parametri servleta konteksta i inicijalizacije 

Molimo ispunite obrazac u nastavku:

Ime:E-mail:

Imajte na umu da smo kodirali obrasce akcijski atribut pomoću EL (jezik izraza). To mu omogućuje da uvijek pokazuje na “/ UserServlet” putanju, bez obzira na mjesto aplikacijskih datoteka na poslužitelju.

The "$ {PageContext.request.contextPath}" izraz postavlja dinamički URL za obrazac, koji je uvijek u odnosu na put konteksta aplikacije.

Evo naše početne implementacije servleta:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}, initParams = {@WebInitParam (name = "name", value = "Not provided"), @WebInitParam (name = "email", value = " Nije navedeno ")})) javna klasa UserServlet proširuje HttpServlet {// ... @Override zaštićen void doPost (zahtjev HttpServletRequest, odgovor HttpServletResponse) baca ServletException, IOException {processRequest (zahtjev, odgovor); forwardRequest (zahtjev, odgovor, "/WEB-INF/jsp/result.jsp"); } zaštićeni void processRequest (zahtjev HttpServletRequest, odgovor HttpServletResponse) baca ServletException, IOException {request.setAttribute ("name", getRequestParameter (zahtjev, "name")); request.setAttribute ("e-pošta", getRequestParameter (zahtjev, "e-pošta")); } zaštićeni void forwardRequest (zahtjev HttpServletRequest, odgovor HttpServletResponse, put niza) baca ServletException, IOException {request.getRequestDispatcher (put) .forward (zahtjev, odgovor); } zaštićeni String getRequestParameter (HttpServletRequest zahtjev, naziv niza) {Parametr niza = request.getParameter (ime); return! param.isEmpty ()? param: getInitParameter (ime); }} 

U ovom smo slučaju definirali dva parametra inicijalizacije servleta, Ime i e-mail, autor koristeći initParams i @WebInitParam bilješke.

Imajte na umu da smo koristili HttpServletRequest getParameter () metoda za dohvaćanje podataka iz HTML obrasca i getInitParameter () metoda za pristup parametrima inicijalizacije servleta.

The getRequestParameter () metoda provjerava je li Ime i e-mail parametri zahtjeva su prazni nizovi.

Ako su to prazni nizovi, tada im se dodjeljuju zadane vrijednosti odgovarajućih parametara inicijalizacije.

The doPost () metoda prvo dohvaća ime i e-poštu koju je korisnik unio u HTML obrazac (ako postoji). Zatim obrađuje parametre zahtjeva i prosljeđuje zahtjev na a "Rezultat.jsp" datoteka:

    Korisnički podaci 

informacije o korisniku

Ime: $ {name}

E-mail: $ {email}

Ako svoj primjerak web aplikacije rasporedimo na poslužitelj aplikacija, poput Apache Tomcat, Oracle GlassFish ili JBoss WidlFly, i pokrenemo ga, prvo bi trebao prikazati stranicu HTML obrasca.

Nakon što korisnik popuni Ime i e-mail polja i podnesenog obrasca, ispisat će se podaci:

Korisničke informacije Ime: korisničko ime E-pošta: korisnikova e-adresa 

Ako je obrazac samo prazan, prikazat će se parametri inicijalizacije servleta:

Podaci o korisniku Ime: Nije navedeno E-pošta: Nije navedeno 

U ovom smo primjeru pokazali kako definirati parametre inicijalizacije servleta pomoću napomena i kako im pristupiti pomoću getInitParameter () metoda.

2.2. Korištenje standardnog deskriptora implementacije

Ovaj se pristup razlikuje od onoga koji koristi napomene jer nam omogućuje da konfiguraciju i izvorni kod držimo međusobno izoliranima.

Da pokaže kako definirati parametre inicijalizacijskog servleta pomoću "Web.xml" datoteku, prvo uklonimo initParam i @WebInitParam bilješke iz UserServlet razred:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) javna klasa UserServlet proširuje HttpServlet {...} 

Dalje, definirajmo parametre inicijalizacije servleta u "Web.xml" datoteka:

   UserServlet UserServlet ime Nije navedena e-pošta Nije navedena 

Kao što je prikazano gore, definiranje parametara inicijalizacije servleta pomoću "Web.xml" datoteka se svodi na korištenje datoteke , i oznake.

Nadalje, moguće je definirati onoliko parametara servleta koliko je potrebno, sve dok se pridržavamo gornje standardne strukture.

Kad aplikaciju preusmjerimo na poslužitelj i ponovo je izvedemo, trebao bi se ponašati isto kao verzija koja koristi napomene.

3. Inicijalizacija parametara konteksta

Ponekad moramo definirati neke nepromjenjive podatke koji se moraju globalno dijeliti i pristupiti im putem web aplikacije.

Zbog globalne prirode podataka, trebali bismo za pohranu podataka koristite parametre inicijalizacije konteksta za cijelu aplikaciju, umjesto da pribjegavate kolegama servleta.

Iako nije moguće definirati parametre inicijalizacije konteksta pomoću napomena, to možemo učiniti u "Web.xml" datoteka.

Pretpostavimo da želimo pružiti neke zadane globalne vrijednosti za zemlju i pokrajinu u kojima se naša aplikacija izvodi.

To možemo postići s nekoliko parametara konteksta.

Preoblikujmo "Web.xml" datoteka u skladu s tim:

  pokrajina Mendoza zemlja Argentina 

Ovaj smo put koristili , , i oznake za definiranje pokrajina i zemlja parametri konteksta.

Naravno, moramo refaktorizirati UserServlet klase kako bi mogao dohvatiti ove parametre i proslijediti ih na stranicu rezultata.

Evo relevantnih odjeljaka servleta:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) javna klasa UserServlet proširuje HttpServlet {// ... zaštićeni void processRequest (HttpServletRequest zahtjev, HttpServletResponse odgovor) baca ServletException, IsetEsetception, Iteset, Isete, Isete, Isete, Isete, Iset ", getRequestParameter (zahtjev," ime ")); request.setAttribute ("e-pošta", getRequestParameter (zahtjev, "e-pošta")); request.setAttribute ("provincija", getContextParameter ("provincija")); request.setAttribute ("country", getContextParameter ("country")); } zaštićeni String getContextParameter (naziv niza) {- return getServletContext (). getInitParameter (name); }} 

Molimo primijetite getContextParameter () provedba metode, koja prvo dobiva kontekst servleta kroz getServletContext (), a zatim dohvaća parametar konteksta pomoću getInitParameter () metoda.

Dalje, moramo refaktorizirati "Rezultat.jsp" datoteku tako da može prikazati parametre konteksta zajedno s parametrima specifičnim za servlet:

Ime: $ {name}

E-mail: $ {email}

Pokrajina: $ {provincija}

Zemlja: $ {country}

Na kraju, možemo ponovno rasporediti aplikaciju i izvršiti je još jednom.

Ako korisnik ispuni HTML obrazac imenom i e-poštom, tada će prikazati te podatke zajedno s parametrima konteksta:

Podaci o korisniku Ime: korisničko ime E-pošta: korisnikova e-pošta Pokrajina: Mendoza Država: Argentina 

U suprotnom bi se ispisali parametri inicijalizacije servleta i konteksta:

Podaci o korisniku Ime: Nije navedeno E-adresa: Nije navedeno Pokrajina: Mendoza Država: Argentina 

Iako je primjer izmišljen, on pokazuje kako koristiti parametre inicijalizacije konteksta za pohranu nepromjenjivih globalnih podataka.

Kako su podaci vezani uz kontekst aplikacije, a ne za određeni servlet, možemo im pristupiti iz jednog ili više servleta, koristeći getServletContext () i getInitParameter () metode.

4. Zaključak

U ovom članku, naučili smo ključne pojmove parametara inicijalizacije konteksta i servleta i kako ih definirati i pristupiti im pomoću napomena i "Web.xml" datoteka.

Već duže vrijeme u Javi postoji snažna tendencija da se riješi XML konfiguracijskih datoteka i migrira na bilješke kad god je to moguće.

CDI, Proljeće, Hibernacija, da nabrojimo samo neke, eklatantan su primjeri toga.

Ipak, nema ništa suštinski pogrešno u korištenju "Web.xml" datoteka za definiranje konteksta i parametara inicijalizacije servleta.

Iako se Servlet API prilično brzo razvijao prema ovoj tendenciji, još uvijek moramo koristiti deskriptor implementacije za definiranje parametara inicijalizacije konteksta.

Kao i obično, svi uzorci koda prikazani u ovom članku dostupni su na GitHubu.