MVC设计模式

  1. 视图(View)-对应组件:JSP或者HTML文件

  2. 控制器(Controller)-对应组件:Servlet

  3. 模型(Model) -对应组件:JavaBean

三层:表示层、业务逻辑层、数据访问层

MVC与三层:

表示层:V C

业务逻辑层、数据访问层 : M

JSP Model1

JSP Model2

  1. JSP:负责生成动态网页

  2. Servlet:负责流程控制

  3. JavaBean:负责业务逻辑处理

MVC 处理过程

MVC 优点

  1. MVC 优点

    • 多视图共享一个模型,大大提高代码的可重用性

    • MVC三个模块相互独立,松耦合架构

    • 控制器提高了应用程序的灵活性和可配置性

    • 有利于软件工程化管理

      • 完美的系统架构 = 松耦合+高重用性+高扩展性

  2. 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 on Servlet Stack

在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>
  1. <context:component-scan />

    • @Controller:标注一个普通的JavaBean成为可以处理请求的控制器

    • @RequestMapping:通过请求URL进行映射

  2. <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请求处理流程

  1. 用户发送请求至前端控制器DispatcherServlet

  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。(url与handler之间的关系)

  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

  5. 执行处理器(Controller,也叫后端控制器)。

  6. Controller执行完成返回ModelAndView

  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器

  9. ViewReslover解析后返回具体View

  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

  11. 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框架特点

  1. 清晰地角色划分

  2. 灵活的配置功能

  3. 提供了大量的控制器接口和实现类

  4. 真正做到与View层的实现无关(JSP、Velocity、Xslt等)

  5. 国际化支持

  6. 面向接口编程

  7. 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等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值