-
视图(View)-对应组件:JSP或者HTML文件
-
控制器(Controller)-对应组件:Servlet
-
模型(Model) -对应组件:JavaBean
三层:表示层、业务逻辑层、数据访问层
MVC与三层:
表示层:V C
业务逻辑层、数据访问层 : M
JSP Model1
JSP Model2
-
JSP:负责生成动态网页
-
Servlet:负责流程控制
-
JavaBean:负责业务逻辑处理
MVC 处理过程
MVC 优点
-
MVC 优点
-
多视图共享一个模型,大大提高代码的可重用性
-
MVC三个模块相互独立,松耦合架构
-
控制器提高了应用程序的灵活性和可配置性
-
有利于软件工程化管理
-
完美的系统架构 = 松耦合+高重用性+高扩展性
-
-
-
MVC 缺点
-
原理复杂
-
增加了系统结构和实现的复杂性
-
视图对模型数据的低效率访问
-
Spring MVC
-
结构最清晰的MVC Model2实现
-
Controller
-
ModelAndView
Hello
maven创建war
导入jar包
<properties> <spring.version>5.3.6</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
配置文件
在web.xml中配置DispatcherServlet
<!-- Spring MVC配置 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
Spring MVC的配置文件
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--注解驱动控制器--> <context:component-scan base-package="com.zking.ssm.controller"/> <!--注册RequestMapping,RequestAdapter--> <mvc:annotation-driven/> <!-- 完成视图的对应 --> <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
<context:component-scan />
@Controller:标注一个普通的JavaBean成为可以处理请求的控制器
@RequestMapping:通过请求URL进行映射
<mvc:annotation-driven />
一键式配置,通过注解的方式进行Spring MVC开发
DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
创建Controller
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/") public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello"; } }
创建View-JSP
创建在WEB-INF/jsp/hello.jsp
<body> hello spring mvc </body>
部署运行
Spring MVC请求处理流程
-
用户发送请求至前端控制器DispatcherServlet
-
DispatcherServlet收到请求调用HandlerMapping处理器映射器。(url与handler之间的关系)
-
处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
-
DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
-
执行处理器(Controller,也叫后端控制器)。
-
Controller执行完成返回ModelAndView
-
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
-
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
-
ViewReslover解析后返回具体View
-
DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
-
DispatcherServlet响应用户
Spring MVC体系结构
DispatcherServlet
DispatcherServlet(前端控制器)
* Spring MVC最核心的类 * web.xml中配置
HandlerMapping
HandlerMapping(处理器映射):
功能:根据当前请求的找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecutionChain 对象中
-
BeanNameUrlHandlerMapping(默认) 将请求URL映射到同名的控制器Bean上
-
RequestMappingHandlerMapping
-
注解式处理器映射器,对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method。
-
@RequestMapping:定义请求url到处理器功能方法的映射
-
HandlerAdapter
HandlerAdapter(适配器)
功能:根据 Handler 来找到支持它的 HandlerAdapter,通过 HandlerAdapter 执行这个 Handler 得到 ModelAndView 对象。
-
RequestMappingHandlerAdapter
-
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
-
-
HttpRequestHandlerAdapter
-
SimpleControllerHandlerAdapter
-
BeanNameUrlHandlerMapping适配器
-
Handler
Handler(处理器):对应MVC中C(Controller层)
-
类型:Object
-
作用:实际处理请求
-
标注了@RequestMapping的所有方法都可以看作是一个Handler
ModelAndView
ModelAndView
-
逻辑视图名
-
模型对象
ViewResolver
ViewResolver(视图解析器)
功能:将模型数据与视图进行绑定渲染
-
将逻辑视图名与JSP等视图技术进行匹配
-
InternalResourceView
-
prefix
-
suffix
-
-
Spring MVC框架特点
-
清晰地角色划分
-
灵活的配置功能
-
提供了大量的控制器接口和实现类
-
真正做到与View层的实现无关(JSP、Velocity、Xslt等)
-
国际化支持
-
面向接口编程
-
Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起
@RequestMapping
通过@RequestMapping注解可以定义不同的处理器映射规则。
URL路径映射
@RequestMapping(value="/item")或@RequestMapping("/item) value的值是数组,可以将多个url映射到同一个方法
窄化请求映射
在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头,通过此方法对url进行分类管理。
请求方法限定
限定方法请求方式
@RequestMapping(method = RequestMethod.XXX)
XXX:GET,POST等