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

时间:2015-06-25 13:17:05

标签: maven jsp resources

我的java webapp

中有以下结构
-- main
   -- java
   -- resources
      -- lib
         -- css
            -- style.css
   -- webapp
      -- WEB-INF
         -- web.xml
      --index.jsp

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

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

这里应该是什么?

提前致谢

2 个答案:

答案 0 :(得分:6)

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

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

所以,只需移动/lib文件夹(我个人也将该文件夹重命名为“资源”,“资产”或“静态”,这更符合事实上的标准;“ lib“文件夹名称即表示它充满了JAR文件。”

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

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

  

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其他部分的动态性,最后一个是值得推荐的。

另见:

答案 1 :(得分:1)

您需要将要传递的资产放在webapp目录下的客户端中。否则,您将需要编写一个servlet来提供它们。

您可以在Java Servlet 3.1 Specification的第10章找到所有细节。