spring dispatcher没有加载我的组件

时间:2014-12-25 22:23:30

标签: java spring spring-mvc

我有以下控制器:

package com.t.controller;

@Controller
@RequestMapping(value="/s")
public class SController {

    @RequestMapping(value="/la", method=RequestMethod.GET)
    public String listAll() {

        return "s/la";
    }

}

我有一个名为dispatcher-config.xml的调度程序配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        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">

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

</beans>

和web.xml

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/dispatcher-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-config.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

</web-app>

此配置未实例化我的SController。 这是日志Spring日志:

Looking for matching resources in directory tree [.../WEB-INF/classes/com/t/controller]
Searching directory [.../WEB-INF/classes/com/t/controller] for files matching pattern [.../WEB-INF/classes/com/t/controller/**/*.class]
Resolved location pattern [classpath*:com/t/controller/**/*.class] to resources []

它似乎应该有效。你知道为什么这个配置不起作用。

我甚至尝试使用WebApplicationInitializer,但结果相同。

2 个答案:

答案 0 :(得分:2)

首先,您的web.xml是多余的。移除ContextLoaderListener和相应的context-param

然后添加

<mvc:annotation-driven /> 

以及调度程序配置的相应名称空间。这实际上会将您的bean注册为处理程序。

您似乎也错过了您的web.xml中的<servlet-mapping>

答案 1 :(得分:0)

在web.xml中缺少调度程序servlet的servlet-mapping标记。

如果可能,请考虑为spring使用基于java注释的配置。如果您使用的是servlet 3,则甚至不需要使用web.xml。查看一些关于此的网络教程。