由于路径差异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/">