上下文根映射和Spring MVC

时间:2016-06-25 02:45:31

标签: spring spring-mvc

我有2个控制器,它们被重定向到同一个jsp。

//Controller1
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(method=RequestMethod.GET)
    public String defaultPage(Model model){
         return "home";
    }
}

//Controller2
@Controller
@RequestMapping("/")
public class HomeController {
    @RequestMapping(method=RequestMethod.GET)
    public String HomePage(Model model){
         return "home";
    }
}    

现在在“主页”视图页面上,我有下面的脚本。

<script type="text/javascript" src="resources/js/myTutorModule.js">     
</script>

此行在浏览器中呈现如下。 控制器1 本地主机:8080 /对myApp /用户/资源/ JS / myTutorModule.js

控制器2 本地主机:8080 /对myApp /资源/ JS / myTutorModule.js

所以只有第二个正在运作。有没有办法处理这个没有使用JSP上下文根(我打算使用角度JS,并希望使用HTML - 没有JSP)。任何建议。

1 个答案:

答案 0 :(得分:0)

使用JSTL标记库在视图页面中进行URL解析,而不是对网址进行硬编码。 Spring有时会从浏览的URL定义页面的上下文。假设您在网址 app / user / add app / user / list 中使用相同的js或css静态资源。

然后,如果您引用静态资源,例如 /resources/js/file.js ,那么解析的网址可能会有所不同,因为网址的根在这种情况下不同 / add /resources/js/file.js 和后面的 /list/resources/js/file.js 。这就是为什么某些视图页面可能无法正确呈现的原因。

解决方案是尝试使用一些像JSTL这样的taglib。将静态资源URL定义为<c:url>变量标记,并在需要引用静态或动态资源时使用它们。 <c:url>始终尝试从作为webcontent文件夹的应用程序的根目录解析URL。

<强>步骤 -

  1. 如果您正在使用任何构建系统,请将jstl依赖项包含到您的项目中。或者只是在手动构建应用程序时包含jstl jar文件。

  2. 将jstl标记lib包含到要使用<c:url>标记的jsp页面中 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  3. 将网址变量定义为<c:url value="resources/js/myTutorModule.js" var="tutorModuleJs"/>
  4. 使用链接引用中的变量 <script type="text/javascript" src="${tutorModuleJs}"></script>
  5. 您可以参考此link以了解有关JSTL标记库网址标记

    的更多信息