En guide til Java EE Web-Related Annotations

1. Oversikt

Java EE-merknader gjør utviklernes liv lettere ved å la dem spesifisere hvordan applikasjonskomponenter skal oppføre seg i en container. Dette er moderne alternativer for XML-deskriptorer og gjør det i utgangspunktet mulig å unngå kokerplatekode.

I denne artikkelen vil vi fokusere på merknader introdusert med Servlet API 3.1 i Java EE 7. Vi vil undersøke deres formål og se på bruken av dem.

2. Nettkommentarer

Servlet API 3.1 introduserte et nytt sett med annoteringstyper som kan brukes i Servlet klasser:

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

Vi vil undersøke dem i detalj i neste avsnitt.

3. @WebServlet

Enkelt sagt, denne merknaden lar oss erklære Java-klasser som servlets:

@WebServlet ("/ konto") offentlig klasse AccountServlet utvider javax.servlet.http.HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response) kaster IOException {// ...} offentlig ugyldig doPost (HttpServletRequerv svarforespørsel, Htt IOException {// ...}}

3.1. Bruke attributter av @WebServlet Kommentar

@WebServlet har et sett med attributter som lar oss tilpasse servletten:

  • Navn
  • beskrivelse
  • urlMønstre
  • initParams

Vi kan bruke disse som vist i eksemplet nedenfor:

@WebServlet (name = "BankAccountServlet", description = "Representerer en bankkonto og det er transaksjoner", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) offentlig klasse AccountServlet utvider javax.servlet.http.HttpServlet {String accountType = null; offentlig ugyldig init (ServletConfig config) kaster ServletException {// ...} offentlig ugyldig doGet (HttpServletRequest forespørsel, HttpServletResponse svar) kaster IOException {// ...} offentlig ugyldig doPost (HttpServletRequest forespørsel, HttpServletResponse svar) kaster IO ...}}

De Navn attributt overstyrer standard servlets navn som er det fullt kvalifiserte klassenavnet som standard. Hvis vi ønsker å gi en beskrivelse av hva servletten gjør, kan vi bruke beskrivelse Egenskap.

De urlMønstre attributt brukes til å spesifisere URL (er) der servletten er tilgjengelig (flere verdier kan tilføres dette attributtet som vist i kodeeksemplet).

4. @WebInitParam

Denne merknaden brukes med initParams attributt til @WebServlet kommentar og servlets initialiseringsparametere.

I dette eksemplet setter vi en initialiseringsparameter for servlet type, til verdien av 'besparelser':

@WebServlet (name = "BankAccountServlet", description = "Representerer en bankkonto og det er transaksjoner", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) offentlig klasse AccountServlet utvider javax.servlet.http.HttpServlet {String accountType = null; public void init (ServletConfig config) kaster ServletException {accountType = config.getInitParameter ("type"); } offentlig ugyldig doPost (HttpServletRequest-forespørsel, HttpServletResponse-svar) kaster IOException {// ...}}

5. @WebFilter

Hvis vi vil endre forespørselen og svaret fra en servlet uten å berøre den interne logikken, kan vi bruke WebFilter kommentar. Vi kan knytte filtre til en servlet eller til en gruppe servlets og statisk innhold ved å spesifisere et URL-mønster.

I eksemplet nedenfor bruker vi @WebFilter kommentar for å omdirigere uautorisert tilgang til påloggingssiden:

@WebFilter (urlPatterns = "/ account / *", filterName = "LoggingFilter", description = "Filtrer alle URL-adresser for kontotransaksjoner") offentlig klasse LogInFilter implementerer javax.servlet.Filter {public void init (FilterConfig filterConfig) kaster ServletException {} offentlig ugyldig doFilter (ServletRequest-forespørsel, ServletResponse-svar, FilterChain-kjede) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequest) forespørsel; HttpServletResponse res = (HttpServletResponse) respons; res.sendRedirect (req.getContextPath () + "/login.jsp"); chain.doFilter (forespørsel, svar); } offentlig tomrom ødelegge () {}}

6. @WebListener

Skulle vi ønske kunnskap eller kontroll over hvordan og når en servlet og dens forespørsler initialiseres eller endres, kan vi bruke @WebListener kommentar.

For å skrive en nettlytter må vi utvide ett eller flere av følgende grensesnitt:

  • ServletContextListener - for varsler om ServletContext Livssyklus
  • ServletContextAttributeListener - for varsler når en ServletContext attributt endres
  • ServletRequestListener - for varsler når det blir gjort en forespørsel om en ressurs
  • ServletRequestAttributeListener - for varsler når et attributt legges til, fjernes eller endres i en ServletRequest
  • HttpSessionListener - for varsler når en ny økt opprettes og ødelegges
  • HttpSessionAttributeListener - for varsler når et nytt attributt legges til eller fjernes fra en økt

Nedenfor er et eksempel på hvordan vi kan bruke en ServletContextListener for å konfigurere en webapplikasjon:

@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 vil spesifisere sikkerhetsmodellen for servletten vår, inkludert roller, tilgangskontroll og autentiseringskrav, bruker vi merknaden @ServletSecurity.

I dette eksemplet vil vi begrense tilgangen til vår AccountServlet bruker @ServletSecurity kommentar:

@WebServlet (name = "BankAccountServlet", description = "Representerer en bankkonto og det er transaksjoner", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " besparelser ")}) @ServletSecurity (verdi = @HttpConstraint (rollerAllowed = {" Medlem "}), httpMethodConstraints = {@HttpMethodConstraint (verdi =" POST ",rollerAllowed = {" Admin "})} offentlig klasse AccountServlet utvider javax. servlet.http.HttpServlet {Streng accountType = null; public void init (ServletConfig config) kaster ServletException {// ...} public void doGet (HttpServletRequest request, HttpServletResponse response) kaster IOException {// ...} public void doPost (HttpServletRequest request, HttpServletResponse response) kaster IO = 1000d; Streng paramDepositAmt = request.getParameter ("dep"); dobbelt innskuddAmt = Double.parseDouble (paramDepositAmt); accountBalance = accountBalance + depositAmt; PrintWriter-forfatter = respons.getWriter (); writer.println ("Balanse for" + accountType + "konto er:" + accountBalance + ""); writer.flush (); }}

I dette tilfellet når du påberoper deg AccountServlet, nettleseren dukker opp et påloggingsskjermbilde for brukeren å angi et gyldig brukernavn og passord.

Vi kan bruke @HttpConstraint og @HttpMethodConstraint merknader for å spesifisere verdier for attributtene verdi og httpMethodConstraints, av @ServletSecurity kommentar.

@HttpConstraint merknader gjelder alle HTTP-metoder. Med andre ord spesifiserer den standard sikkerhetsbegrensning.

@HttpConstraint har tre attributter:

  • verdi
  • roller Tillatt
  • transportGaranti

Ut av disse attributtene er det mest brukte attributtet roller Tillatt. I eksempelkodebiten ovenfor brukerne som tilhører rollen Medlem har lov til å påkalle alle HTTP-metoder.

@HttpMethodConstraint merknader lar oss spesifisere sikkerhetsbegrensningene for en bestemt HTTP-metode.

@HttpMethodConstraint har følgende attributter:

  • verdi
  • emptyRoleSemantic
  • roller Tillatt
  • transportGaranti

I eksempelkodebiten ovenfor viser den hvordan doPost metoden er bare begrenset for brukere som tilhører Administrator rolle, slik at innskuddsfunksjonen bare kan utføres av en Administrator bruker.

8. @MultipartConfig

Denne merknaden brukes når vi trenger å kommentere en servlet som skal håndteres flerdelt / skjemadata forespørsler (vanligvis brukt for en filopplastingsservlet).

Dette vil utsette getParts () og getPart (navn) metoder for HttpServletRequest kan brukes til å få tilgang til alle deler så vel som en individuell del.

Den opplastede filen kan skrives til disken ved å ringe til skriv (filnavn) av delobjektet.

Nå skal vi se på et eksempel på servlet UploadCustomerDocumentsServlet som viser bruken:

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

@MultipartConfig har fire attributter:

  • fileSizeThreshold - Dette er størrelsesterskelen når du lagrer den opplastede filen midlertidig. Hvis størrelsen på den opplastede filen er større enn denne terskelen, blir den lagret på disken. Ellers lagres filen i minnet (størrelse i byte)
  • maxFileSize - Dette er den maksimale størrelsen på den opplastede filen (størrelse i byte)
  • maxRequestSize - Dette er den høyeste størrelsen på forespørselen, inkludert både opplastede filer og annen skjemadata (størrelse i byte)
  • plassering - Dette er katalogen der opplastede filer lagres

9. Konklusjon

I denne artikkelen så vi på noen Java EE-merknader introdusert med Servlet API 3.1 og deres formål og deres bruk.

Kildekode relatert til denne artikkelen finner du på GitHub.


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