• SpringMVC入门(工作原理、框架流程、小实例的创建)



    前言

    本文重点讲解MVC的设计思想以及SpringMVC的工作原理。
    首先要知道MVC思想的三个基本部分

    MVC思想的三个基本部分
    (1)Model(模型)
    (2)View(视图)
    (3)Controller(控制器)

    SpringMVC是应用框架,是由Springt提供的一个实现WebMVC设计模式的轻量级框架,降低耦合,且方便应用的扩展和维修。


    一、MVC模式和SpringMVC工作原理

    1、MVC的模式和概念

    在这里插入图片描述
    对于上面是三个模块的功能,下面做详细解释:

    MVCWeb程序中的职责
    模型用于存储数据以及处理用户请求的业务逻辑
    视图向控制器提交数据,显示模型中的数据
    控制器根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的结果交给哪个视图更新和显示

    2、基于servlet的MVC模式

    基于servlet的MVC模式实现如下
    模型:一个或者多个JavaBean对象用于存储数据和处理业务逻辑。
    视图:一个或者多个JSP页面,向控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean标记显示数据。
    控制器:一个或者多个Servlet对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的—>模型(一个或者多个JavaBean对象),并将处理结果存放到实体模型JavaBean中,输出给视图显示。

    继续向下走,这样我们是不是就可以写出来他的流程图,如下:
    在这里插入图片描述

    二、SpringMVC的工作原理

    1.SpringMVC框架组成

    Spring框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成

    2.SpringMVC工作流程

    1. 客户端请求提交到DispatcherServlet;
    2. 由DispatcherServlet控制器寻找一个或者多个HandlerMapping找到处理请求的Controller;
    3. DispatcherServlet将请求提交到Controller;
    4. Controller调用业务逻辑处理后返回ModelAndView;
    5. DispatcherServlet寻找一个或者多个ViewResolver视图解析器,找到ModelAndView指定的视图;
    6. 视图负责将结果显示到客户端。

    同样的接下来我们一样可以划出其流程图,如下:
    在这里插入图片描述

    三、SpringMVC接口

    SpringMVC接口这里讲上图中用到的四个

    SpringMVC接口作用
    DispatcherServletSpringMVC所有的请求都经过DispatcherServlet来统一分发给Controller,但在这之前,需要借助HandlerMapping定位到具体的Controller
    HandlerMapping负责完成客户请求到Controller的映射
    Controller处理用户请求,处理完之后将返回ModelAndView对象给DispatcherServlet 前段控制器
    ViewResolver视图解析器负责在Web应用中查找View对象,从而将相应结果渲染给客户

    这里补充一下Controller中的知识:ModelAndView中包含了模型和视图。宏观上看,DispatcherServlet 是整个Web应用的控制器;微观上看,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。

    四、一个简单的SpringMVC实例创建

    1.创建web应用,web.xml配置

    <!-- 配置核心控制器 -->
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <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>
    

    2.spring-mvc.xml配置

    <bean id="helloController" class="com.cc.controller.HelloController" />
        <!-- 配置映射处理器 -->
            <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
              <property name="mappings">
                <props>
                   <prop key="/hello">helloController</prop>
                </props>
              </property>
            </bean>
        <!-- 2.配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 2.1 页面前缀 -->
            <property name="prefix" value="/WEB-INF/"/>
            <!-- 2.2 页面后缀 -->
            <property name="suffix" value=".jsp"/>
        </bean>
    

    3.HelloController控制器的内容

    public class HelloController implements Controller {
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {    
            return new ModelAndView("hello","message","浅聪");
        }
    
    }
    

    4. hello.jsp页面代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    你好
    <h1>${message }</h1>
    </body>
    </html>
    

    5. 最后结果

    最后页面出现
    ------->你好,浅聪。四个字即为成功。

    总结

    本文简单的介绍了MVC的设计模式,详细讲解了SpringMVC的工作原理,最后简单的介绍了SpringMVC应用的开发步骤。
    最后SpringMVC中无需编写自己的DispatcherServlet,传统的控制器类需要实现Controller接口,但是Spring2.5之后有了基于注解的控制器,很方便的。
    到这里就结束了,拜拜!

  • 相关阅读:
    ADC噪声全面分析 -03- 利用噪声分析进行实际设计
    【C++】常用查找算法
    pytest学习和使用10-Pytest中的测试用例如何跳过执行?
    React Native 的手势和触摸事件
    hana分割函数,hana处理json函数,等相关hana技巧
    Unicorn 嵌入Android系统
    传输层——— UDP协议
    GO编程实践:如何高效使用变量
    89.(cesium篇)cesium聚合图(自定义图片)
    IOC底层核心原理
  • 原文地址:https://blog.csdn.net/weixin_51423778/article/details/126941722