En guide til Java EE-webrelaterede kommentarer

1. Oversigt

Java EE-bemærkninger gør udviklernes liv lettere ved at lade dem specificere, hvordan applikationskomponenter skal opføre sig i en container. Disse er moderne alternativer til XML-deskriptorer og gør det grundlæggende muligt at undgå kedelpladekode.

I denne artikel vil vi fokusere på annoteringer introduceret med Servlet API 3.1 i Java EE 7. Vi vil undersøge deres formål og se på deres anvendelse.

2. Webkommentarer

Servlet API 3.1 introducerede et nyt sæt annoteringstyper, der kan bruges i Servlet klasser:

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

Vi undersøger dem detaljeret i de næste afsnit.

3. @WebServlet

Kort sagt giver denne kommentar os mulighed for at erklære Java-klasser som servlets:

@WebServlet ("/ konto") offentlig klasse AccountServlet udvider javax.servlet.http.HttpServlet {public void doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException {// ...} offentlig ugyldig doPost (HttpServletRequerv anmodning svar, Htt IOException {// ...}}

3.1. Brug af attributter af @WebServlet Kommentar

@WebServlet har et sæt attributter, der giver os mulighed for at tilpasse servlet:

  • navn
  • beskrivelse
  • urlMønstre
  • initParams

Vi kan bruge disse som vist i eksemplet nedenfor:

@WebServlet (name = "BankAccountServlet", description = "Repræsenterer en bankkonto og dens transaktioner", urlPatterns = {"/ konto", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) offentlig klasse AccountServlet udvider javax.servlet.http.HttpServlet {String accountType = null; offentlig ugyldig init (ServletConfig config) kaster ServletException {// ...} offentlig ugyldig doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException {// ...} offentlig ugyldig doPost (HttpServletRequest anmodning, HttpServletResponse svar) kaster IO ...}}

Det navn attribut tilsidesætter standard servletnavnet, som er det fuldt kvalificerede klasse navn som standard. Hvis vi ønsker at give en beskrivelse af, hvad servleten gør, kan vi bruge beskrivelse attribut.

Det urlMønstre attribut bruges til at specificere den eller de webadresser, hvor servlet er tilgængelig (flere værdier kan leveres til denne attribut som vist i kodeeksemplet).

4. @WebInitParam

Denne kommentar bruges sammen med initParams attribut for @WebServlet annotation og servlets initialiseringsparametre.

I dette eksempel indstiller vi en servlet initialiseringsparameter type, til værdien af ​​'besparelser':

@WebServlet (name = "BankAccountServlet", description = "Repræsenterer en bankkonto og dens transaktioner", urlPatterns = {"/ konto", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) offentlig klasse AccountServlet udvider javax.servlet.http.HttpServlet {String accountType = null; offentlig ugyldigt init (ServletConfig config) kaster ServletException {accountType = config.getInitParameter ("type"); } offentlig ugyldig doPost (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException {// ...}}

5. @WebFilter

Hvis vi vil ændre anmodningen og svaret fra en servlet uden at røre ved dens interne logik, kan vi bruge WebFilter kommentar. Vi kan knytte filtre til en servlet eller til en gruppe servlets og statisk indhold ved at angive et URL-mønster.

I eksemplet nedenfor bruger vi @WebFilter kommentar for at omdirigere enhver uautoriseret adgang til login-siden:

@WebFilter (urlPatterns = "/ account / *", filterName = "LoggingFilter", beskrivelse = "Filtrer alle webadresser til kontotransaktion") offentlig klasse LogInFilter implementerer javax.servlet.Filter {public void init (FilterConfig filterConfig) kaster ServletException {} public ugyldigt doFilter (ServletRequest anmodning, ServletResponse svar, FilterChain kæde) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequest) anmodning; HttpServletResponse res = (HttpServletResponse) svar; res.sendRedirect (req.getContextPath () + "/login.jsp"); chain.doFilter (anmodning, svar); } offentlig tomrum ødelægge () {}}

6. @WebListener

Hvis vi ønsker viden eller kontrol over, hvordan og hvornår en servlet og dens anmodninger initialiseres eller ændres, kan vi bruge @WebListener kommentar.

For at skrive en weblytter skal vi udvide en eller flere af følgende grænseflader:

  • ServletContextListener - til meddelelser om ServletContext livscyklus
  • ServletContextAttributeListener - til meddelelser, når en ServletContext attribut ændres
  • ServletRequestListener - til meddelelser, når der foretages en anmodning om en ressource
  • ServletRequestAttributeListener - til meddelelser, når en attribut tilføjes, fjernes eller ændres i en Servletanmodning
  • HttpSessionListener - til meddelelser, når en ny session oprettes og ødelægges
  • HttpSessionAttributeListener - til meddelelser, når en ny attribut føjes til eller fjernes fra en session

Nedenfor er et eksempel på, hvordan vi kan bruge en ServletContextListener for at konfigurere en webapplikation:

@WebListener offentlig klasse BankAppServletContextListener implementerer ServletContextListener {public void contextInitialized (ServletContextEvent sce) {sce.getServletContext (). SetAttribute ("ATTR_DEFAULT_LANGUAGE", "engelsk"); } public void contextDestroyed (ServletContextEvent sce) {// ...}}

7. @ServletSecurity

Når vi ønsker at specificere sikkerhedsmodellen for vores servlet, inklusive roller, adgangskontrol og godkendelseskrav, bruger vi kommentaren @ServletSecurity.

I dette eksempel begrænser vi adgangen til vores AccountServlet bruger @ServletSecurity kommentar:

@WebServlet (name = "BankAccountServlet", description = "Repræsenterer en bankkonto og dens transaktioner", urlPatterns = {"/ konto", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) @ServletSecurity (værdi = @HttpConstraint (rollerAllowed = {" Medlem "}), httpMethodConstraints = {@HttpMethodConstraint (værdi =" POST ", rollerAllowed = {" Admin "})} offentlig klasse AccountServlet udvider javax. servlet.http.HttpServlet {String accountType = null; offentlig ugyldig init (ServletConfig config) kaster ServletException {// ...} offentlig ugyldig doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException {// ...} offentlig ugyldig doPost (HttpServletRequest anmodning, HttpServletResponse respons) kaster dobbeltkonto IO = 1000d; Streng paramDepositAmt = request.getParameter ("dep"); dobbelt depositAmt = Double.parseDouble (paramDepositAmt); accountBalance = accountBalance + depositAmt; PrintWriter-forfatter = respons.getWriter (); writer.println ("Saldo på" + accountType + "konto er:" + accountBalance + ""); writer.flush (); }}

I dette tilfælde når man påberåber sig AccountServlet, browseren åbner en login-skærm for brugeren at indtaste et gyldigt brugernavn og en adgangskode.

Vi kan bruge @HttpConstraint og @HttpMethodConstraint bemærkninger for at specificere værdier for attributterne værdi og httpMethodConstraints, af @ServletSecurity kommentar.

@HttpConstraint kommentar gælder for alle HTTP-metoder. Med andre ord angiver den standardsikkerhedsbegrænsningen.

@HttpConstraint har tre attributter:

  • værdi
  • rollerTilladt
  • transportGaranti

Ud af disse attributter er den mest anvendte attribut roller Tilladt. I eksemplet med kodekodestykket ovenfor er brugere, der hører til rollen Medlem har tilladelse til at påberåbe sig alle HTTP-metoder.

@HttpMethodConstraint annotation giver os mulighed for at specificere sikkerhedsbegrænsninger for en bestemt HTTP-metode.

@HttpMethodConstraint har følgende attributter:

  • værdi
  • emptyRoleSemantic
  • rollerTilladt
  • transportGaranti

I eksempelkodestykket ovenfor viser det, hvordan doPost metoden er kun begrænset for brugere, der hører til Admin rolle, så indskudsfunktionen kun kan udføres af en Admin bruger.

8. @MultipartConfig

Denne kommentar bruges, når vi har brug for at kommentere en servlet, der skal håndteres multipart / form-data anmodninger (bruges typisk til en filupload-servlet).

Dette vil udsætte getParts () og getPart (navn) metoder til HttpServletRequest kan bruges til at få adgang til alle dele såvel som en individuel del.

Den uploadede fil kan skrives til disken ved at ringe til skriv (filnavn) af delobjektet.

Nu vil vi se på et eksempel på en servlet UploadCustomerDocumentsServlet der viser dets anvendelse:

@WebServlet (urlPatterns = {"/ uploadCustDocs"}) @MultipartConfig (fileSizeThreshold = 1024 * 1024 * 20, maxFileSize = 1024 * 1024 * 20, maxRequestSize = 1024 * 1024 * 25, location = "./custDocs") public class UploadCustomer udvider HttpServlet {beskyttet ugyldigt doPost (HttpServletRequest anmodning, HttpServletResponse svar) kaster ServletException, IOException {for (Del del: request.getParts ()) {part.write ("myFile"); }}}

@MultipartConfig har fire attributter:

  • fileSizeThreshold - Dette er størrelsestærsklen, når den uploadede fil gemmes midlertidigt. Hvis den uploadede fils størrelse er større end denne tærskel, gemmes den på disken. Ellers gemmes filen i hukommelsen (størrelse i byte)
  • maxFileSize - Dette er den maksimale størrelse af den uploadede fil (størrelse i byte)
  • maxRequestSize - Dette er den højeste størrelse af anmodningen, inklusive både uploadede filer og andre formulardata (størrelse i byte)
  • Beliggenhed - Dette er det bibliotek, hvor uploadede filer er gemt

9. Konklusion

I denne artikel kiggede vi på nogle Java EE-kommentarer, der blev introduceret med Servlet API 3.1 og deres formål og deres anvendelse.

Kildekode relateret til denne artikel kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found