【问题标题】:Context Root mapping and Spring MVC上下文根映射和 Spring MVC
【发布时间】:2016-06-25 02:45:31
【问题描述】:

我有 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/user/resources/js/myTutorModule.js

控制器 2 本地主机:8080/myApp/resources/js/myTutorModule.js

所以只有第二个在工作。有没有办法在不使用 JSP 上下文根的情况下处理这个问题(我打算使用 Angular JS 并想使用 html - 没有 JSP)。任何建议。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

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

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

    解决方案是尝试使用一些标记库,如 JSTL。将您的静态资源 url 定义为 &lt;c:url&gt; 变量标签,并在您需要引用静态或动态资源时使用它们。 &lt;c:url&gt; 总是尝试从应用程序的根目录(即 webcontent 文件夹)解析 url。

    步骤-

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

    2. 将jstl标签库包含到你想在其中使用&lt;c:url&gt;标签的jsp页面中 &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

    3. 定义url变量为&lt;c:url value="resources/js/myTutorModule.js" var="tutorModuleJs"/&gt;
    4. 使用链接引用中的变量 &lt;script type="text/javascript" src="${tutorModuleJs}"&gt;&lt;/script&gt;

    JSTL标签库url标签可以参考这个link了解更多

    【讨论】:

    • Chandan,谢谢你的建议。我试图不使用 JSP。但看起来除了你上面的建议之外没有其他选择。我的意思是,我最初的想法是使用 HTML + Angular js 和 Spring REST
    猜你喜欢
    • 2012-08-25
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多