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】:改变
<link href="resources/css/font-awesome.min.css" rel="stylesheet"/>
到
<link href="/myapp/resources/css/font-awesome.min.css" rel="stylesheet"/>
/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 上下文中加载资源属性?
加载类路径中 jar 内的 spring 应用程序上下文文件