Java HttpServletMapping tutorial shows how to use HttpServletMapping to discover URL mappings at runtime.
last modified January 27, 2024
In this article we show how to use HttpServletMapping to discover URL mappings at runtime.
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
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.
pom.xml
<?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.
com/zetcode/MyServlet.java
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.
webapp/index.html
<!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.
Java HttpServletMapping - documentation
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Java tutorials.