Környezet és szervlet inicializálási paraméterek

1. Áttekintés

A servlet egyszerű Java osztály, amely egy servlet tárolóban fut.

A HTTP szervlet (egy speciális típusú kiszolgáló kisalkalmazás) első osztályú polgár a Java webalkalmazásokban. A HTTP kiszolgálók API-ja amelynek célja a HTTP kérések kezelése az ügyfél-kiszolgáló protokollokban megvalósított tipikus kérés-feldolgozás-válasz cikluson keresztül.

Ezenkívül a kiszolgálógépek vezérelhetik a kliens (általában egy webböngésző) és a szerver közötti interakciót kulcs-érték párokkal kérés / válasz paraméterek formájában.

Ezeket a paramétereket inicializálni lehet, és egy alkalmazásszintű (kontextusparaméterek) és egy servlet-specifikus hatókörhöz (servletparaméterek) lehet kötni.

Ebben az oktatóanyagban megtanuljuk hogyan definiálható és hozzáférhető a kontextus és a szervlet inicializálási paraméterei.

2. A Servlet-paraméterek inicializálása

Meghatározhatjuk és inicializálhatjuk a servlet paramétereit annotációk és a standard telepítési leíró - a „Web.xml” fájl. Érdemes megjegyezni, hogy ez a két lehetőség nem zárja ki egymást.

Fedezzük fel alaposan ezeket a lehetőségeket.

2.1. Jegyzetek használata

A servlet paraméterek inicializálása annotációkkal lehetővé teszi számunkra, hogy a konfigurációt és a forráskódot ugyanazon a helyen tartsuk.

Ebben a szakaszban bemutatjuk, hogyan lehet megjegyzéseket használva meghatározni és elérni az inicializálási paramétereket, amelyek egy adott szervlethez vannak kötve.

Ehhez naiv módon fogjuk megvalósítani UserServlet osztály, amely egyszerű HTML-űrlapon keresztül gyűjti a felhasználói adatokat.

Először nézzük meg az űrlapunkat megjelenítő JSP fájlt:

   Kontextus és inicializálás Servlet-paraméterek 

Kérjük, töltse ki az alábbi űrlapot:

Név:Email:

Ne feledje, hogy kódoltuk az űrlapot akció attribútumot az EL (a kifejezésnyelv) használatával. Ez lehetővé teszi, hogy mindig rámutasson a „/ UserServlet” elérési út, függetlenül az alkalmazásfájlok helyétől a kiszolgálón.

A „$ {PageContext.request.contextPath}” kifejezés dinamikus URL-t állít be az űrlaphoz, amely mindig arányos az alkalmazás kontextus elérési útjával.

Itt van a kezdeti szervlet megvalósítás:

@WebServlet (név = "UserServlet", urlPatterns = {"/ userServlet"}, initParams = {@WebInitParam (név = "név", value = "Nincs megadva"), @WebInitParam (név = "e-mail", érték = " Nincs megadva ")})) public class UserServlet kiterjeszti a HttpServlet {// ... @Orride védett void doPost (HttpServletRequest kérés, HttpServletResponse válasz) dob ServletException, IOException {processRequest (kérés, válasz); forwardRequest (kérés, válasz, "/WEB-INF/jsp/result.jsp"); } védett void processRequest (HttpServletRequest kérés, HttpServletResponse válasz) dobja a ServletException, IOException {request.setAttribute ("név", getRequestParameter (kérés, "név")); request.setAttribute ("email", getRequestParameter (request, "email")); } védett void forwardRequest (HttpServletRequest kérés, HttpServletResponse válasz, String útvonala) dobja a ServletException, IOException {request.getRequestDispatcher (elérési út) .forward (kérés, válasz); } védett String getRequestParameter (HttpServletRequest kérés, String név) {String param = request.getParameter (név); visszatér! param.isEmpty ()? param: getInitParameter (név); }} 

Ebben az esetben két szervlet inicializálási paramétert definiáltunk, név és email, által felhasználásával initParams és a @WebInitParam annotációk.

Felhívjuk figyelmét, hogy a HttpServletRequest-et használtuk getParameter () metódus az adatok lekérésére a HTML űrlapból, és a getInitParameter () módszer a szervlet inicializálási paramétereinek elérésére.

A getRequestParameter () módszer ellenőrzi, hogy a név és email kérési paraméterek üres karakterláncok.

Ha üres karakterláncok, akkor hozzárendelik az egyező inicializálási paraméterek alapértelmezett értékeit.

A doPost () metódus először beolvassa azt a nevet és e-mailt, amelyet a felhasználó a HTML-űrlapba adott (ha van ilyen). Ezután feldolgozza a kérés paramétereit, és továbbítja a kérést a „Result.jsp” fájl:

    Felhasználói adat 

Felhasználói információ

Név: $ {name}

Email: $ {email}

Ha a példa webalkalmazásunkat egy alkalmazáskiszolgálóra telepítjük, például Apache Tomcat, Oracle GlassFish vagy JBoss WidlFly, és futtatjuk, akkor először meg kell jelenítenie a HTML űrlap oldalt.

Miután a felhasználó kitöltötte a név és email mezőket és beküldte az űrlapot, kinyomtatja az adatokat:

Felhasználói információk neve: a felhasználó neve E-mail: a felhasználó e-mail címe 

Ha az űrlap csak üres, akkor megjeleníti a szervlet inicializálási paramétereit:

Felhasználói információk neve: Nincs megadva E-mail: Nincs megadva 

Ebben a példában megmutattuk hogyan lehet definiálni a szervlet inicializálási paramétereit kommentárok használatával, és hogyan lehet hozzájuk hozzáférni a getInitParameter () módszer.

2.2. A standard telepítési leíró használata

Ez a megközelítés különbözik attól, amely annotációkat használ, mivel lehetővé teszi számunkra, hogy a konfigurációt és a forráskódot egymástól elkülönítve tartsuk.

Az inicializálási kiszolgáló paraméterek meghatározásának bemutatása a „Web.xml” fájlt, először távolítsuk el a initParam és @WebInitParam kommentárok a UserServlet osztály:

@WebServlet (név = "UserServlet", urlPatterns = {"/ userServlet"}) nyilvános osztály UserServlet kiterjeszti a HttpServlet {...} 

Ezután határozzuk meg a szervlet inicializálási paramétereit a „Web.xml” fájl:

   UserServlet UserServlet név Nincs megadva e-mail Nincs megadva 

Amint fent látható, a szervlet inicializálási paramétereinek meghatározása a „Web.xml” a fájl csak a , és címkék.

Ezenkívül lehetőség van annyi servlet paraméter definiálására, amennyi szükséges, mindaddig, amíg a fenti standard struktúrához ragaszkodunk.

Amikor áthelyezzük az alkalmazást a kiszolgálóra, és újra futtatjuk, akkor annak ugyanúgy kell viselkednie, mint a kommentárokat használó verziónak.

3. A kontextus paramétereinek inicializálása

Néha meg kell határoznunk néhány megváltoztathatatlan adatot, amelyet globálisan meg kell osztani és egy webalkalmazáson keresztül kell elérni.

Az adatok globális jellege miatt kellene az adatok tárolásához az alkalmazás egészére kiterjedő kontextus inicializálási paramétereket használja, ahelyett, hogy a servlet kisalkalmazásokhoz fordulna.

Annak ellenére, hogy a kontextus inicializálási paramétereit nem lehet annotációkkal meghatározni, ezt megtehetjük a „Web.xml” fájl.

Tegyük fel, hogy meg akarunk adni néhány alapértelmezett globális értéket arra az országra és tartományra, ahol az alkalmazás fut.

Ezt néhány kontextusparaméterrel meg tudjuk valósítani.

Refaktorozzuk a „Web.xml” fájl ennek megfelelően:

  tartomány Mendoza ország Argentína 

Ezúttal a , , és címkék a tartomány és ország kontextus paraméterei.

Természetesen át kell alakítanunk a UserServlet osztályba, hogy be tudja szerezni ezeket a paramétereket és tovább tudja adni az eredményoldalra.

Itt vannak a szervlet vonatkozó szakaszai:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) public class UserServlet kiterjeszti a HttpServlet {// ... védett void processRequest (HttpServletRequest kérés, HttpServletResponse válasz) dob ServletException, IOExcribute {request ", getRequestParameter (kérés," név ")); request.setAttribute ("email", getRequestParameter (request, "email")); request.setAttribute ("tartomány", getContextParameter ("tartomány")); request.setAttribute ("ország", getContextParameter ("ország")); } védett karakterlánc getContextParameter (karakterlánc neve) {- return getServletContext (). getInitParameter (név); }} 

Kérjük, vegye figyelembe a getContextParameter () módszer megvalósítása, amely először a servlet kontextust kapja meg getServletContext (), majd lekéri a kontextus paramétert a getInitParameter () módszer.

Ezután át kell alakítanunk a „Result.jsp” fájlt, hogy meg tudja jeleníteni a kontextus paramétereket a szervlet-specifikus paraméterekkel együtt:

Név: $ {name}

Email: $ {email}

Tartomány: $ {tartomány}

Ország: $ {country}

Végül át tudjuk telepíteni az alkalmazást, és újra futtathatjuk.

Ha a felhasználó kitölti a HTML-űrlapot névvel és e-mail-címmel, akkor ezeket az adatokat a kontextus paramétereivel együtt jeleníti meg:

Felhasználói információk neve: a felhasználó neve E-mail: a felhasználó e-mailje Tartomány: Mendoza Ország: Argentína 

Ellenkező esetben a servlet és a kontextus inicializálási paramétereit adja ki:

Felhasználói információk Név: Nincs megadva E-mail: Nincs megadva Tartomány: Mendoza Ország: Argentína 

Míg a példa kitalált, megmutatja hogyan lehet a kontextus inicializálási paramétereit felhasználni a megváltoztathatatlan globális adatok tárolásához.

Mivel az adatok az alkalmazás kontextusához vannak kötve, nem pedig egy adott szervlethez, hozzáférhetünk hozzájuk egy vagy több szervletből, a getServletContext () és getInitParameter () mód.

4. Következtetés

Ebben a cikkben, megtanultuk a kontextus és a szervlet inicializálási paramétereinek kulcsfogalmait, és hogyan definiálhatjuk azokat, és hogyan tudunk hozzájuk hozzáférni annotációk és a „Web.xml” fájl.

A Java-ban jó ideje erőteljes tendencia van, hogy megszabaduljon az XML konfigurációs fájloktól és lehetőség szerint annotációkba költözzön.

A CDI, a Spring, a Hibernate, hogy csak néhányat említsünk, kirívó példák erre.

Ennek ellenére nincs semmi eredendõ baj a „Web.xml” fájl a kontextus és a szervlet inicializálási paramétereinek meghatározásához.

Annak ellenére, hogy a Servlet API meglehetősen gyors ütemben fejlődött e tendencia felé, továbbra is használnunk kell a telepítési leírót a kontextus inicializálási paramétereinek meghatározásához.

Szokás szerint a cikkben bemutatott összes kódminta elérhető a GitHubon.