一尘不染

如何在JSP中从/ main / resources链接Web资源文件?

jsp

我的java webapp中具有以下结构

-- main
   -- java
   -- resources
      -- lib
         -- css
            -- style.css
   -- webapp
      -- WEB-INF
         -- web.xml
      --index.jsp

如何将style.css链接到索引jsp?

<link rel="stylesheet" href="???">

这里应该是什么?

提前致谢


阅读 513

收藏
2020-06-08

共1个答案

一尘不染

Maven
/main/resources文件夹用于不代表Java类的类路径资源,例如i18n属性文件和各种配置文件(文本,xml,json等)。正是您想通过获取的资源ClassLoader#getResourceAsStream()

该文件夹不适用于公共Web资源(即,可通过公共http://xxxURL 访问的文件)。您应该将这些Web资源文件放在Maven
/main/webapp文件夹中(在/WEB-INF和外部/META-INF),就像您已经正确地为JSP文件(也是公共Web资源)所做的那样。

因此,只需/lib向下移动该文件夹即可(我个人也将该文件夹重命名为“ resources”,“ assets”或“
static”,这更符合事实上的标准;“ lib”文件夹名称即表示它是完整的JAR文件)。

main
 |-- java
 |-- resources
 `-- webapp
      |-- lib
      |    `-- css
      |         `-- style.css
      |-- WEB-INF
      |    `-- web.xml
      `--index.jsp

在这种结构下,示例部署上下文路径为/webapp,示例服务器在上运行http://localhost:8080,应该可以在绝对URL下访问CSS文件:

http:// localhost:8080 / webapp / lib / css /
style.css

因此,JSP页面的HTML表示中的以下任何CSS链接都应该起作用:

<link rel="stylesheet" href="http://localhost:8080/webapp/lib/css/style.css" />



<link rel="stylesheet" href="//localhost:8080/webapp/lib/css/style.css" />



<link rel="stylesheet" href="/webapp/lib/css/style.css" />



<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/css/style.css" />

随便吧。考虑到目标URL其他部分的动态性,建议使用最后一个。

2020-06-08