SpringMVC 的执行原理
关键词: Spring MVC
SpringMVC 是一个web 框架,它实现了 MVC 三层架构。
大体上来说,SpringMVC 通过 DispatchServlet 拦截用户请求的 url,
然后决定交给哪一个 controller 处理
举一个例子:
- 假设用户输入 url 为
http://localhost:8080/SpringMVC/hello
http://localhost:8080
是服务器域名- SpringMVC 表示部署在服务器上的web站点
- hello表示控制器
通过分析,如上url表示为:
请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
-
HandlerMapping为处理器映射。
DispatcherServlet调用 HandlerMapping,
HandlerMapping根据请求url查找Handler。 -
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为: hello。
-
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
-
Handler让具体的Controller执行。
-
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView.
-
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet.
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
-
视图解析器将解析的逻辑视图名传给DispatcherServlet。
流程图如下,转自秦疆
Controller 部分代码
import org.springframework.web.servlet.Mode1Andview;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpservletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:这里我们先导入controller接口
public class Hellocontroller implements Controller {
public NodelAndview handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView模型和视图
ModelAndview mv = new ModelAndview();
//调用业务层,暂时不写
//封装对象,放在ModelAndView中
mv.add0bject( attributeName: "msg" , attributeValue: "HelloSpringWVC!");
// 封装要跳转的视图,放在ModelAndView中
// 后续会依据配置,使用 name 拼接成 WEB-INF/jsp/hello.jsp,
// 相当于告诉 SpringMVC 要将数据交给哪个 jsp
mv.setviewName("hello");
return mv;
}
}