En Java-webapplikasjon uten web.xml

1. Oversikt

I denne opplæringen oppretter vi en Java-webapplikasjon ved hjelp av Servlet 3.0+.

Vi tar en titt på tre merknader - @WebServlet, @WebFilter, og @WebListener - som kan hjelpe oss med å nix vår web.xml filer.

2. Maven-avhengigheten

For å kunne bruke disse nye kommentarene, må vi inkludere javax.servlet-api avhengighet:

 javax.servlet javax.servlet-api 4.0.1 

3. XML-basert konfigurasjon

Før Servlet 3.0 ville vi konfigurere et Java-webapplikasjon i en web.xml fil:

  com.baeldung.servlets3.web.listeners.RequestListener versalerServlet com.baeldung.servlets3.web.servlets.UppercaseServlet versalerServlet / store bokstaverParamFilter com.baeldung.servlets3.web.filters.EmptyParamFilter 

La oss begynne å erstatte hver konfigurasjonsseksjon med de respektive kommentarene introdusert i Servlet 3.0.

4. Servlets

JEE 6 leveres med Servlet 3.0 som gjør det mulig for oss å bruke annoteringer for servletdefinisjoner, og minimere bruken av en web.xml fil for en webapplikasjon.

For eksempel kan vi definere en servlet og eksponere den med @WebServlet kommentar

La oss definere en servlet for URL-mønsteret /stor bokstav. Det vil transformere verdien av inngang forespørsel parameter til store bokstaver:

@WebServlet (urlPatterns = "/ stor bokstav", navn = "uppercaseServlet") offentlig klasse OppercaseServlet utvider HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response) kaster IOException {String inputString = request.getParameter.) ; PrintWriter out = respons.getWriter (); out.println (inputString); }}

Merk at vi definerte et navn på servletten (store bokstaverServlet) som vi nå kan referere til. Vi bruker dette i neste avsnitt.

Med @WebServlet kommentar, vi erstatter servlet og servlet-mapping seksjoner fra web.xml fil.

5. Filtre

EN Filter er et objekt som brukes til å fange opp forespørsler eller svar, og utføre oppgaver før eller etter behandlingen.

Vi kan definere et filter med @WebFilter kommentar.

La oss lage et filter for å sjekke om inngang forespørsel parameter er til stede:

@WebFilter (urlPatterns = "/ store bokstaver") public class EmptyParamFilter implementerer filter {@Override public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) kaster IOException, ServletException {String inputString = servr = hvis (inputString! = null && inputString.matches ("[A-Za-z0-9] +")) {filterChain.doFilter (servletRequest, servletResponse); } annet {servletResponse.getWriter (). println ("Manglende inndataparameter"); }} // implementeringer for andre metoder}

Med @WebFilter kommentar, vi erstatter filter og filterkartlegging seksjoner fra web.xml fil.

6. Lyttere

Vi må ofte utløse handlinger basert på visse hendelser. Det er her lytterne kommer til unnsetning. Disse objektene vil lytte etter en hendelse og utføre oppførselen vi spesifiserer.

Som tidligere kan vi definere en lytter med @WebListener kommentar.

La oss lage en lytter som teller hver gang vi utfører en forespørsel til serveren. Vi implementerer ServletRequestListener, lytter etter ServletRequestEvents:

@WebListener offentlig klasse RequestListener implementerer ServletRequestListener {@Override public void requestDestroyed (ServletRequestEvent event) {HttpServletRequest request = (HttpServletRequest) event.getServletRequest (); hvis (! request.getServletPath (). er lik ("/ counter")) {ServletContext context = event.getServletContext (); context.setAttribute ("counter", (int) context.getAttribute ("counter") + 1); }} // implementeringer for andre metoder}

Merk at vi ekskluderer forespørslene til URL-mønsteret /disk.

Med @WebListener kommentar, vi erstatter lytter seksjon fra web.xml fil.

7. Bygg og løp

For de som følger med, vær oppmerksom på at det for testing er en annen servlet vi har lagt til for /disk endepunkt som bare returnerer disk servlet kontekstattributt.

Så, la oss bruke Tomcat som applikasjonsserveren.

Hvis vi bruker en versjon av maven-war-plugin før 3.1.0, må vi sette eiendommen failOnMissingWebXml til falsk.

Nå kan vi distribuere vår .krig fil til Tomcatog tilgang til våre servlets.

La oss prøve ut vårt /stor bokstav sluttpunkt:

krøll // localhost: 8080 / spring-mvc-java / store bokstaver? input = texttouppercase TEXTTOUPPERCASE

Og vi bør også se hvordan feilhåndteringen vår ser ut:

curl // localhost: 8080 / spring-mvc-java / versaler Manglende inndataparameter

Og til slutt, en rask test av lytteren vår:

curl // localhost: 8080 / spring-mvc-java / counter Forespørselsteller: 2

8. XML fortsatt nødvendig

Selv med alle funksjonene som er introdusert i Servlet 3.0, er det noen bruksområder der vi fortsatt trenger en web.xml fil, blant dem:

  • Vi kan ikke definere filterrekkefølgen med merknader - vi trenger fortsatt seksjonen hvis vi har flere filtre som vi må bruke i en bestemt rekkefølge
  • For å definere en tidsavbrudd for økt, må vi fremdeles bruke seksjon
  • Vi trenger fremdeles element for containerbasert autorisasjon
  • Og for å spesifisere velkomstfiler, trenger vi fortsatt en seksjon

Eller Servlet 3.0 introduserte også noen programmatisk støtte via ServletContainerInitializerogså, som også kan fylle ut noen av disse hullene.

9. Konklusjon

I denne opplæringen konfigurerte vi en Java-webapplikasjon uten å bruke web.xml arkiv ved å utøve tilsvarende merknader.

Som alltid kan kildekoden for denne opplæringen bli funnet på GitHub. I tillegg kan et program som bruker den tradisjonelle web.xml-filen også bli funnet på GitHub.

For en vårbasert tilnærming, gå over til opplæringen vår web.xml vs. initialisering med våren.


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