SpringMVC 框架中,DispatcherServlet负责分发请求到控制器Controller 处理。Controller把用户的请求数据经过业务层处理后封装成一个ModelAndView对象,然后再把该对象返回给对应的View进行展示。在SpringMVC 中定义一个Controller是非常简单的,不需要继承特定的类,也不需要实现相关接口,只需使用@Controller 注解在一个类上进行标记即可。然后使用@RequestMapping等一些注解用定义URL 请求和映射,这样Controller 就能被访问了。
下面小博老师给大家演示一个Controller定义的小例子:
@Controller
public class BwfController {
@RequestMapping ( "/boweifeng" )
public ModelAndView showView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName( "boweifeng" );
modelAndView.addObject( "addredd" , "上海市云南北路59号15楼" );
return modelAndView;
}
}
在这个例子中,@Controller 用于标记一个类,使用@Controller标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
仅仅使用@Controller 标记还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为没有相关配置,Spring 还不能识别它。那么怎么才能让Spring识别它呢?这就需要我们把这个控制器类交给Spring管理。
两种方式可以把BwfController交给Spring 管理,让它能够识别标记的@Controller 。
1. 在SpringMVC 的配置文件中定义MyController 的bean 对象。
这句话意味着在spring中手动定义该controller bean。如果controller比较多,这样做会比较麻烦。
2. 在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller控制器。
定义了component-scan 后,spring会自动扫描指定包内的类是否有@Controller注解。