最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Web开发:一文带你搞懂Servlet和JSP请求路径的匹配方式

XAMPP相关 admin 218浏览 0评论

一. 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匹配路径没有绝对路径和相对路径之说,而静态资源的请求路径会有。现在你知道该怎么定义接口及资源的请求路径了吗?

转载请注明:XAMPP中文组官网 » Web开发:一文带你搞懂Servlet和JSP请求路径的匹配方式

您必须 登录 才能发表评论!