一. Servlet请求路径的定义方式
我们很多同学在学习Servlet匹配请求路径时,都知道匹配请求路径的方式有三种,分别是精确匹配、通配符匹配和后缀匹配,具体如下:
/a 精确匹配
/a/* 通配符匹配
*.do 后缀匹配
@WebServlet(urlPatterns = {"/a", "/a/*", "*.do"})
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//业务代码
}
}
上面这样定义的Servlet,就能接收精确匹配、通配符匹配、后缀匹配相应的请求路径。我们在浏览器中,可以按照如下格式进行访问:
http://localhost:8080/project/a
http://localhost:8080/project/a/bb
http://localhost:8080/project/cc.do
二. JSP中静态资源请求路径的定义方式
后来在学习jsp时,发现有时需要引入静态资源,如jsp页面中带有静态资源:
<head>
<title>$Title$</title>
<link rel="stylesheet" href="/project/resource/style/style.css">
<script type="text/javascript" src="resource/js/jquery.js"></script>
</head>
静态资源的请求路径,可以分为绝对路径和相对路径。绝对路径以斜杠(/)开头,这就很容易和Servlet的匹配路径混淆,让我们以为精确匹配前面的斜杠是绝对路径,在使用时有些人就把斜杠给省略掉了,变成相对路径的定义格式,定义成下面这样的格式:
@WebServlet(urlPatterns = {"addUser"})
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//业务代码
}
}
但在启动项目时,就出现了下面这样的错误:

请大家记住这个错误,如果出现上图中的这种错误,十有八九就是因为定义的请求路径有问题。因为”addUser”,既非精确匹配也不是通配符匹配,更不是后缀匹配,所有的这种定义方式都是错误的,正确的方式是应该定义成”/addUser”,如下面的代码:
@WebServlet(urlPatterns = {"/addUser"})
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//业务代码
}
}
所以初学者在定义路径时,应该多加注意,Servlet匹配路径没有绝对路径和相对路径之说,而静态资源的请求路径会有。现在你知道该怎么定义接口及资源的请求路径了吗?