Útmutató a Java EE webhez kapcsolódó kommentárokhoz

1. Áttekintés

A Java EE kommentárok megkönnyítik a fejlesztők életét azáltal, hogy lehetővé teszik számukra, hogy az alkalmazás-összetevők hogyan viselkedjenek egy tárolóban. Ezek modern alternatívák az XML leírók számára, és alapvetően lehetővé teszik a kazánlap kód elkerülését.

Ebben a cikkben a Servlet API 3.1 Java Java 7-ben bevezetett megjegyzéseire fogunk összpontosítani. Megvizsgáljuk azok célját és megvizsgáljuk használatukat.

2. Webes kommentárok

A Servlet API 3.1 új feljegyzéstípusokat vezetett be, amelyekben felhasználhatók Servlet osztályok:

  • @WebServlet
  • @WebInitParam
  • @WebFilter
  • @WebListener
  • @ServletSecurity
  • @HttpConstraint
  • @HttpMethodConstraint
  • @MultipartConfig

A következő szakaszokban részletesen megvizsgáljuk őket.

3. @WebServlet

Egyszerűen fogalmazva: ez az annotáció lehetővé teszi számunkra, hogy a Java osztályokat szervletként deklaráljuk:

A @WebServlet ("/ account") public class AccountServlet kiterjeszti a javax.servlet.http.HttpServlet {public void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja az IOException {// ...} public void doPost (HttpServletRequest request) IOException {// ...}}

3.1. A (z) @WebServlet Megjegyzés

@WebServlet rendelkezik egy attribútumkészlettel, amely lehetővé teszi számunkra a szervlet személyre szabását:

  • név
  • leírás
  • urlPatterns
  • initParams

Ezeket az alábbi példában látható módon használhatjuk:

@WebServlet (name = "BankAccountServlet", description = "Bankszámlát képvisel és tranzakciók", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " megtakarítás ")}) public class AccountServlet kiterjeszti a javax.servlet.http.HttpServlet {String accountType = null; public void init (ServletConfig config) dobja a ServletException {// ...} public void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja az IOException {// ...} public void doPost (HttpServletRequest kérés, HttpServletResponse // válasz válasz) ...}}

A név attribute felülírja az alapértelmezett szervlet nevet, amely alapértelmezés szerint a teljesen minősített osztálynév. Ha leírást akarunk adni arról, hogy mit csinál a szervlet, használhatjuk a leírás tulajdonság.

A urlPatterns attribútum segítségével adható meg azok az URL (címek), amelyeken a szervlet elérhető (több érték is megadható ennek az attribútumnak a kód példában látható módon).

4. @WebInitParam

Ezt a jegyzetet a initParams attribútuma @WebServlet annotáció és a szervlet inicializálási paraméterei.

Ebben a példában egy servlet inicializálási paramétert állítunk be típus, a „megtakarítás” értékére:

@WebServlet (name = "BankAccountServlet", description = "Bankszámlát képvisel és tranzakciók", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " megtakarítás ")}) public class AccountServlet kiterjeszti a javax.servlet.http.HttpServlet {String accountType = null; public void init (ServletConfig config) dobja a ServletException {accountType = config.getInitParameter ("type"); } public void doPost (HttpServletRequest kérés, HttpServletResponse válasz) dobja az IOException-t {// ...}}

5. @WebFilter

Ha meg akarjuk változtatni a szervlet kérését és válaszát anélkül, hogy hozzáérnénk annak belső logikájához, használhatjuk a WebFilter annotáció. Szűrőket társíthatunk egy szervlethez, vagy egy kiszolgáló- és statikus tartalomhoz egy URL-minta megadásával.

Az alábbi példában a @WebFilter annotáció a jogosulatlan hozzáférés átirányításához a bejelentkezési oldalra:

@WebFilter (urlPatterns = "/ account / *", filterName = "LoggingFilter", description = "Az összes fiók tranzakciós URL-jének szűrése") public class LogInFilter implementálja a javax.servlet.Filter {public void init (FilterConfig filterConfig) dob ServletException {} public void doFilter (ServletRequest kérés, ServletResponse válasz, FilterChain lánc) dobja az IOException, a ServletException {HttpServletRequest req = (HttpServletRequest) kérést; HttpServletResponse res = (HttpServletResponse) válasz; res.sendRedirect (req.getContextPath () + "/login.jsp"); chain.doFilter (kérés, válasz); } public void megsemmisítés () {}}

6. @WebListener

Ha tudást akarunk vagy irányítást szeretnénk kapni arról, hogyan és mikor inicializáljuk vagy módosítsuk a szervletet és annak kéréseit, használhatjuk a @WebListener annotáció.

Webfigyelő írásához ki kell terjesztenünk a következő interfészek közül egyet vagy többet:

  • ServletContextListener - a értesítések a ServletContext életciklus
  • ServletContextAttributeListener - a értesítések, amikor a ServletContext attribútum megváltozott
  • ServletRequestListener - a értesítések, amikor egy erőforrás iránti kérelmet nyújtanak be
  • ServletRequestAttributeListener - for értesítések, amikor egy attribútumot hozzáadnak, eltávolítanak vagy módosítanak a ServletRequest
  • HttpSessionListener - a értesítések, amikor új munkamenet jön létre és megsemmisül
  • HttpSessionAttributeListener - a értesítések, amikor egy új attribútumot hozzáadnak egy munkamenethez vagy eltávolítanak onnan

Az alábbiakban bemutatunk egy példát arra, hogyan használhatjuk a ServletContextListener webalkalmazás konfigurálásához:

@WebListener public class BankAppServletContextListener implementálja a ServletContextListener {public void contextInitialized (ServletContextEvent sce) {sce.getServletContext (). SetAttribute ("ATTR_DEFAULT_LANGUAGE", "magyar"); } public void contextDestroyed (ServletContextEvent sce) {// ...}}

7. @ServletSecurity

Ha meg akarjuk adni a kiszolgálónk biztonsági modelljét, beleértve a szerepeket, a beléptetés-ellenőrzés és a hitelesítési követelményeket, akkor a jegyzetet használjuk @ServletSecurity.

Ebben a példában korlátozzuk a hozzáférést a mi AccountServlet használni a @ServletSecurity kommentár:

@WebServlet (név = "BankAccountServlet", leírás = "Bankszámlát képvisel és tranzakciók", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " megtakarítás ")}) @ServletSecurity (value = @HttpConstraint (roleAllowed = {" Member "}), httpMethodConstraints = {@HttpMethodConstraint (value =" POST ", szerepekAllowed = {" Admin "})}}) public class AccountServlet kiterjeszti a javaxot. servlet.http.HttpServlet {String accountType = null; public void init (ServletConfig config) eldobja a ServletException {// ...} public void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja az IOException {// ...} public void doPost (HttpServletRequest kérés, HttpServletResponse {double ... válasz = 1000d; String paramDepositAmt = request.getParameter ("dep"); double depositAmt = Double.parseDouble (paramDepositAmt); accountBalance = accountBalance + depositAmt; PrintWriter író = response.getWriter (); író.println ("A" + accountType + "számla egyenlege:" + accountBalance + ""); író.öblítés (); }}

Ebben az esetben a AccountServlet, a böngésző megjelenik egy bejelentkezési képernyőn, ahol a felhasználó érvényes felhasználónevet és jelszót adhat meg.

Tudjuk használni @HttpConstraint és @HttpMethodConstraint kommentárok az attribútumok értékeinek megadásához érték és httpMethodConstraints, nak,-nek @ServletSecurity annotáció.

@HttpConstraint az annotáció minden HTTP módszerre vonatkozik. Más szavakkal, megadja az alapértelmezett biztonsági korlátozást.

@HttpConstraint három attribútuma van:

  • érték
  • szerepek engedélyezve
  • transportGuarantee

Ezen attribútumok közül a leggyakrabban használt attribútum szerepek engedélyezve. A fenti példa kódrészletben a szerepkörhöz tartozó felhasználók Tag minden HTTP metódust meghívhatnak.

@HttpMethodConstraint az annotáció lehetővé teszi számunkra, hogy meghatározzuk egy adott HTTP módszer biztonsági megszorításait.

@HttpMethodConstraint a következő tulajdonságokkal rendelkezik:

  • érték
  • emptyRoleSemantic
  • szerepek engedélyezve
  • transportGuarantee

A fenti példa kódrészletben megmutatja, hogy a doPost A módszer csak azokra a felhasználókra korlátozódik, akik a Rendszergazda szerepkör, amely lehetővé teszi, hogy a betéti funkciót csak egy Rendszergazda felhasználó.

8. @MultipartConfig

Ezt az annotációt akkor használjuk, amikor egy szervletet kell kezelnünk többrészes / űrlap-adat kérések (általában File Upload szervlethez használják).

Ez leleplezi a getParts () és getPart (név) módszerei HttpServletRequest használható az összes alkatrész, valamint az egyes részek eléréséhez.

A feltöltött fájl írható a lemezre a ír (fájlnév) a Part objektum.

Most megnézünk egy példát a servletre UploadCustomerDocumentsServlet amely bemutatja használatát:

@WebServlet (urlPatterns = {"/ uploadCustDocs"}) @MultipartConfig (fileSizeThreshold = 1024 * 1024 * 20, maxFileSize = 1024 * 1024 * 20, maxRequestSize = 1024 * 1024 * 25, location = "./custDocs") nyilvános osztály UploadCustomlet kiterjeszti a HttpServlet {védett void doPost (HttpServletRequest kérés, HttpServletResponse válasz) dobja a ServletException, IOException {for (Part part: request.getParts ()) {part.write ("myFile"); }}}

@MultipartConfig négy attribútuma van:

  • fileSizeThreshold - Ez a méretküszöb a feltöltött fájl ideiglenes mentésekor. Ha a feltöltött fájl mérete meghaladja ezt a küszöbértéket, akkor az a lemezen lesz tárolva. Ellenkező esetben a fájl a memóriában van tárolva (méret bájtban)
  • maxFileSize - Ez a feltöltött fájl maximális mérete (méret bájtban)
  • maxRequestSize - Ez a kérelem legnagyobb mérete, beleértve a feltöltött fájlokat és egyéb űrlapadatokat is (méret bájtokban)
  • elhelyezkedés - Ez a könyvtár, ahol a feltöltött fájlokat tárolják

9. Következtetés

Ebben a cikkben megvizsgáltunk néhány, a Servlet API 3.1-vel bevezetett Java EE-feljegyzést, azok célját és használatát.

A cikkhez kapcsolódó forráskód megtalálható a GitHub oldalon.