spring mvc是什么_狂神说SpringMVC01:什么是SpringMVC

狂神说SpringMVC系列连载课程,通俗易懂,基于Spring5版本(视频同步),欢迎各位狂粉转发关注学习。未经作者授权,禁止转载

d198528a3eae407af72bd120d53e523d.gif

1、回顾MVC

1.1、什么是MVC

  • MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。

  • 是将业务逻辑、数据、显示分离的方法来组织代码。

  • MVC主要作用是降低了视图与业务逻辑间的双向偶合

  • MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。

最典型的MVC就是JSP + servlet + javabean的模式。

31a4328129e00b97034d3f7f4ad65144.png

1.2、Model1时代

  • 在web早期的开发中,通常采用的都是Model1。

  • Model1中,主要分为两层,视图层和模型层。

f1c011322a3d7e30f864fa7368e21d41.png

Model1优点:架构简单,比较适合小型项目开发;

Model1缺点:JSP职责不单一,职责过重,不便于维护;

1.3、Model2时代

Model2把一个项目分成三部分,包括视图、控制、模型。

8081c45079334e8b292bd40740784e40.png

  1. 用户发请求

  2. Servlet接收请求数据,并调用对应的业务逻辑方法

  3. 业务处理完毕,返回更新后的数据给servlet

  4. servlet转向到JSP,由JSP来渲染页面

  5. 响应给前端更新后的页面

职责分析:

Controller:控制器

  1. 取得表单数据

  2. 调用业务逻辑

  3. 转向指定的页面

Model:模型

  1. 业务逻辑

  2. 保存数据的状态

View:视图

  1. 显示页面

Model2这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。Model2消除了Model1的缺点。

1.4、回顾Servlet

  1. 新建一个Maven工程当做父工程!pom依赖!

    <dependencies>    <dependency>        <groupId>junitgroupId>        <artifactId>junitartifactId>        <version>4.12version>    dependency>    <dependency>        <groupId>org.springframeworkgroupId>        <artifactId>spring-webmvcartifactId>        <version>5.1.9.RELEASEversion>    dependency>    <dependency>        <groupId>javax.servletgroupId>        <artifactId>servlet-apiartifactId>        <version>2.5version>    dependency>    <dependency>        <groupId>javax.servlet.jspgroupId>        <artifactId>jsp-apiartifactId>        <version>2.2version>    dependency>    <dependency>        <groupId>javax.servletgroupId>        <artifactId>jstlartifactId>        <version>1.2version>    dependency>dependencies>
  2. 建立一个Moudle:springmvc-01-servlet , 添加Web app的支持!

  3. 导入servlet 和 jsp 的 jar 依赖

    <dependency>    <groupId>javax.servletgroupId>    <artifactId>servlet-apiartifactId>    <version>2.5version>dependency><dependency>    <groupId>javax.servlet.jspgroupId>    <artifactId>jsp-apiartifactId>    <version>2.2version>dependency>
  4. 编写一个Servlet类,用来处理用户的请求

    package com.kuang.servlet;//实现Servlet接口public class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //取得参数        String method = req.getParameter("method");        if (method.equals("add")){            req.getSession().setAttribute("msg","执行了add方法");        }        if (method.equals("delete")){            req.getSession().setAttribute("msg","执行了delete方法");        }        //业务逻辑        //视图跳转        req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req,resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req,resp);    }}
  5. 编写Hello.jsp,在WEB-INF目录下新建一个jsp的文件夹,新建hello.jsp

    @ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Kuangshentitle>head><body>${msg}body>html>
  6. 在web.xml中注册Servlet

    <?xml  version="1.0" encoding="UTF-8"?><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>HelloServletservlet-name>        <servlet-class>com.kuang.servlet.HelloServletservlet-class>    servlet>    <servlet-mapping>        <servlet-name>HelloServletservlet-name>        <url-pattern>/userurl-pattern>    servlet-mapping>web-app>
  7. 配置Tomcat,并启动测试

  • localhost:8080/user?method=add

  • localhost:8080/user?method=delete

MVC框架要做哪些事情

  1. 将url映射到java类或java类的方法 .

  2. 封装用户提交的数据 .

  3. 处理请求--调用相关的业务处理--封装响应数据 .

  4. 将响应的数据进行渲染 . jsp / html 等表示层数据 .

说明:

常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM 等等....

2、什么是SpringMVC

2.1、概述

4517178ca2294218302645056cc09245.png

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

查看官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web

我们为什么要学习SpringMVC呢?

Spring MVC的特点:

  1. 轻量级,简单易学

  2. 高效 , 基于请求响应的MVC框架

  3. 与Spring兼容性好,无缝结合

  4. 约定优于配置

  5. 功能强大:RESTful、数据验证、格式化、本地化、主题等

  6. 简洁灵活

Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计。

DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁;

正因为SpringMVC好 , 简单 , 便捷 , 易学 , 天生和Spring无缝集成(使用SpringIoC和Aop) , 使用约定优于配置 . 能够进行简单的junit测试 . 支持Restful风格 .异常处理 , 本地化 , 国际化 , 数据验证 , 类型转换 , 拦截器 等等......所以我们要学习 .

最重要的一点还是用的人多 , 使用的公司多 .

2.2、中心控制器

Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。

Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

8b29678b938de79f5c135cae3a6ab728.png

SpringMVC的原理如下图所示:

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

9e35d505fa89aafaa146df5933f994be.png

2.3、SpringMVC执行原理

37447ffd219a84b66b427cb6b8cf5ef1.png

图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

简要分析执行流程

  1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。

    我们假设请求的url为 : http://localhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080服务器域名

    SpringMVC部署在服务器上的web站点

    hello表示控制器

    通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

  3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  5. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  6. Handler让具体的Controller执行。

  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  8. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

  9. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

  10. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

  11. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户。

在这里先听一遍原理,不理解没有关系,我们马上来写一个对应的代码实现大家就明白了,如果不明白,那就写10遍,没有笨人,只有懒人!

下面我们准备编写我们的入门程序了!

0c066432263f717a48846519dd87c2ad.png

end

04f168164dbbafeffb987c58979bcea4.png

视频同步更新,这次一定!

0eb8080b8a0e9ab6ece63631f652a94a.png

f3596cf9cb6696a66c145c820ffb6f17.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven的settings.xml范本(含资源仓库镜像配置)

文章目录一、settings.xml 范本二、资源仓库镜像一、settings.xml 范本 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

java gradle构建_在Gradle中为JPMS构建Java 6-8库

java gradle构建通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS&#xff08; Java平台模块系统 &#xff09;的Java 6-8库。 介绍 如果您需要JPMS本身的介绍&#xff0c;请查看此概述 。 这篇文章主要针对Java库维护者。 任何此类维护人员都必须选择要针对…

tcppwebbrower 关闭安全警报_【知识】锅炉与压力容器安全

一、锅炉的主要安全附件1.安全阀安全阀属于泄压装置&#xff0c;能够自动将锅炉工作压力控制在允许范围之内。当炉内超压时&#xff0c;安全阀自动开启&#xff0c;自动泄压&#xff0c;同时发出警报&#xff1b;当炉内压力降到允许范围时&#xff0c;安全阀自动关闭。安全阀使…

macOS下查看Java/JDK的安装目录_查看Java/JDK的版本信息_配置环境变量JAVA_HOME

文章目录查看JDK的安装目录查看系统当前正在使用的 JDK 版本信息配置环境变量 JAVA_HOME查看JDK的安装目录 通常情况下&#xff0c;macOS安装JDK&#xff0c;默认是安装在 /Library/Java/JavaVirtualMachines 目录下。 使用 java_home 命令查看&#xff1a; [~]$ /usr/libex…

java_home命令详解

文章目录命令介绍命令选项说明帮助信息命令介绍 The java_home command returns a path suitable for setting the JAVA_HOME environment variable. It determines this path from the user’s preferred JVM based on configured environment variables. Additional constra…

安全审计报告_企业做税审的五大好处!税审报告和审计报告的区别

税务审计报告是税务审计人员根据税务审计的相关法律、法规&#xff0c;对被审计单位的纳税行为和纳税事项进行评估&#xff0c;并发表意见的书面文件。(咨询&#xff1a;13510890028&#xff0c;肖)一、企业做税审的五大好处:1、可弥补亏损&#xff0c;减少税款支出企业所得税法…

selenium自动化测试_您如何使用Selenium来计算自动化测试的投资回报率?

selenium自动化测试跨浏览器测试是一种测试&#xff0c;需要大量的精力和时间。 通过不同的浏览器&#xff0c;操作系统&#xff0c;设备&#xff0c;屏幕分辨率测试Web应用程序&#xff0c;以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selen…

早期计算机的应用主要是( ) (2分),计算机基础第1次作业(含答案)

重庆大学网络教育学院《计算机应用基础》2008年秋季第一次作业《计算机基础知识和中文WIN XP操作系统》注&#xff1a;[ ]内为考查知识点一、单选题(每题2分&#xff0c;10题共20分)1、早期的计算机体积大、耗能高、速度慢&#xff0c;其主要原因是制约于( )。[计算机的发展及应…

python输出结果空格分割_用Python编写固定宽度,以空格分隔的CSV输出

我想使用Python的csv编写器编写一个固定宽度,空格分隔和最小引用的CSV文件. 输出示例&#xff1a; item1 item2 "next item1" "next item2" anotheritem1 anotheritem2 如果我用 writer.writerow( (“{0:15s}”.format(item1), “{0:15s}”.format(item2))…

macOS下搭建Nexus 3.x服务器作为Maven的资源仓库服务器

文章目录下载 Nexus 服务器安装包安装 Nexus 服务器配置环境变量/启动服务器/停止服务器Nexus 服务器管理后台登录管理后台Blob StoresNexus 初始密码无法登录的问题仓库&#xff08;Repository&#xff09;Nexus 内置的仓库Repository 的 Type 属性创建代理仓库创建本地仓库&a…

宣城校区计算机排名,2017秋大学计算机(合肥工业大学 宣城校区)

1.《大学计算机》课程与其它类似的课程有什么不同&#xff1f;《大学计算机》是面向大学一年级学生开设的计算机通识类课程&#xff0c;类似的还有《大学计算机基础》、《计算机应用基础》&#xff0c;或者《计算机文化基础》、《信息技术基础》等课程&#xff0c;它和这些不同…

jakarta ee_关于Jakarta EE软件包名称更改的思考

jakarta eeEclipse基金会宣布 Jakarta EE无法继续使用javax软件包名称。 显然&#xff0c;这是由于Java EE以此名称为基础&#xff0c;但不允许对该名称或以该名称开头的类或包进行进一步的修改。 尽管这当然是个坏消息&#xff0c;但对我而言&#xff0c;当宣布Jakarta EE不能…

人工智能教程

参见&#xff1a;https://www.captainbed.net/csdn/

python的setting怎么找_Python的Django框架中settings文件的部署建议

django在一个项目的目录结构划分方面缺乏必要的规范&#xff0c;因此不同人的项目组织形式也千奇百怪&#xff0c;而且也很难说谁的做法就比较好。我根据自己的项目组织习惯&#xff0c;发布了一个项目dj-scaffold。 前些天在reddit上为我的项目dj-scaffold打了个“广告”&…

显示计算机硬盘驱动器更改,计算机更换硬盘驱动器后蓝屏发生了什么

关于更换硬盘后的计算机蓝屏&#xff0c;怎么了&#xff1f;然后让我告诉您更换硬盘后计算机蓝屏的原因和解决方法。希望能对您有所帮助。 &#xff01;计算机更换硬盘后蓝屏的解决方法&#xff1a;蓝屏的主要原因是&#xff1a;1、病毒木马和恶意软件2、有问题的内存(包括物理…

aws eks_在生产中配置和使用AWS EKS

aws eks到现在&#xff0c;我们已经完成了向Amazon EKS &#xff08; 工作地点&#xff09;的迁移&#xff0c;并且集群已经投入生产。 过去&#xff0c;我已经写了一些要点的简短摘要&#xff0c;您可以在这里找到。 当系统正在处理实际流量时&#xff0c;我有了一些额外的信心…

Nexus中创建仓库时,repository connectors 干嘛的?

参见&#xff1a;https://support.sonatype.com/hc/en-us/articles/115013153887-Docker-Repository-Configuration-and-Client-Connection

量子计算机是否存在相对论,潘建伟团队再登Science:寻找广义相对论与量子力学的桥梁...

将环球科学设为星标周一至周五早间第一时间掌握最新鲜的全球科技资讯量子物理学寻找广义相对论与量子力学的桥梁广义相对论与量子力学是现代物理的两块基石。然而&#xff0c;它们之间似乎存在不可调和的矛盾&#xff0c;很多在广义相对论框架下适用的物理规则&#xff0c;在量…

判断大小简单算法_JVM GC算法

在判断哪些内存需要回收和什么时候回收用到GC 算法&#xff0c;本文主要对GC 算法进行讲解。JVM垃圾判定算法常见的JVM垃圾判定算法包括&#xff1a;引用计数算法、可达性分析算法。引用计数算法(Reference Counting)引用计数算法是通过判断对象的引用数量来决定对象是否可以被…

stream分组计数_Java Stream:第2部分,计数始终是计数吗?

stream分组计数在上一篇有关该主题的文章中 &#xff0c;我们了解到JDK 8 stream()::count需要更长的时间来执行Stream更多的元素。 对于最新的JDK&#xff08;例如Java 11&#xff09;&#xff0c;简单的流管道不再是这种情况。 了解JDK本身如何进行改进。 Java 8 在上一篇文…