En Java-webapplikation uden en web.xml

1. Oversigt

I denne vejledning opretter vi en Java-webapplikation ved hjælp af Servlet 3.0+.

Vi kigger på tre kommentarer - @WebServlet, @WebFilterog @WebListener - det kan hjælpe os med at nix vores web.xml filer.

2. Maven-afhængigheden

For at kunne bruge disse nye kommentarer skal vi medtage javax.servlet-api afhængighed:

 javax.servlet javax.servlet-api 4.0.1 

3. XML-baseret konfiguration

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

  com.baeldung.servlets3.web.listeners.RequestListener store bogstaverServlet com.baeldung.servlets3.web.servlets.UppercaseServlet store bogstaverServlet / store bogstaver tommeParamFilter com.baeldung.servlets3.web.filters.EmptyParamFilter 

Lad os begynde at erstatte hver konfigurationsdel med de respektive kommentarer, der blev introduceret i Servlet 3.0.

4. Servlets

JEE 6 leveres med Servlet 3.0, som giver os mulighed for at bruge kommentarer til servletdefinitioner, hvilket minimerer brugen af ​​en web.xml fil til en webapplikation.

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

Lad os definere en servlet til URL-mønsteret /store bogstaver. Det vil transformere værdien af input anmodningsparameter til store bogstaver:

@WebServlet (urlPatterns = "/ store bogstaver", navn = "uppercaseServlet") offentlig klasse OpercaseServlet udvider HttpServlet {public void doGet (HttpServletRequest anmodning, HttpServletResponse svar) kaster IOException {String inputString = anmodning.getParameter.) ; PrintWriter out = respons.getWriter (); out.println (inputString); }}

Bemærk, at vi definerede et navn til servlet (store bogstaverServlet) som vi nu kan henvise til. Vi bruger dette i det næste afsnit.

Med @WebServlet kommentar, vi erstatter servlet og servlet-kortlægning sektioner fra web.xml fil.

5. Filtre

EN Filter er et objekt, der bruges til at opfange anmodninger eller svar, der udfører opgaver inden for- eller efterbehandling.

Vi kan definere et filter med @WebFilter kommentar.

Lad os oprette et filter for at kontrollere, om input anmodningsparameter er til stede:

@WebFilter (urlPatterns = "/ store bogstaver") offentlig klasse EmptyParamFilter implementerer filter {@ Override public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) kaster IOException, ServletException {Stringequestestring = serv. hvis (inputString! = null && inputString.matches ("[A-Za-z0-9] +")) {filterChain.doFilter (servletRequest, servletResponse); } andet {servletResponse.getWriter (). println ("Manglende inputparameter"); }} // implementeringer til andre metoder}

Med @WebFilter kommentar, vi erstatter filter og filter-kortlægning sektioner fra web.xml fil.

6. Lyttere

Vi bliver ofte nødt til at udløse handlinger baseret på bestemte begivenheder. Det er her, lyttere kommer til undsætning. Disse objekter vil lytte efter en begivenhed og udføre den adfærd, vi specificerer.

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

Lad os oprette en lytter, der tæller hver gang vi udfører en anmodning til serveren. Vi implementerer ServletRequestListener, lytter efter ServletRequestEvents:

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

Bemærk, at vi ekskluderer anmodningerne om URL-mønsteret / tæller.

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

7. Byg og kør

For dem der følger med, bemærk at der til test er der en anden servlet, som vi har tilføjet til / tæller slutpunkt, der simpelthen returnerer tæller servlet-kontekstattribut.

Så lad os bruge det Tomcat som applikationsserveren.

Hvis vi bruger en version af maven-war-plugin inden 3.1.0 skal vi indstille ejendommen failOnMissingWebXml til falsk.

Nu kan vi implementere vores .krig fil til Tomcatog adgang til vores servlets.

Lad os prøve vores /store bogstaver slutpunkt:

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

Og vi skal også se, hvordan vores fejlhåndtering ser ud:

curl // localhost: 8080 / spring-mvc-java / store bogstaver Manglende inputparameter

Og endelig en hurtig test af vores lytter:

curl // localhost: 8080 / spring-mvc-java / counter Anmodningstæller: 2

8. XML stadig brug for

Selv med alle de funktioner, der er introduceret i Servlet 3.0, er der nogle brugstilfælde, hvor vi stadig har brug for en web.xml fil, blandt dem:

  • Vi kan ikke definere filterordren med kommentarer - vi har stadig brug for sektion, hvis vi har flere filtre, som vi skal anvende i en bestemt rækkefølge
  • For at definere en timeout, skal vi stadig bruge afsnit
  • Vi har stadig brug for element til containerbaseret autorisation
  • Og for at specificere velkomstfiler har vi stadig brug for en afsnit

Eller Servlet 3.0 introducerede også nogle programmatisk support via ServletContainerInitializerogså, hvilket også kan udfylde nogle af disse huller.

9. Konklusion

I denne vejledning konfigurerede vi en Java-webapplikation uden at bruge web.xml arkiv ved at udøve de tilsvarende kommentarer.

Som altid kan kildekoden til denne vejledning findes på GitHub. Derudover kan et program, der bruger den traditionelle web.xml-fil, også findes på GitHub.

For en forårsbaseret tilgang, gå over til vores tutorial web.xml vs. initialisering med Spring.


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