是什么导致这个Spring MVC应用程序中的映射失败?

时间:2012-04-07 15:48:25

标签: spring-mvc

我正在尝试使用一个非常简单的Spring @mvc应用程序,并且我遇到了一个似乎是映射错误的问题。

来自web.xml:

<servlet>
    <servlet-name>works</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>works</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

控制器:

@Controller
@RequestMapping("/test")
public class TESTController  {
    private static Logger appLogger = Logger.getLogger("AppLogFile");

    public String serviceRequest(   Model model)
    {
        appLogger.info("======================= TESTController GET ===============================");
        model.addAttribute("returnString","TESTController handled the request") ;
        return "SingleStringView"; 
    }

作品-servlet.xml中:

<context:component-scan base-package="com.ami.dbconnect.controller" />

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

    <bean id="TESTController" class="com.ami.dbconnect.controller.TESTController"></bean>

    <!-- view resolver not shown -->

该应用程序部署到Tomcat 7 / webapps / works。 Tomcat文件结构是:

webapps
    /works
        /WEB-INF
            /classes
            /lib

我正在尝试使用url调用控制器:localhost:8080 / works / test

在tomcat7-stdout中,我看到了:

1106 [pool-2-thread-1] DEBUG org.springframework.web.servlet.DispatcherServlet - servlet的已发布WebApplicationContext'作为'具有名称的ServletContext属性[org.springframework.web.servlet.FrameworkServlet.CONTEXT.works ]

1106 [pool-2-thread-1] INFO org.springframework.web.servlet.DispatcherServlet - FrameworkServlet'works':初始化在728 ms完成

1106 [pool-2-thread-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Servlet'works'已成功配置

14068 [http-apr-8080-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet - 名为'works'的DispatcherServlet处理[/ works / test]的GET请求

14071 [http-apr-8080-exec-2] WARN org.springframework.web.servlet.PageNotFound - 在名为'works'的DispatcherServlet中找不到带有URI [/ works / test]的HTTP请求的映射

所以我的问题(终于!): Spring没有识别控制器中的注释吗?如果没有,这个简单的设置会出现什么问题?

感谢您提供任何帮助或建议, beeky

2 个答案:

答案 0 :(得分:2)

您需要将@RequestMapping注释移至serviceRequest方法。

类级别的

@RequestMapping可用于为所有@RequestMapping指定公共路径前缀 - 注释该类,但如果没有方法级别的注释,它不会产生任何效果。

答案 1 :(得分:1)

也许问题在servlet映射部分? 尝试改变:

<servlet-mapping>
    <servlet-name>works</servlet-name>
    <url-pattern>/works/*</url-pattern>
</servlet-mapping>

再试一次。