1.精确匹配
我们都以下面的servlet别名为例子来讲述
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.webDemo01.Servlet.login</servlet-class>
</servlet>
精确匹配就类似于下面的写法
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
- 访问路径:http://localhost:8080/yourApp/login
- 无法匹配:http://localhost:8080/yourApp/login/abc(因为它不完全匹配)
2. 目录匹配
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
- ✅ http://localhost:8080/yourApp/user
- ✅ http://localhost:8080/yourApp/user/profile
- ✅ http://localhost:8080/yourApp/user/settings
- ❌ http://localhost:8080/yourApp/admin(admin 不匹配 user)
3. 扩展匹配
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
- ✅ http://localhost:8080/yourApp/login.do
- ✅http://localhost:8080/yourApp/register.do
- ❌http://localhost:8080/yourApp/home.jsp
4. 默认 Servlet 匹配(根路径 /)
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
如果 url-pattern 设置为 /,那么所有未匹配到的请求都会被该 Servlet 处理。
适用场景:一般用于默认页面或者拦截所有请求(但不会匹配静态资源,如 index.html)。
访问路径:
- ✅ http://localhost:8080/yourApp/home
- ✅ http://localhost:8080/yourApp/user/profile
- ❌ http://localhost:8080/yourApp/index.html(通常由默认静态资源处理)
5. 覆盖所有请求(/*)
- 适用场景:
- Spring MVC 通常用这个来拦截所有请求,然后分发给 Controller。
- 权限拦截器(如 Filter)。
- 注意:可能导致静态资源(如 CSS、JS)也被拦截,需额外处理。
6. 多个 url-pattern 配置
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/user/*</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
7. 在 @WebServlet 注解中配置
@WebServlet(urlPatterns = {"/login", "/user/*", "*.do"})
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello Servlet");
}
}
效果和上面一样

577

被折叠的 条评论
为什么被折叠?



