六【 SpringMVC框架】

news2025/7/22 15:43:14

一 SpringMVC框架

目录

  • 一 SpringMVC框架
    • 1.什么是MVC
    • 2.SpringMVC概述
    • 3.SpringMVC常见开发方式
    • 4.SpringMVC执行流程
    • 5.SpringMVC核心组件介绍
    • 6.快速构建Spring MVC程序

在这里插入图片描述

✅作者简介:Java-小白后端开发者 🥭公认外号:球场上的黑曼巴

🍎个人主页:不会飞的小飞侠24

🍊个人信条:谨 · 信

💞当前专栏:高级内容

🥭本文内容: SpringMVC框架

更多内容点击👇
小飞侠的博客>>>>欢迎大家!!!

1.什么是MVC

MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,业务模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。

MVC 属于架构模式的一种,所谓架构就是如何设计一个程序的结构。MVC 将程序结构划分为三层,每一层都对外提供了可供上层调用的接口,既能维系三层之间的联系,也能保持相对的独立性。

这种将业务逻辑、数据和界面分离的代码组织形式,降低了模块间的耦合度,有利于日后的维护与扩展。

2.SpringMVC概述

springmvc是基于spring Framwork衍生出来的一个mvc框架,主要解决原有mvc架构中,控制器(Controller)的问题,常见的控制器有servlet,struts2等,控制器的核心功能是根据用户的请求调用对应业务功能,然后依据业务处理的结果,控制程序的运行流程。

servlet实现控制器存在的问题:

1.接收客户端请求参数时,存在代码的冗余

2.只能接收字符串类型的数据,其它数据类型需要手动的转换

3.无法接收对象类型的参数

4.调用业务对象存在耦合 (new)

5.流程跳转存在耦合(路径耦合,视图耦合)

3.SpringMVC常见开发方式

1.传统的开发方式

​ 通过作用域(request,session)实现数据的传递

​ 通过视图技术进行视图的渲染(jsp thymleaf freeMarker)

2.前后端分离开发方式

​ 多种新的访问方式(get 、post 、put、 delete)

​ Restful风格的访问

4.SpringMVC执行流程

Spring MVC 框架是高度可配置的,包含多种视图技术,例如 JSP、FreeMarke和 POI。Spring MVC 框架并不关心使用的视图技术,也不会强迫开发者只使用 JSP。

Spring MVC 执行流程如图 所示:
在这里插入图片描述

4.1 SpringMVC 的执行流程如下:

  1. 用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
  2. 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
  3. DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
  4. HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
  5. Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
  6. HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
  7. DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
  8. ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
  9. DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
  10. 视图负责将结果显示到浏览器(客户端)

5.SpringMVC核心组件介绍

Spring MVC 涉及到的组件有 DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、Handler(处理器)、ViewResolver(视图解析器)和 View(视图)。下面对各个组件的功能说明如下。

1)DispatcherServlet

DispatcherServlet 是前端控制器,从图 1 可以看出,Spring MVC 的所有请求都要经过 DispatcherServlet 来统一分发。DispatcherServlet 相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的拓展。

2)HandlerMapping

HandlerMapping 是处理器映射器,其作用是根据请求的 URL 路径,通过注解或者 XML 配置,寻找匹配的处理器(Handler)信息。

3)HandlerAdapter

HandlerAdapter 是处理器适配器,其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。

4)Handler

Handler 是处理器,和 Java Servlet 扮演的角色一致。其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至 ModelAndView 对象中。

5)View Resolver

View Resolver 是视图解析器,其作用是进行解析操作,通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View(如通过一个 JSP 路径返回一个真正的 JSP 页面)

6)View

View 是视图,其本身是一个接口,实现类支持不同的 View 类型(JSP、FreeMarker、Excel 等)。

以上组件中,需要开发人员进行开发的是处理器(Handler,常称Controller)和视图(View)。通俗的说,要开发处理该请求的具体代码逻辑,以及最终展示给用户的界面

6.快速构建Spring MVC程序

搭建步骤如下:

  1. 创建 Web 应用并引入 JAR 包

    spring-webmvc

  2. Spring MVC 配置:在 web.xml 中配置 Servlet,创建 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-config.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>

6.1 springmvc配置文件

<?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: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 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--注解实现mvc-->
    <!-- 自动扫描包,实现支持注解的IOC -->
    <context:component-scan base-package="cn.kgc.spring" />
    <!-- 支持mvc注解驱动  注册处理器映射器 注册处理器适配器  参数的类型转换  页面跳转  响应处理 -->
    <mvc:annotation-driven />
    <!-- 视图解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/view/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

** 6.2 创建 Controller(处理请求的控制器)**

@Controller
@RequestMapping("/Hello")
public class HelloWorld {
    @RequestMapping("/Say.do")
    public String SayHi(Model model) {
        return "index";
    }
}

6.3 创建 View(使用 JSP 作为视图)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    hello springmvc
</body>
</html>

6.4部署运行

@RequestMapping详解

1.一个方法匹配多个路径

@RequestMapping(value={"hello1.do","hello2.do"})
    public  String  test01(){

        System.out.println("hello");

        //跳转路径  默认使用转发  会经过视图解析器
        return "index";
    }

2.指定方法接收的请求方式

@RequestMapping(value = "hello1.do",method = RequestMethod.GET)
    public  String  test01(){

        System.out.println("hello GET");

        //跳转路径  默认使用转发  会经过视图解析器
        return "index";
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4bTcial-1677229962891)(springmvc框架.assets/image-20220704161641137.png)]
3.一个方法指定多种类型的请求

 @RequestMapping(value = "hello1.do",method = {RequestMethod.GET,RequestMethod.POST})
    public  String  test01(){

        System.out.println("hello GET OR POST");

        //跳转路径  默认使用转发  会经过视图解析器
        return "index";
    }

在这里插入图片描述

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

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

相关文章

工业三防平板可应用于各种复杂苛刻的工作环境

伴随着工业互联网技术的快速发展&#xff0c;生产制造自然环境繁杂&#xff0c;机器设备规定比较严苛。普通平板在工业场景户外场景等都比较容易出现磕碰或者出现其它因素如进水、进灰尘而引发设备故障。三防平板之所以在建筑工程的应用较为广泛&#xff0c;这与其独特的性能是…

线性数据结构:数组 Array

一、前言数组是数据结构还是数据类型&#xff1f;数组只是个名称&#xff0c;它可以描述一组操作&#xff0c;也可以命名这组操作。数组的数据操作&#xff0c;是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数组&#xff0c;而是说&#xff0c…

scratch和平使者 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月

目录 scratch和平使者 一、题目要求 1、准备工作 2、功能实现 二、案例分析

视图、游标、慢查询日志

Java知识点总结&#xff1a;想看的可以从这里进入 目录2.7、视图、游标2.7.1、视图2.7.2、游标2.7、慢查询日志2.7、视图、游标 2.7.1、视图 视图是一种虚拟存在的表&#xff0c;同真实表一样&#xff0c;视图也由列和行构成&#xff0c;它不存在于数据库中&#xff0c;是我们…

【红黑树】红黑树插入操作相关的细节和疑难拆解分析

本文就红黑树的插入操作进行细致到每一个小步骤的解析。1&#xff0c;成员变量本红黑树使用了三叉链结构&#xff0c;使用的时候尤其要记得处理指向父亲的指针。为何在节点的构造函数中&#xff0c;默认节点的颜色为红色&#xff1f;因为考虑到红黑树的性质&#xff08;对于每个…

汇编语言 标志位总结

缩写原意: Overflow of = OV NV [No Overflow] Direction df = DN (decrement) UP (increment) Interrupt if = EI (enabled) DI (disabled) Sign sf = NG (negative) PL (positive) Zero zf = ZR [zero] NZ [ Not zero] Auxiliary Carry af = AC NA [ No AC ] Parity pf = PE…

计网个人作业05

R1 链路层可以提供如下服务 链路层服务IP能否提供&#xff1f;TCP能否提供&#xff1f;流量控制✔差错检测✔✔差错纠正全双工、半双工✔ R2 不冗余 IP层有丢包的情况⼀个⻓的 TCP 报⽂段会被分⽚成多个 IP 数据报形成不同的帧&#xff0c;不同的帧可能会被不同链路传输。同…

二.线性表之顺序表

文章目录前言一.顺序表的概念及结构二.顺序表的接口实现1.顺序表的动态存储2.顺序表的初始化3.顺序表尾插#封装&#xff1a;扩容函数4.顺序表尾删5.顺序表头插6.顺序表头删7.顺序表查找8.顺序表在pos位置插入x9.顺序表删除pos位置的值10.顺序表销毁11.顺序表打印三.源1.Seqlist…

3000字,聊一聊学习低代码和学习编程到底有什么区别?

作者介绍胡艳平&#xff0c;万应低代码联合创始人、CTO&#xff0c;中国信通院低代码/无代码推进中心技术专家&#xff0c;全国信标委《低代码开发平台能力要求》起草人之一。曾有科技公司CTO问我&#xff1a;低代码是不是一种不用敲代码的编程语言&#xff1f;在不确定低代码能…

机器人学习的坚持与收获-2023

所有的机会都需要自己努力去争取&#xff0c;毕竟天会下雨下雪&#xff0c;但是不会掉馅饼。之前写过关于毕业生的一些博文。机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果&#xff08;暂缓通过&#xff09;机器人工程ROS方向应用型本科毕业设计重点课题学生验收成…

如何让人机对话更自然?

来源&#xff1a;投稿 作者&#xff1a;顾相欢 编辑&#xff1a;学姐 AAAI-2022|定制对话的人设和知识背景 原文标题&#xff1a; Call for Customized Conversation: Customized Conversation Grounding Persona and Knowledge 原文链接&#xff1a; https://arxiv.org/ab…

分类预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆网络数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆网络数据分类预测 目录分类预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆网络数据分类预测分类效果基本描述程序设计参考资料分类效果 基本描述 1.Matlab实现WOA-CNN-BiLSTM鲸鱼算法优化卷…

Ubuntu下gcc多版本管理

Ubuntu下多gcc版本的管理 开发过程中&#xff0c;在编译一个开源项目时&#xff0c;由于代码使用的c版本过高&#xff0c;而系统内置的gcc版本过低时&#xff0c;这个时候我们就需要升级gcc版本&#xff0c;但是为了避免兼容性问题&#xff0c;安装多个版本的gcc&#xff0c;然…

uniapp中调用.net6 webapi

使用uniapp开发程序时&#xff0c;不管是小程序&#xff0c;还是H5界面&#xff0c;它们只是一个显示界面&#xff0c;也就是只充当前台界面&#xff0c;那么我们后台使用.net6 webapi写业务逻辑&#xff0c;然后前端访问后端&#xff0c;即可实现前后端分离开发软件的模式。 …

连不上虚拟机我谁都怀疑了!唯独没怀疑VirtualBox这个浓眉大眼的家伙!

这里写自定义目录标题一、问题和现象环境二、思考和尝试三、问题原因VirtualBox NAT模式的坑四、解决办法1、双网卡2、配置转发端口一、问题和现象 fileZilla连接不上虚拟机&#xff08;Linux/centOS&#xff09;。 ping不通虚拟机。 ssh连接不上虚拟机。 环境 Win10主机使用…

上岸16K,薪资翻倍,在华为外包做测试是一种什么样的体验····

现在回过头看当初的决定&#xff0c;还是正确的&#xff0c;自己转行成功&#xff0c;现在进入了华为外包测试岗&#xff0c;脱离了工厂生活&#xff0c;薪资也翻了一倍不止。 我17年毕业于一个普通二本学校&#xff0c;电子信息工程学院&#xff0c;是一个很不出名的小本科。…

吃透8图1模板,人人可以做架构

前言 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴问尼恩&#xff1a; 大佬&#xff0c;我们写架构方案&#xff0c; 需要从哪些方面展开 大佬&#xff0c;我们写总体设计方案需要一些技术亮点&#xff0c;可否发一些给我参考下 诸如此类&#xff0c;问法很多…

Serverless Kubernetes的思考与征程

​作者&#xff1a;牛秋霖、张维、李传云、易立 本文将针对Serverless Container技术的特殊性&#xff0c;分享其对Kubernetes的架构影响&#xff0c;以及阿里云在Serverless Kubernetes方面架构选择。 一、Serverless Container缘起 在2018年&#xff0c;容器团队与弹性计算团…

9 种会让你大吃一惊的副业工具

然而&#xff0c;副业需要使用许多工具。我举个例子&#xff1a;我在网上写文章&#xff0c;做数字产品&#xff0c;需要用到各种工具。相信我&#xff0c;免费的互联网工具可以帮助我快速完成工作&#xff0c;这样我就可以赚更多的钱并有更多的空闲时间。注意&#xff1a;这些…

初阶C语言——指针【详解】

文章目录1.指针是什么2.指针和指针类型2.1 指针的解引用2.2 指针 -整数3.野指针3.1 野指针成因3.2 如何规避野指针4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算5. 指针和数组6. 二级指针7. 指针数组1.指针是什么 指针理解的2个要点&#xff1a; 指针是内存中一个最…