我有以下控制器:
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
,但结果相同。
答案 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。查看一些关于此的网络教程。