SpringMVC工作原理
springMVC是什么:
springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度百科上有一个很好的解释:意思是说,springMVC是spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说springMVC和spring无缝集成,其实springMVC就是spring的一个子模块,所以根本不需要同spring进行整合。
1、SpringMvc的工作流程
(1)用户请求发送到前端控制器DispatchServlet;
(2)DispatchServlet收到请求调用HadlerMapping处理器映射器;
(3)处理器映射器根据配置XML、注解查找具体的处理器,生成处理器对象以及处理器拦截器(如果有就生成)一并返回给DispatchServlet;
(4)DispatchServlet通过HandlerAdapter处理器适配器调用处理器;
(5)HandlerAdapter通过适配调用具体的处理器(Controller,也叫后端控制器)
(6)Controller执行完成返回ModelAndView
(7)HandlerAdapter将Controller的执行结果ModelAndView返回给DispatchServlet
(8)DispatchServlet将ModelAndView传给ViewReslover视图解析器
(9)ViewReslover解析后返回具体的view
(10)DispatchServlet根据view进行渲染视图(将模型数据填充到视图中)
(11)DispatchServlet响应用户。
2、组件说明
(1)DispatchServlet前端控制器,整个流程的控制中心,控制其他组件,统一调度,降低各个组件之间的耦合性,提高每个组件的扩展性
(2)HandlerMapping处理器映射器,通过处理器映射器实现不同的映射方式,例如:配置文件方式、实现接口方式、注解方式。
(3)HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。
(4)ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。
3、springMVC–4种映射处理器handlerMapping
如何根据http请求选择合适的controller是MVC中一项十分关键的功能,在spring MVC中,
HandlerMapping接口是这一活动的抽象。
4种映射处理器handlerMapping:
- 根据controller的name名称来映射寻找controller
BeanNameUrlHandlerMapping (默认)
1.1开启该映射:默认是开启的
1.2定义bean的name属性:
1.3界面访问URL:与bean的name属性值一致
http://localhost:5080/springmvc/hello1.do
2.根据URL来映射寻找controller:推荐使用
SimpleUrlHandlerMapping
2.1开启该映射:
HelloController
2.2定义bean:
2.3界面URL访问:与prop的key属性值一致
http://localhost:5080/springmvc/hello2.do
优点:将controller定义与映射分离开,耦合性低。
3.根据controller的类名来映射寻找controller:
ControllerClassNameHandlerMapping
3.1开启类名映射处理器:
3.2定义bean
3.3界面URL访问:与bean的id属性值无关。
http://localhost:5080/springmvc/hello2.do 正确
http://localhost:5080/springmvc/hello2Controller.do 正确
http://localhost:5080/springmvc/hello21111.do 正确
http://localhost:5080/springmvc/hello3.do 错误
注意点:使用类名来访问一个Controller,
类名首字符要小写,后面要加.do (不建议使用)
4.使用注解来映射寻找controller:
DefaultAnnotationHandlerMapping
DefaultAnnotationHandlerMapping和RequestMappingHandlerMapping都是处理requestMapping的注解,
前者以废弃,不建议使用,后者用来代替前者
1.开启注解扫描组件:
作用:当我加载配置文件时,到我们指定的包下扫描(读取)Java文件,
寻找标注注解的地方(接口,类,方法或者其他),进行完成初始化。
<context:component-scan base-package=“com”></context:component-scan>
2.在类上标记:@Controller 声明该类是一个springMVC Controller
3.在方法上使用:@RequestMapping("/login") 声明该方法处理哪一个请求
@Controller
@RequestMapping("/login")
public ModelAndView login() {
ModelAndView mv = new ModelAndView();
mv.setViewName("login");
return mv;
}
}
843

被折叠的 条评论
为什么被折叠?



