Spring MVC静态资源定位和映射

时间:2012-05-26 19:17:24

标签: java css spring-mvc

我在Spring MVC中处理css文件时遇到问题。 css文件的位置和映射有问题。

如果css文件位于:

-src
  -main
     +java
     +resources
     -webapp
        -css
           style.css
        +WEB-INF

(Maven项目)

我用:

 <mvc:resources location="/css/" mapping="/css/**"/>
 <mvc:annotation-driven/> 
<{1>}中的

,访问权限在dispatcher-servlet.xml中访问:

jsp

2 个答案:

答案 0 :(得分:5)

使用JSTL c标记解决上下文路径问题:

 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 ...
 <link rel="stylesheet" type="text/css" href="<c:url value='/css/style.css'/>"/>

会给你:

 <link rel="stylesheet" type="text/css" href="/{context-path}/css/style.css"/>

建议使用此标记,您应该用它包装所有URL,因为JSLT处理器将为您生成正确的上下文路径,即使您决定稍后更改上下文路径而不必遍历所有jsp文件中的每个链接

答案 1 :(得分:3)

要解决此问题以便您的代码将使用您在生产中使用的实际路径运行,请在JSP页面中使用<base>标记,如下所示:

<base href="http://localhost:8081/table/" target="_blank" />

这将确保JSP页面中所有其余的相对路径都可以使用完整路径表示:

<link href="/css/style.css" rel="stylesheet" type="text/css">

有关进一步阅读,请参阅Mozilla开发人员中心,了解HTML base element的用法。此外,这个blog post也可能有助于您了解如何使用客户端代码,特别是如果您与不是Java开发人员的Web设计人员合作。


注意:顺便说一句,如果您将@ gigadot的proposed solution to use c:url tags与基本标记结合使用,那么您将无需编辑网站上的每个链接并使其混乱HTML,同时仍然使基本标记是动态的,这样如果你改变了上下文路径,它仍然会在任何地方反映出来,但是这种方式不能将你如此紧密地绑定到框架上。

我是linking to that answer,因此使用<c:url标记的功劳归于@gigadot,但在此记录,以便其他人可以从使用这两者的综合知识中受益。

<base href="<c:url value='/table' />" target="blank" />