2

我在 Spring MVC 世界中是个新闻,我有一个答案给你。

我已经通过 STS\Eclipse 中的相关模板项目创建了一个新的 Spring MVC 项目。

好的,它为我创建了一个简单的预配置 Spring MVC 项目。

该项目通过在servlet-context.xml文件中使用以下标记配置为注释驱动:

<annotation-driven />

这个标签是一个帮助标签,它提供了额外的服务,比如消息转换、JSR 303 验证等,这并不是绝对必要的,所以一个简单的控制器工作(我可以将类注释为 @Controller 并指定要由组件扫描的包-扫描标签)

好的...这对我来说很清楚...但是在 STS\Eclipse 创建的示例中,我注意到如果我从我的 servlet-context.xml 文件中删除注释驱动的标签,我还必须删除以下内容才能正常工作来自同一配置文件的标记:

<resources mapping="/resources/**" location="/resources/" />

如果我删除了注释驱动标签但我没有删除以前的资源映射标签,当我启动我的应用程序时,这不运行,这不运行并进入错误说我:HTTP 状态 404 - 并在堆栈中跟踪我有:

INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 1104 ms
dic 03, 2012 12:57:16 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /home/andrea/SpringSource/vfabric-tc-server-developer-2.7.2.RELEASE/base-instance/webapps/ROOT
dic 03, 2012 12:57:16 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /home/andrea/SpringSource/vfabric-tc-server-developer-2.7.2.RELEASE/base-instance/webapps/manager
dic 03, 2012 12:57:16 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
dic 03, 2012 12:57:16 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3144 ms
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/maventestwebapp/] in DispatcherServlet with name 'appServlet'

但是,如果我还删除了以前的资源映射标签,项目运行良好......所以这意味着这一定是问题......似乎没有注释驱动的支持启用资源映射无法工作......

为什么?问题是什么?previus 资源映射标签的确切行为是什么?

太感谢了

安德烈亚


这是我的servlet-context.xml配置文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- Enables the Spring MVC @Controller programming model -->
<!--  <annotation-driven /> -->

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<context:component-scan base-package="com.mycompany.maventestwebapp" />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" /> 

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

4

1 回答 1

1

通过您的日志文件后,资源加载没有任何错误,但控制器显示警告,“WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/maventestwebapp/]在名为“appServlet”的 DispatcherServlet 中”。我认为这是 404 错误的原因。

根据 Spring 规范,<mvc:annotation-driven/> 和 <mvc:resources /> 之间没有关系或依赖关系。

此外,我通过保持 <mvc:resources /> 测试了一个没有 <mvc:annotation-driven/> 的示例应用程序,它运行良好。发布您的 servlet-config 文件以进行进一步调查。

于 2012-12-03T07:30:51.283 回答