Spring v3 找不到元素“mvc:resources”的声明
Posted
技术标签:
【中文标题】Spring v3 找不到元素“mvc:resources”的声明【英文标题】:Spring v3 no declaration can be found for element 'mvc:resources' 【发布时间】:2011-11-18 04:05:50 【问题描述】:正在运行
Tomcat:v6
Spring 工具套件:v2.7.2
Spring 框架:spring-webmvc-3.0.5
Servlet XML
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc/spring-mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources" />
<context:component-scan base-package="com.app.mvc" />
</beans>
web.xml 部分代码
<servlet-mapping>
<servlet-name>duckapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Servlet 用途
web.xml 将所有 url 映射到 servlet,但 mvc:resources 映射静态文件除外。
错误
cvc-complex-type.2.4.c:匹配的通配符是严格的,但找不到元素“mvc:annotation-driven”的声明。 app-servlet.xml /app/www/WEB-INF
cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素“mvc:resources”的声明。 app-servlet.xml /app/www/WEB-INF
已知问题
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 不包含元素资源
如果替换成http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd还是不行,根据spring 3.05的jar文件可能不工作
mvc:resources 出现在 spring v3.0.4 中,但没有新的 xsd
问题
如何修复编译错误以使 mvc:resources 正常工作?
我已经为此挖掘了大约 2 个小时,还没有可靠的答案......
【问题讨论】:
我不认为在 xsd 声明中使用版本是可取的。如果没有给出版本,Spring 将在项目的依赖项中使用最高版本。 【参考方案1】:在您的 spring 上下文中,xml mvc 命名空间 url 应该与 schemaLocation 中的 url 匹配。像这样的:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
这是一个标准的 XML 命名空间声明。命名空间 url 是一种唯一的 id,然后映射到 xsi:schemaLocation 中的实际模式位置。
【讨论】:
谢谢,这正是问题所在! 谢谢,也为我工作。我希望这在 Spring 中有更好的记录 不起作用。我有完全相同的问题,但使用 spring 3.1 在上面的 sn-p 中你唯一需要改变的是 spring-mvc.xsd 的版本 - springframework.org/schema/mvc/spring-mvc-3.1.xsd 在这种情况下尝试以下一个 xmlns:beans="springframework.org/schema/beans" 我遇到了同样的问题,这解决了它..【参考方案2】:当使用 Spring 命名空间 url 时,我通常不使用版本信息,并且 大多数时候工作得很好。 您可能想尝试命名空间 url
http://www.springframework.org/schema/mvc/spring-mvc.xsd
而不是
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
【讨论】:
我不认为在 xsd 声明中使用版本是可取的。如果没有给出版本,Spring 将在项目的依赖项中使用最高版本。【参考方案3】:我遇到了同样的错误。原因是缺少 Maven 依赖项 spring -webmvc。我包含了以下依赖项,它开始工作了。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>$spring.version</version>
</dependency>
【讨论】:
【参考方案4】:我认为您的 schemaLocation 映射不正确。命名空间指定为:
xmlns:mvc="http://www.springframework.org/schema/mvc"
这是正确的,我相信,但在 schemaLocation 你有
http://www.springframework.org/schema/mvc/spring-mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
因此,如果您将 schemaLocation 映射的第一行更改为您的 mvc 命名空间,它应该可以正常工作。
【讨论】:
【参考方案5】:我已报名参加 udemy 的春季课程。我按照老师教我做的每一个步骤去做。 所以如果你使用spring mvc和hibernate你可能会遇到这个错误 无法读取架构文档“http://www.springframework.org/schema/tx/spring-tx.xsd”等:
<mvc:annotation-driven/> and <tx:annotation-driven transaction-manager="myTransactionManager" /> elements
在我的 spring 配置文件中我有这两个 url
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
在 xsi:schemaLocation 中,我将其替换为
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
实际上我访问了这两个站点 http://www.springframework.org/schema/mvc/ 和 http://www.springframework.org/schema/tx/ 并且刚刚添加了最新版本的 spring-mvc 和 spring-tx,即 spring-mvc-4.2.xsd 和 spring-tx-4.2.xsd
所以,在我看来,明确指定版本 no 是一个好习惯。 它对我有用,希望这对你也有用。 谢谢。
【讨论】:
以上是关于Spring v3 找不到元素“mvc:resources”的声明的主要内容,如果未能解决你的问题,请参考以下文章
spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明
MPAndroidChart v3.1.0 在github上找不到
Webpacker 找不到 https://js.stripe.com/v3/.js
SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
Odata v3 中的 C#“找不到该段的资源”错误,状态代码为 200
找不到与命名空间 http://schemas.microsoft.com/WebParts/v3/Publishing/runtime 关联的脚本或扩展对象