【SpringMVC】(一)什么是SpringMVC
详细见:狂神说SpringMVC01:什么是SpringMVC
1.回顾MVC
1.1 什么是MVC
- MVC是模型Model、视图View、控制器Controller的简写,是一种软件设计规范。
- MVC的主要作用是降低了视图与业务逻辑间的双向耦合。
1.2 回顾Servlet
-
1.导入依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> -
2.HelloServlet
public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取前端参数 String method = req.getParameter("method"); if(method.equals("add")){ req.getSession().setAttribute("msg","执行了add方法"); } if(method.equals("delete")){ req.getSession().setAttribute("msg","执行了delete方法"); } //2.调用业务层 //3.视图转发或者重定向 req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } -
3.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.musecho.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> -
4.test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>test</title> </head> <body> ${msg} </body> </html> -
5.请求url
http://localhost:8080/hello?method=add
2.什么是SpringMVC
2.1 概述
-
官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc
-
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
2.2 中心控制器
-
Spring的web框架围绕DispatcherServlet(调度Servlet)设计。
-
DispatcherServlet的作用是将请求分发到不同的处理器。
-
SpringMVC以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet本质是Servlet(继承HttpServlet基类)。
2.3 SpringMVC执行原理
-
SpringMVC原理

-
SpingMVC执行原理


可参考例子理解原理:【SpringMVC】(二)第一个MVC程序
-
假设请求的url是:
http://localhost:8080/SpringMVC/hello -
1.用户发送请求,被DispatcherServlet拦截

-
2.DispatcherServlet会调用springmvc配置文件中的处理器映射HandlerMapping


HandlerMapping根据请求url(/hello)查找Handler

-
3.HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器hello

-
4.HandlerExecution将解析后的信息传递给DispatcherServlet(hello控制器映射)
-
5.DispatcherServlet调用(处理器适配器)HandlerAdapter,按照特定规则执行Handler。

适配每一个实现了Controller接口的类,直到找到目标类

-
6.Handler让具体的Controller执行
执行HelloController类
-
7.Controller将具体的执行信息(ModelAndView:包含要返回给前端的数据msg,要跳转的视图hello)返回给HandlerAdapter。
-
8.HandlerAdapter将ModelAndView传递给DispatcherServlet。
-
9.DispatcherServlet调用视图解析器ViewResolver,并传递ModelAndView。ViewResolver做的工作见下图。

-
10.ViewResolver将解析的逻辑视图名
/WEB-INF/jsp/hello.jsp传给DispatcherServlet。 -
11.DispatcherServlet根据这个解析结果,调用具体的视图

-
12.最终视图呈现给用户


浙公网安备 33010602011771号