Java HttpServletMapping
last modified January 27, 2024
In this article we show how to use HttpServletMapping to discover URL mappings at runtime.
HttpServletMapping
HttpServletMapping
is the new Servlet 4.0 API which can be used for
the runtime discovery of URL mappings.
The servlet mapping is obtained from an HttpServletRequest
instance,
which has four methods:
- getMappingMatch — returns the type of the match
- getPattern — returns the URL pattern that activated the servlet request
- getMatchValue — returns the String that was matched
- getServletName — returns the fully qualified name of the servlet class that was activated with the request
Java HttpServletMapping example
In the following example, we use HttpServletMapping
to find out information
about URL mappings. The example is run on Tomcat. Note that we have to choose a recent Tomcat
version which has JARs with Servlet 4.0 API.
├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ └── MyServlet.java │ ├── resources │ └── webapp │ ├── index.html │ └── WEB-INF └── test └── java
This is the project structure.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>HttpServletMappingEx</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>11.0.11</version> <configuration> <webApp> <contextPath>/app</contextPath> </webApp> </configuration> </plugin> </plugins> </build> </project>
This is the pom.xml
file.
package com.zetcode; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name = "MyServlet", urlPatterns = {"/getMessage"}) public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain;charset=UTF-8"); HttpServletMapping mapping = request.getHttpServletMapping(); String mapName = mapping.getMappingMatch().name(); String value = mapping.getMatchValue(); String pattern = mapping.getPattern(); String servletName = mapping.getServletName(); StringBuilder builder = new StringBuilder(); builder.append("Mapping type: ").append(mapName) .append("; Match value: ").append(value) .append("; Pattern: ").append(pattern) .append("; Servlet name: ").append(servletName); ServletOutputStream out = response.getOutputStream(); out.println(builder.toString()); } }
We get the mapping info and send it to the client as text data.
@WebServlet(name = "MyServlet", urlPatterns = {"/getMessage"})
We set the URL patter to which the servlet is bound declaratively with @WebServlet
.
HttpServletMapping mapping = request.getHttpServletMapping(); String mapName = mapping.getMappingMatch().name(); String value = mapping.getMatchValue(); String pattern = mapping.getPattern(); String servletName = mapping.getServletName();
From the request object, we get the servlet mapping with getHttpServletMapping
.
We call all four methods.
StringBuilder builder = new StringBuilder(); builder.append("Mapping type: ").append(mapName) .append("; Match value: ").append(value) .append("; Pattern: ").append(pattern) .append("; Servlet name: ").append(servletName);
From the data we build one string.
ServletOutputStream out = response.getOutputStream(); out.println(builder.toString());
We send the string to the client.
<!DOCTYPE html> <html> <head> <title>Home Page</title> <meta charset="UTF-8"> </head> <body> <a href="getMessage">Get message</a> </body> </html>
This is a home page. It has a link that calls the servlet.
$ curl localhost:8080/app/getMessage Mapping type: EXACT; Match value: getMessage; Pattern: /getMessage; Servlet name: MyServlet
We create a request with the curl
tool.
In this article we have shown how to use the HttpServletMapping
.
Source
Java HttpServletMapping - documentation
Author
List all Java tutorials.