Parametre inicializácie kontextu a servletu

1. Prehľad

Servlety sú obyčajné triedy Java, ktoré bežia v kontajneri servletov.

Servlety HTTP (špecifický typ servletu) sú občanmi prvej triedy vo webových aplikáciách Java. Rozhranie API servletov HTTP je zamerané na vybavovanie požiadaviek HTTP prostredníctvom typického cyklu požiadavka-spracovanie-odpoveď implementovaného v protokoloch klient-server.

Servlety môžu ďalej riadiť interakciu medzi klientom (zvyčajne webovým prehliadačom) a serverom pomocou párov kľúč - hodnota vo forme parametrov požiadavka / odpoveď.

Tieto parametre je možné inicializovať a viazať na rozsah celej aplikácie (parametre kontextu) a na rozsah špecifický pre servlet (parametre servletu).

V tejto príručke sa naučíme ako definovať a pristupovať k kontextu a parametrom inicializácie servletu.

2. Inicializácia parametrov servletu

Môžeme definovať a inicializovať parametre servletu pomocou anotácií a štandardného deskriptora nasadenia - „Web.xml“ spis. Stojí za zmienku, že tieto dve možnosti sa navzájom nevylučujú.

Poďme preskúmať každú z týchto možností do hĺbky.

2.1. Používanie anotácií

Inicializácia parametrov servletov s anotáciami nám umožňuje uchovať konfiguráciu a zdrojový kód na rovnakom mieste.

V tejto časti si ukážeme, ako definovať a pristupovať k inicializačným parametrom, ktoré sú viazané na konkrétny servlet pomocou anotácií.

Aby sme to dosiahli, implementujeme naivitu UserServlet trieda, ktorá zhromažďuje údaje používateľov prostredníctvom obyčajného formulára HTML.

Najprv sa pozrime na súbor JSP, ktorý vykresľuje náš formulár:

   Kontextové a inicializačné parametre servletu 

Vyplňte nasledujúci formulár:

Názov:Email:

Všimnite si, že sme formulár kódovali akcia pomocou EL (Expression Language). To umožňuje, aby vždy ukazoval na „/ UserServlet“ bez ohľadu na umiestnenie aplikačných súborov na serveri.

The „$ {PageContext.request.contextPath}“ výraz nastavuje dynamickú adresu URL pre formulár, ktorá je vždy relatívna k kontextovej ceste aplikácie.

Tu je naša počiatočná implementácia servletu:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}, initParams = {@WebInitParam (name = "name", value = "Not provided"), @WebInitParam (name = "email", value = ") Not provided ")})) public class UserServlet extends HttpServlet {// ... @Override protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {processRequest (request, response); forwardRequest (požiadavka, odpoveď, "/WEB-INF/jsp/result.jsp"); } protected void processRequest (požiadavka HttpServletRequest, odpoveď HttpServletResponse) hodí ServletException, IOException {request.setAttribute ("name", getRequestParameter (request, "name")); request.setAttribute ("email", getRequestParameter (požiadavka, "email")); } protected void forwardRequest (požiadavka HttpServletRequest, odpoveď HttpServletResponse, reťazcová cesta) hodí ServletException, IOException {request.getRequestDispatcher (cesta) .forward (požiadavka, odpoveď); } chránený reťazec getRequestParameter (požiadavka HttpServletRequest, názov reťazca) {reťazec param = request.getParameter (názov); vrátiť! param.isEmpty ()? param: getInitParameter (meno); }} 

V tomto prípade sme definovali dva inicializačné parametre servletu, názov a e-mailod, použitím initParams a @WebInitParam anotácie.

Upozorňujeme, že sme použili HttpServletRequest getParameter () metóda na získanie údajov z formulára HTML a getInitParameter () metóda prístupu k parametrom inicializácie servletu.

The getRequestParameter () metóda kontroluje, či názov a e-mail parametre požiadavky sú prázdne reťazce.

Ak sú to prázdne reťazce, dostanú priradené predvolené hodnoty zodpovedajúcich inicializačných parametrov.

The doPost () metóda najskôr načíta meno a e-mail, ktorý používateľ zadal do formulára HTML (ak existuje). Potom spracuje parametre požiadavky a požiadavku preposiela do a „Result.jsp“ spis:

    Použivateľské dáta 

Informácie o užívateľovi

Názov: $ {name}

Email: $ {email}

Ak nasadíme našu ukážkovú webovú aplikáciu na aplikačný server, ako je Apache Tomcat, Oracle GlassFish alebo JBoss WidlFly, a spustíme ju, mala by sa najskôr zobraziť stránka formulára HTML.

Akonáhle užívateľ vyplní názov a e-mail polí a odošle formulár, odošle údaje:

Informácie o používateľovi Meno: meno používateľa E-mail: e-mail používateľa 

Ak je formulár prázdny, zobrazí sa parametre inicializácie servletu:

Informácie o používateľovi Meno: Neuvedené E-mail: Neuvedené 

V tomto príklade sme si ukázali ako definovať inicializačné parametre servletu pomocou anotácií a ako k nim pristupovať pomocou getInitParameter () metóda.

2.2. Používanie štandardného deskriptora nasadenia

Tento prístup sa líši od prístupu, ktorý používa anotácie, pretože nám umožňuje udržiavať konfiguráciu a zdrojový kód navzájom izolované.

Ukážeme, ako definovať inicializačné parametre servletu pomocou „Web.xml“ súbor, najskôr odstráňte súbor initParam a @WebInitParam anotácie z UserServlet trieda:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) verejná trieda UserServlet rozširuje HttpServlet {...} 

Ďalej definujeme inicializačné parametre servletu v „Web.xml“ spis:

   UserServlet UserServlet name Neuvedené e-mail Neuvedené 

Ako je uvedené vyššie, definovanie parametrov inicializácie servletu pomocou „Web.xml“ súbor sa scvrkáva na použitie súboru , a značky.

Ďalej je možné definovať toľko parametrov servletu, koľko je potrebné, pokiaľ sa budeme držať vyššie uvedenej štandardnej štruktúry.

Keď znova nasadíme aplikáciu na server a znova ju spustíme, mala by sa správať rovnako ako verzia, ktorá používa anotácie.

3. Inicializácia kontextových parametrov

Niekedy musíme definovať nemenné dáta, ktoré musia byť globálne zdieľané a prístupné cez webovú aplikáciu.

Vzhľadom na globálny charakter údajov by sme mali namiesto uchovania k náprotivkom servletu používajte na ukladanie údajov parametre inicializácie kontextu celej aplikácie.

Aj keď nie je možné definovať parametre inicializácie kontextu pomocou anotácií, môžeme to urobiť v „Web.xml“ spis.

Predpokladajme, že chceme poskytnúť niektoré predvolené globálne hodnoty pre krajinu a provinciu, kde je naša aplikácia spustená.

Môžeme to dosiahnuť pomocou niekoľkých kontextových parametrov.

Poďme refaktorovať „Web.xml“ podľa toho:

  provincia Mendoza krajina Argentína 

Tentokrát sme použili , , a značky na definovanie provincie a krajina kontextové parametre.

Samozrejme, musíme to zrekonštruovať UserServlet triedy, aby mohla tieto parametre načítať a preniesť ich na stránku s výsledkami.

Tu sú príslušné sekcie servletu:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) verejná trieda UserServlet rozširuje HttpServlet {// ... chránený neplatný proces processRequest (požiadavka HttpServletRequest, odpoveď HttpServletResponse) hodí ServletException, IOException {name.setAttribute {request.setAttribute ", getRequestParameter (požiadavka," meno ")); request.setAttribute ("email", getRequestParameter (požiadavka, "email")); request.setAttribute ("provincia", getContextParameter ("provincia")); request.setAttribute ("country", getContextParameter ("country")); } chránený reťazec getContextParameter (názov reťazca) {- návrat getServletContext (). getInitParameter (názov); }} 

Všimnite si prosím getContextParameter () implementácia metódy, ktorá najskôr získa kontext servletu getServletContext (), a potom načíta kontextový parameter pomocou getInitParameter () metóda.

Ďalej musíme refaktorovať „Result.jsp“ súbor, aby mohol zobraziť kontextové parametre spolu s parametrami špecifickými pre servlet:

Názov: $ {name}

Email: $ {email}

Provincie: $ {provincia}

Krajina: $ {krajina}

Na záver môžeme aplikáciu znova nasadiť a znova spustiť.

Ak používateľ vyplní formulár HTML menom a e-mailom, zobrazí tieto údaje spolu s kontextovými parametrami:

Informácie o užívateľovi Meno: meno používateľa E-mail: e-mail používateľa Provincia: Mendoza Krajina: Argentína 

V opačnom prípade by bol na výstupe servlet a parametre inicializácie kontextu:

Informácie o užívateľovi Meno: Neuvádza sa E-mail: Neuvádza sa Provincia: Mendoza Krajina: Argentína 

Aj keď je príklad vykonštruovaný, ukazuje sa ako používať parametre inicializácie kontextu na ukladanie nemenných globálnych údajov.

Pretože sú údaje viazané na kontext aplikácie, a nie na konkrétny servlet, môžeme k nim pristupovať z jedného alebo viacerých servletov pomocou getServletContext () a getInitParameter () metódy.

4. Záver

V tomto článku Naučili sme sa kľúčové koncepty kontextu a parametrov inicializácie servletu a ako ich definovať a pristupovať k nim pomocou anotácií a „Web.xml“ spis.

Už dlhšiu dobu existuje v Jave silná tendencia zbavovať sa konfiguračných súborov XML a migrovať do anotácií, kedykoľvek je to možné.

CDI, Spring, Hibernate, aby sme vymenovali aspoň niektoré, sú toho jasným príkladom.

Napriek tomu na používaní servera nie je vo svojej podstate nič zlé „Web.xml“ súbor na definovanie kontextu a parametrov inicializácie servletu.

Aj keď sa Servlet API k tejto tendencii vyvíjalo dosť rýchlym tempom, na definovanie parametrov inicializácie kontextu musíme stále používať deskriptor nasadenia.

Ako obvykle sú všetky ukážky kódu zobrazené v tomto článku k dispozícii na GitHub.