Servlet虚拟路径映射
客户端通过 URL 地址来访问 Web 服务器中的资源,Servlet 程序若想被外界访问,就必须被映射到一个 URL 地址上。很多时候,该 URL 地址和 Servlet 程序的物理路径(在硬盘上的存储位置)并不一致,因此它被称为虚拟路径。Servlet 与虚拟路径的对应关系就叫做 Servlet 虚拟路径映射。
Servlet 虚拟路径映射可以被分为 2 类:
- 单一映射
- 多重映射
下面介绍如何实现单一映射和多重映射。
Servlet 单一映射
Servelt 单一映射是指一个 Servlet 只被映射到一个虚拟路径上。
Servlet 单一映射的实现方式有 2 种:
- 使用 web.xml 实现单一映射;
- 使用 @WebServlet 实现单一映射。
1. web.xml 实现单一映射
在 web.xml 文件中,使用
<?xml version="1.0" encoding="UTF-8"?>
MyServlet
net.biancheng.www.MyServlet
MyServlet
/myServlet
对以上标签说明如下:
元素用于注册 Servlet,即给 Servlet 起一个独一无二的名字。 包含两个主要的子元素 和 ,分别用于指定 Servlet 的名称和 Servlet 的完整限定名(包名+类名)。 元素用于定义 Servlet 与虚拟路径之间的映射。 包含两个子元素 和 ,分别用于指定 Servlet 的名称和虚拟路径。
2. @WebServlet 实现单一映射
在 @WebServlet 注解中,一般使用 value 属性实现 Servlet 单一映射,代码如下。
package net.biancheng.www;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
也可以使用 urlPatterns 属性实现 Servlet 单一映射,代码如下。
package net.biancheng.www;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Servlet 多重映射
Servlet 的多重映射是指一个 Servlet 可以被映射到多个虚拟路径上。此时,客户端可以通过多个路径实现对同一个 Servlet 的访问。
Servlet 多重映射的实现方式有 3 种:
- 配置多个
元素。 - 配置多个
子元素。 - 在 @WebServlet 的 urlPatterns 属性中使用字符串数组
1. 配置多个 元素
Servlet 2.5 规范之前,
以 serveltDemo 为例,在 web.xml 中配置两个
<?xml version="1.0" encoding="UTF-8"?>
MyServlet
net.biancheng.www.MyServlet
1
MyServlet
/myServlet
MyServlet
/myServlet2
2. 配置多个 子元素
从 Servlet 2.5 开始,
以 servletDemo 为例,
<?xml version="1.0" encoding="UTF-8"?>
MyServlet
net.biancheng.www.MyServlet
1
MyServlet
/myServlet
/myServlet3
3. @WebServlet 实现多重映射
Servlet 3.0 增加了对 @WebServlet 注解的支持,我们可以在 urlPatterns 属性中,以字符串数组的形式指定一组映射规则来实现 Servlet 的多重映射。
以 servletDemo 为例,在 @WebServlet 注解的 urlPatterns 属性中添加一组虚拟路径,代码如下。
@WebServlet(
urlPatterns = { "/myServlet", "/myServlet4" })