由于路径差异java,spring mvc,velocity而找不到JS / CSS文件
问题内容:
我有这个目录结构:
webapp
- resources
- custom.js
- base.css
- WEB-INF
- views
- layout.vm
- top.vm
- footer.vm
- index.vm
- FolderA
- restricted.vm
我的layout.vm是:
#parse('top.vm')
$screen_content
#parse('footer.vm')
我的top.vm包含以下JS和CSS文件:
<link href="resources/base.css" rel="stylesheet">
<script src="resources/custom.js"></script>
现在,当我访问http://www.example.com:8080/index页面时,我看到找到了JS和CSS文件。但是,当我访问http://www.example.com:8080/FolderA/restricted时,找不到JS和CSS文件。当我在顶部更改它时它起作用
但是随后索引页被破坏了。
我正在使用弹簧控制器返回适当的视图。例如,以下返回索引页:
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Model model) {
return "index";
}
这将返回受限视图:
@Controller
@RequestMapping(value = "/FolderA")
public class SomeController {
@RequestMapping(value = "", method = RequestMethod.GET)
public String secured(Model model) {
return "FolderA/restricted";
}
关于如何解决此问题的任何建议?
附带说明,在使用常规jsp文件时,我也遇到了这个问题,但是我设法使用来解决了这个问题<c:url ..>
。我不知道如何解决速度问题。
问题答案:
那就是因为您声明的资源是相对于用于访问视图的URL的。您必须将所有静态资源网址更改为绝对网址。您可以使用标记执行此操作
从此改变
<script src="resources/custom.js"></script>
至
<script src="<c:url value="/resources/custom.js"/>"></script>
这应该在HTML中生成这样的内容
<script src="<c:url value="http://www.example.com:8080/FolderA/resources/custom.js"/>">
</script>
注意但是要使此方法起作用,您应该添加 %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
到jsp并将jst标记库包含到webapp中
编辑 - - -
对于JS和CSS文件中内部引用的路径,有一种解决方法。使用基本标记定义HTML中需要使用的绝对路径标记。
<base href="http://www.example.com:8080/FolderA/">