• 第10章 初识Spring MVC框架


    第10章 初识Spring MVC框架

    学习目标

    了解Spring MVC及其特点
    掌握Spring MVC入门程序的编写
    熟悉Spring MVC的工作原理及执行流程

    学习内容

    1 Spring MVC介绍

    1.1 Spring MVC概述
    1.1.1 Java EE三层架构

    在JavaEE开发中,系统经典的三层架构包括表现层业务层持久层。三层架构中,每一层各司其职,表现层(Web层)负责接收客户端请求,并向客户端响应结果;业务层(Service层)负责业务逻辑处理,和项目需求息息相关;持久层(Dao层)负责和数据库交互,对数据库表进行增删改查。

    1.1.2 Spring MVC在三层架构中的位置

    在这里插入图片描述

    1.1.3 Spring MVC在表现层的作用

    Spring MVC作用于三层架构中的表现层,用于接收客户端的请求进行响应。SpringMVC中包含了控制器视图,控制器接收到客户端的请求后对请求数据进行解析和封装,接着将请求交给业务层处理。业务层会对请求进行处理,最后将处理结果返回给表现层。表现层接收到业务层的处理结果后,再由视图对处理结果进行渲染,渲染完成后响应给客户端。

    1.2 Spring MVC特点
    1.2.1 Spring MVC的特点

    (1)Spring MVC是Spring框架的后续产品,可以方便地使用Spring框架所提供的其他功能
    (2)Spring MVC使用简单,很容易设计出干净简洁的Web层
    (3)Spring MVC支持各种请求资源的映射策略
    (4)Spring MVC具有非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API。
    (5)Spring MVC支持国际化,可以根据用户区域显示多国语言。
    (6)Spring MVC支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
    (7)Spring MVC灵活性强,易扩展

    2 Spring MVC入门程序

    2.1 Spring MVC的使用
    STEP 01

    创建项目:在IDEA中,创建一个名称为chapter10的Maven Web项目。

    在这里插入图片描述

    手动设置webapp文件夹
    步骤1

    单击IDEA工具栏中的File→“Project Structure…”选项,弹出Project Structure对话框。

    在这里插入图片描述

    步骤2

    在Modules的设置界面中,单击界面上方的“+”图标,弹出Add下拉菜单。

    在这里插入图片描述

    步骤3

    在Modules的设置界面中,单击界面上方的“+”图标,弹出Add下拉菜单。

    在这里插入图片描述

    步骤4

    在Add下拉菜单中,单击“Web”选项进入Web Module的设置界面。

    在这里插入图片描述

    步骤5

    在Web Module的设置界面中,单击Deployment Descriptors右侧铅笔图样的编辑按钮,弹出Deployment Descriptors Location对话框。

    在这里插入图片描述

    步骤6

    在Deployment Descriptors Location对话框中,“Web Module Deployment Descriptor(web.xml):”输入框中可以设置项目web.xml文件的路径。将路径中项目名称后的路径修改为“src\main\webapp\WEB-INF\web.xml”,然后单击“OK”按钮完成web.xml的路径的设置。单击“OK”按钮系统会回步骤4所示的设置界面,在步骤4中单击Web Resource Directories右侧铅笔图样的编辑按钮,弹出Web Resource Directory Path话框。

    在这里插入图片描述

    STEP 02

    引入Maven依赖:项目创建完成后,为保障项目的正常运行,需要导入项目所需的依赖到项目的pom.xml文件中。

    <!– 这里只展示了其中一个JAR包-->
    <!--Spring核心类-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.8.RELEASE</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    需要注意的是,要在IDEA中使用插件运行Maven项目,除了需要在pom.xml文件中配置对应的插件外,还需要在IDEA中进行项目运行的相关配置。

    IDEA中使用插件运行Maven项目
    步骤1

    单击IDEA工具栏中的“Run”→“Edit Configurations…”选项,弹出Run/Debug Configurations对话框。

    在这里插入图片描述

    步骤2

    在Run/Debug Configurations对话框中,单击左上角的“+”按钮,弹出Add New Configurations菜单列表。

    在这里插入图片描述

    步骤3

    在Add New Configurations菜单列表中,单击左侧菜单中的“Maven”选项,进入Maven指令的配置界面。

    在这里插入图片描述

    STEP 03

    配置前端控制器:在项目的web.xml文件中进行Spring MVC前端控制器的配置。

    <servlet> <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
       <!-- 配置初始化参数,读取Spring MVC的配置文件 --><init-param> 
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>	</servlet>
      <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>	
    </servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    STEP 04

    配置处理器映射信息和视图解析器:创建Spring MVC的配置文件spring-mvc.xml,用于配置处理器映射信息和视图解析器。

    <!-- 配置 Spring MVC要扫描的包 -->
    <context:component-scan basepackage="com.itheima.controller"/>
    <!-- 配置视图解析器 -->
    <bean class=
    "org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/pages/"/>
            <property name="suffix" value=".jsp"/>
    </bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    STEP 05

    创建处理器:创建处理器FirstController类,用于处理客户端的请求并指定响应时转跳的页面。

    //设置当前类为处理器类
    @Controller
    public class FirstController {
        // 设定当前方法的访问映射地址
        @RequestMapping("/firstController")
        // 设置当前方法返回值类型为String,用于指定请求完成后跳转的页面
        public String sayHello() {
            System.out.println("访问到FirstController!");
            // 设定具体跳转的页面
            return "success";	 }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    STEP 06

    创建视图(View)页面:创建名称为page的文件夹,并在page文件夹下创建名称为success的jsp文件,用于对客户端请求进行处理后的视图展示。

    <html>
    <body>
    <h2>Spring MVC FirstController!h2>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    STEP 07

    启动项目,测试应用:项目启动成功后,在浏览器中对处理器进行请求访问,访问地址http://localhost:8080/chapter10/firstController,访问后,IDEA控制台打印信息“访问到FirstController!”,并且浏览器跳转到success.jsp页面中,页面内容如下所示。

    在这里插入图片描述

    STEP 08

    项目最终目录和文件组成

    在这里插入图片描述

    3 Spring MVC工作原理

    3.1 Spring MVC三大组件—处理器映射器

    处理器映射器可以理解为一个Map,HandlerMapping负责根据用户请求的URL找到Handler(处理器),Spring
    MVC提供了不同的映射器来实现不同的映射方式。

    3.2 Spring MVC三大组件—处理器适配器

    处理器适配器作用是根据处理器映射器找到的处理器 Handler 信息,去执行相关的 Handler。不同的处理器映射器映射出来的Handler对象是不一样的,不同的映射由不同的适配器来负责解析。

    3.3 Spring MVC三大组件—视图解析器

    视图解析器进行视图解析,首先将逻辑视图名解析成物理视图名,即具体的页面地址,再生成View视图对象返回。

    3.4 Spring MVC执行流程

    在这里插入图片描述

    3.5 Spring MVC执行流程详细介绍

    (1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet拦截。
    (2)DispatcherServlet拦截到请求后,会调用HandlerMapping(处理器映射器)。
    (3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
    (4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。
    (5) HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。
    (6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。
    (7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。
    (8)前端控制器请求视图解析器根据逻辑视图名解析真正的视图。
    (9)ViewResolver解析后,会向DispatcherServlet中返回具体的View(视图)。
    (10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。
    (11)前端控制器向用户响应结果。
    在上述执行过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行的,开发人员只需要配置DispatcherServlet,完成Controller中的业务处理并在视图中(View)中展示相应信息。

  • 相关阅读:
    安装ipfs-swarm-key-gen
    刷题记录(NC235267 星球大战,NC216012 Let‘s Play Curling,NC235294 任务,NC235569 牛可乐与NCPC)
    实验三-----数据库
    【JavaWeb】Tomcat
    Python 学习 Day35
    Leetcode学习记录(1)
    Java学习笔记43——函数式接口
    提高视频性能的 5 种方法
    好工具推荐系列:ExplorerPatcher,支持让Win11任务栏不再合并/右键菜单不再繁琐等
    Android Retrofit 高级使用与原理
  • 原文地址:https://blog.csdn.net/qq_42670540/article/details/126638746