我有示例代码:
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-4.0.xsd">
<bean id="myController" class="biz.tugay.springWebOne.MyController"/>
</beans>
springDispatcher-servlet.xml中
package biz.tugay.springWebOne;
/* User: koray@tugay.biz Date: 08/07/15 Time: 15:25 */
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyController {
@RequestMapping(value = "/hello")
public String helloWorld(){
return "index.jsp";
}
}
MyController.java
@Controller
嗯,这个代码一切正常。但是,当我删除
HTTP ERROR 404
Problem accessing /hello. Reason:
Not Found
来自 MyController 类,我会得到:
MainApplication
我没有使用组件扫描,我使用的是基于xml的配置。为什么我需要@Controller注释?
答案 0 :(得分:1)
来自春季参考文档here
@Controller注释充当注释的构造型 类,表明它的作用。 调度程序扫描此类注释 映射方法的类并检测@RequestMapping注释
所以 @Controller 需要告诉调度员扫描此类中的映射,而不仅仅是组件扫描。
答案 1 :(得分:0)
如果您正在使用组件扫描,那么在没有@Controller注释的情况下,Spring将不知道在哪里扫描@RequestMapping。如果您想使用XML配置您的请求映射,那么应该可以像这里的答案之一那样完成:@RequestMapping with XML
答案 2 :(得分:0)
您的示例将无效,因为@Controller
注释本质上是告诉组件扫描程序扫描此类的“入口点”,没有@Controller
所有其他Spring控制器注释(例如@RequestMapping
})将被忽略。
我注意到你指出你没有使用组件扫描并且你正在使用基于xml的配置,但实际上你正在尝试将基于xml和基于注释的配置混合到一个类中,这将导致非常草率的代码。我建议删除xml bean定义并仅使用@Controller
注释并在xml中添加component-scan
标记来清理代码。
如果您决定仍想进行xml配置,则应删除@RequestMapping
注释并将其替换为以下xml。
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<map>
<entry key="/hello" value-ref="myController"/>
</map>
</property>
</bean>
答案 3 :(得分:-1)
如果要在没有注释的情况下使用Spring,那么可以使用BeanNameUrlHandlerMapping指示Dispatcher的控制器类。因此,只需将以下bean添加到XML中,您就不必再包含@Controller: