Spring MVC3 资源正在加载,包括上下文中的 requestMapping 值

Posted

技术标签:

【中文标题】Spring MVC3 资源正在加载,包括上下文中的 requestMapping 值【英文标题】:Spring MVC3 resources are loading including requestMapping Value in the context 【发布时间】:2016-06-02 21:31:15 【问题描述】:

我有以下配置,这里就不写其他默认配置了

Spring-servlet.xml

/WEB-INF/views/ .jsp

  <!-- Handle efficient GET requests for resources -->
<mvc:resources mapping="/resources/**" location="resources/" />
<mvc:annotation-driven />

控制器类

@Controller     
public class TablesController 



  @Autowired
  private ReferenceTableService referenceTableService;

  @RequestMapping(value = "/tables/edit", method = RequestMethod.GET)
  public String ShowTables(ModelMap map,
          @RequestParam(value = "tn", required = false) String tableName) 


      return "tables";
  

jsp文件

 <html lang="en"><head><meta http-equiv="Content-Type"
 content="text/html; charset=UTF-8"> <head> <!-- Font Awesome  CSS -->
 <link href="resources/css/font-awesome.min.css" rel="stylesheet"/>
 </head> <body>  Test </body> </html>

当我尝试在本地加载时:

http://localhost:9081/myapp/tables/edit

资源下的静态文件出现以下错误:您可以看到表已添加到上下文中

000000aa PageNotFound W org.springframework.web.servlet.DispatcherServlet noHandlerFound 没有为带有 URI [/myapp/tables/resources/css/font-awesome.min.css] 的 HTTP 请求找到映射名称为“应用程序”的 DispatcherServlet

如果我将 requestmapping 从 /tables/edit 更改为 /tables,则资源加载完美。

以下是文件夹结构:

【问题讨论】:

【参考方案1】:

改变

&lt;link href="resources/css/font-awesome.min.css" rel="stylesheet"/&gt;

&lt;link href="/myapp/resources/css/font-awesome.min.css" rel="stylesheet"/&gt;

/myapp 表示它将在根路径中检索css,否则它将在相对路径中进行。

【讨论】:

现在,它正在形成没有应用程序上下文 [myapp] 的 url。 localhost:9081/resources/css/font-awesome.min.css【参考方案2】:

可以通过将 contextpath 添加到 css 文件来解决此问题,如下所示:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="contextPath" value="$pageContext.request.contextPath"/>

<link href="$contextPath/resources/css/font-awesome.min.css" rel="stylesheet"/>

【讨论】:

以上是关于Spring MVC3 资源正在加载,包括上下文中的 requestMapping 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在多 Gradle 项目的 JUnit Spring 上下文中加载资源属性?

Spring源码系列 — Resource抽象

加载类路径中 jar 内的 spring 应用程序上下文文件

JNDI 与 spring mvc3 集成

spring加载classpath与classpath*的区别别

如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性