2

我正在尝试让一个非常简单的 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 -->

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

webapps
    /works
        /WEB-INF
            /classes
            /lib

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

在 tomcat7-stdout 我看到:

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

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

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

14068 [http-apr-8080-exec-2] 调试 org.springframework.web.servlet.DispatcherServlet - 名称为“works”的 DispatcherServlet 处理 [/works/test] 的 GET 请求

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

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

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

4

2 回答 2

2

您需要将@RequestMapping注释移动到您的serviceRequest方法中。

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

于 2012-04-07T16:01:22.297 回答
1

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

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

然后再试一次。

于 2012-04-08T20:14:26.240 回答