SpringMVC工作流程
一、SpringMVC简介
SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,并管理应用所需对象的生命周期,为简化日常开发,提供了很大便利。
SpringMVC提供了总开关DispatcherServlet
;请求
处理映射器(Handler Mapping)和处理适配器(Handler Adapter),视图解析器(View Resolver)进行视图管理;动作处理器Controller接口(包含ModelAndView,以及处理请求响应对象request和response),配置灵活,支持文件上传,数据简单转化等强大功能。
二、工作流程与介绍
(1)客户端通过url发送请求
<a href="hello">入门程序</a>
(2-3)核心控制器Dispatcher Servlet接收到请求,通过系统或自定义的映射器(Handler Mapping)配置找到对应的handler,并将url映射的控制器controller返回给核心控制器。
比如上面请求的hello,通过处理器映射器找到sayhello方法。然后返回给核心控制器(Dispatcher Servlet)
(4)通过核心控制器找到系统或默认的适配器
//控制器类
@Controller
public class HelloController {
@RequestMapping(path ="/hello")//说简单一点这里的作用就是建立请求路径和控制器之间的关系,但用户请求这个地址时就可以直接调用控制器进行跳转
public String sayHello() {
System.out.println("hello springmvc");
return "success";
}
}
(5-7)由找到的适配器,调用实现对应接口的处理器,并将结果返回给适配器,结果中包含数据模型和视图对象,再由适配器返回给核心控制器
这里返回需要找的页面为seccess.jsp
(8-9)核心控制器将获取的数据和视图结合的对象传递给视图解析器,获取解析得到的结果,并由视图解析器响应给核心控制器(进行找seccess.jsp的操作)
<!--视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
(10)核心控制器将结果返回给客户端
三、适配器作用
SpringMVC涉及的映射器,视图解析器的作用不难理解,映射器负责将前端请求的url映射到配置的处理器,视图解析器将最终的结果进行解析,但中间为什么要经过一层适配器呢,为什么不经映射器找到controller后直接执行返回呢?
那是因为SpringMVC为业务处理器提供了多种接口实现(例如实现了Controller接口),而适配器就是用来根据处理器实现了什么接口,最终选择与已经注册好的不同类型的Handler Adapter进行匹配,并最终执行,例如,SimpleControllerHandlerAdapter是支持实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么SimpleControllerHandlerAdapter就会去执行自己写的控制器中的具体方法来完成请求。