当servlet url映射为/ as后缀时的差异

Difference when the servlet url is mapped with / as suffix

本文关键字:后缀 as servlet url 映射      更新时间:2023-09-26

我有一个问题。当我用/作为后缀映射我的servlet的url时,我没有得到css样式表或javascript,但只有我的html页面的文本。这真的很奇怪。例如

@WebServlet(name = "UserAreaServlet",
            urlPatterns = {"/user"})

这样我就得到了包含所有css和js资源的页面

,

@WebServlet(name = "UserAreaServlet",
            urlPatterns = {"/user/"})

这样我只得到文本而没有任何css或js

为什么?

后面的斜杠使它像一个改变相对路径的目录。

假设我的结构是:

webapps
  --myapp
     --css
        --style.css
     --servlet

servlet到css的相对路径是/css/style.css(因为servlet被视为直接在myapp下的文件)

webapps
  --myapp
     --css
        --style.css
     --servlet/

servlet/到css的相对路径是../css/style.css(因为servlet/被视为一个目录)

(我知道在现实中,在文件系统上,你的servlet在web-inf等等,但从url的角度来看,它直接在应用程序上下文中,如上图所示)