• [Spring MVC学习01] Spring MVC环境搭建以及工作流程了解


    1.Spring MVC的初步了解

    这些概念性的东西,大家如果是初学的话可以先看看有个印象,等搭建完Spring MVC后,大家就会有更深刻的理解

    1.1MVC是什么

    • 模型-视图-控制器(MVC)是一种软件架构思想
    • MVC主要通过分离模型、视图、控制器在应用程序中的角色来把业务逻辑从界面中解耦
    • 模型:负责封装应用程序在视图层展示
    • 视图层仅仅展示数据,不包含任何业务逻辑
    • 控制器负责接收来自用户的请求,并调用后台服务(service或dao)来处理业务逻辑,处理后,后台业务层可能返回一些数据在视图层展示。控制器收集这些数据以及准备模型在视图层展示
    • 可以解耦合
    • 流程:
      • 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收
      • Controller调用相应的Model层处理请求,处理完毕后结果返回到Controller
      • Controller再根据请求处理的结果找到对应的View视图,渲染数据后最终响应给浏览器
        在这里插入图片描述

    1.2 Spring MVC 是什么

    • Spring MVC是一种基于Java实现Web MVC设计思想的请求驱动类型的轻量级Web框架,即使用了MVC架构模式思想把web层进行职责解耦
    • 基于请求驱动指的是使用请求-响应模型
    • 前端控制器是DispatcherServlet
    • 应用控制器拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理
    • 支持本地化/国际化,解析以及文件上传
    • 提供了很灵活的数据验证,格式化和数据绑定机制
    • 约束大于配置

    1.3Spring MVC可以帮我们做什么

    • 可以让我们很简单的设计出干净的Web层
    • 进行更简洁的Web层开发
    • 天生和Spring框架集成
    • 提供强大的约定大一配置的契约式编程支持
    • 能简单的进行web层的单元测试
    • 支持灵活的URL到页面控制器的映射
    • 很容易和其他视图技术集成,比如jsp,Velocity,FreeMarker等,因为模型数据不放在特定的API里面,而是放在一个Model里面(Map数据结构实现,因此很容易被其他框架使用)
    • 很灵活的数据验证、格式化和数据绑定机制,能够用任何对象进行数据绑定,不必实现特定框架的API
    • 支持灵活的本地化等解析
    • 更加简单的异常处理
    • 对静态资源的支持
    • 支持Restful风格

    1.4工作原理

    在这里插入图片描述

    在这里插入图片描述

    1. 首先用户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;

    2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调用HandlerMapping;

    3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对象对应的拦截器);

    4. DispatcherServlet 根据获得的HandlerExecutionChain,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);

    5. HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:

    6. HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。

    7. 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据格式化:

    8. 数据格式化。 如将字符串转换成格式化数字或格式化日期等

    9. 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)

    10. Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor

    11. HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器。

    12. 前端控制器接收到ModelAndView后,请求对应的视图解析器。

    13. 视图解析器解析ModelAndView后返回对应View;

    14. 渲染视图并返回渲染后的视图给前端控制器。

    15. 最终前端控制器将渲染后的页面响应给用户或客户端

    这里推荐一下有一篇文章流程写得挺详细的Springmvc执行流程介绍
    这里涉及到http协议的uri和url,推荐大家看这篇文章HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
    在这里插入图片描述

    2.Spring MVC环境搭建

    2.1开发环境

    idea+maven+jdk1.8+tomcat

    2.2新建maven webapp

    在idea下面创建springmvc01工程
    file->new->project
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    把jdk编译环境改成1.8
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    2.3pom.xml坐标添加

    
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0modelVersion>
    
      <groupId>org.examplegroupId>
      <artifactId>springmvc01artifactId>
      <version>1.0-SNAPSHOTversion>
      <packaging>warpackaging>
    
      <name>springmvc01 Maven Webappname>
      
      <url>http://www.example.comurl>
    
      <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
      properties>
    
      <dependencies>
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>4.11version>
          <scope>testscope>
        dependency>
    
        
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-webmvcartifactId>
          <version>5.3.19version>
        dependency>
    
      dependencies>
    
    
    
    
    project>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    2.4配置web.xml

    
    <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>springMVCservlet-name>
        
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        
        <init-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>classpath:springmvc.xmlparam-value>
        init-param>
        
        <load-on-startup>1load-on-startup>
      servlet>
      
      <servlet-mapping>
        <servlet-name>springMVCservlet-name>
        
        
        <url-pattern>*.dourl-pattern>
      servlet-mapping>
    
    web-app>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    如果想要启动Spring MVC环境,目前对应MVC框架的配置还没有进行,以上在web.xml中引用了springmvc.xml文件

    2.5springmvc.xml配置

    首先在项目中创建java和resources的目录
    在这里插入图片描述
    在resources目录中添加springmvc.xml

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="com.zyh.controller">context:component-scan>
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            
            
            <property name="prefix" value="/jsp/">property>
            
            <property name="suffix" value=".jsp">property>
        bean>
        
        <mvc:annotation-driven>mvc:annotation-driven>
    beans>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后在Java目录下创建对应的com.zyh.controller包

    2.6页面控制器的编写

    @Controller
    public class HelloController {
        @RequestMapping("/hello.do")
        public ModelAndView hello(){
            /**
             * 请求地址映射 hello.do
             */
            ModelAndView modelAndView = new ModelAndView();
            //设置数据
            modelAndView.addObject("hello", "Hello Spring MVC");
            //设置视图名称
            modelAndView.setViewName("hello");
            //返回
            return modelAndView;
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.7添加视图页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
    head>
    <body>
        ${hello}
    
    body>
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.8启动Tomcat服务器

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    端口默认是8080
    在这里插入图片描述

    2.9第一个程序流程总结

    在这里插入图片描述
    如果大家觉得麻烦的话,也可以把拦截路径改成/,这样以后就不用再写do了
    在这里插入图片描述

  • 相关阅读:
    一起Talk Android吧(第四百零二回:如何使用GridLayout布局)
    链表的基本操作(数据结构)
    编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI
    Java面试题之“==“和“equals“和HashCode的区别
    五年之后超过10000订阅者
    Nginx和Ribbon实现负载均衡的区别
    工作中常见的linux命令
    重温数据库-修改表-ALTER TABLE
    前端开发:JS中的Window对象详解
    C# 替换字符串最后一个逗号为分号
  • 原文地址:https://blog.csdn.net/qq_52797170/article/details/125712145