01 SpringMVC的快速理解

1.1

在这里插入图片描述如图所示,SpringMVC负责表述层(控制层Controller)实现简化!

SpringMVC的作用主要覆盖的是表述层,例如:

  • 请求映射、数据输入、视图界面、请求分发、表单回显、会话控制、过滤拦截、异步交互、文件上传下载、数据校验、类型转换等等等
  • 更具体地说,最重要的两点是:
    1.简化前端参数接收( 形参列表 )
    2.简化后端数据响应(返回值)

以下做个对比:

原生Servlet开发:

//重写一个doGet方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//request方法拉取前端传来的参数String userName = request.getParameter("userName");//response对象写出参数到前端System.out.println("userName="+userName);
}

基于SpringMVC开发:

//通过@RequestMapping注解,完成路径对外的暴露,外部只要请求这个地址,就调用这个方法
@RequestMapping("/user/login")
//不需要request拉取,直接在形参列表中就可以拿到前端传来的参数
public String loginHandle(@RequestParam("userName") String userName,Sting password){//调用业务即可log.debug("userName="+userName);//处理完后,返回一个对象包给前端解析return "result";
}

1.2内部流程和核心组件

在这里插入图片描述

SpringMVC涉及组件理解:

  1. DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ]
  2. HandlerMapping : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它内部缓存handler(controller方法)和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler![秘书]
  3. HandlerAdapter : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效,它可以处理请求参数和处理响应数据数据,每次DispatcherServlet都是通过handlerAdapter间接调用handler,他是handler和DispatcherServlet之间的适配器![经理]
  4. Handler : handler又称处理器,他是Controller类内部的方法简称,是由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果![打工人]
  5. ViewResovler : SpringMVC提供,我们需要进行IoC配置使其加入IoC容器方可生效!视图解析器主要作用简化模版视图页面查找的,但是需要注意,前后端分离项目,后端只返回JSON数据,不返回页面,那就不需要视图解析器!所以,视图解析器,相对其他的组件不是必须的![财务]

1.3 快速体验

在这里插入图片描述


  1. 新开一个项目和模块,父工程的pom文件中声明打包方式为pom(父工程不打包),并添加依赖。

依赖如下,也更改了Properties,将Version提级管理:

<properties><spring.version>6.0.6</spring.version><servlet.api>9.1.0</servlet.api><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><!-- springioc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- web相关依赖  --><!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 --><!--在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,因此在配置 DispatcherServlet 时需要使用Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的Servlet API,没有更新到 Jakarta EE 规范。--><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-web-api</artifactId><version>${servlet.api}</version><scope>provided</scope></dependency><!-- springwebmvc相关依赖  --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency></dependencies>
  1. 新建一个子工程, 然后转成JBLJavaToWeb插件转成Web工程.

  2. Controller声明

	package com.sunsplanter.Controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;//声明为Controller类型的Bean对象,纳入IoC容器管理
@Controller
public class HelloController {//handlers/*** handler就是controller内部的具体方法* @RequestMapping("/springmvc/hello") 本handler的地址是/springmvc/hello.即外部的访问地址* @ResponseBody 代表向浏览器直接返回数据,不找视图解析器!*/@RequestMapping("/springmvc/hello")@ResponseBodypublic String hello(){System.out.println("HelloController.hello");return "hello springmvc!!";}
}

回顾开头要干的三个配置,我们是一个也没干.在config包下新建一个WebMvcIconfig类负责:

  • 为Controller配置IoC容器
  • 为handlerMapping, handlerAdapter配置IoC容器
package com.sunsplanter.config;//*TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;//*TODO: 导入handlerMapping和handlerAdapter的三种方式
//*1.自动导入handlerMapping和handlerAdapter [推荐]
//*2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载
//*3.使用@Bean方式配置handlerMapper和handlerAdapter
@EnableWebMvc
@Configuration
//干的第一件事
@ComponentScan(basePackages = "com.sunsplanter.controller") //
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class WebMvcConfig implements WebMvcConfigurer {//干的第二件事@Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}@Beanpublic HandlerAdapter handlerAdapter(){return new RequestMappingHandlerAdapter();}}

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

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

相关文章

CSS 网页布局

文章目录 布局元素页眉标签导航栏侧边栏网页主体文章页脚测试网页布局元素 布局元素 在html4.01等之前的版本中html并没有专用的布局元素&#xff0c;而是统统使用div进行布局 页眉标签 header标签一般用来嵌套网页的标题&#xff0c;搜索栏&#xff0c;导航栏等 导航栏 n…

redis原理(四)redis命令

目录 一、字符串命令&#xff1a; 二、列表命令&#xff1a; 三、集合命令&#xff1a; 四、散列命令&#xff1a; 五、有序集合命令&#xff1a; 六、redis发布与订阅命令&#xff1a; 七、事务命令 八、其他命令 1、排序&#xff1a;SORT 2、键的过期时间&#xff…

使用muduo库编写网络server端

muduo库源码编译安装和环境搭建 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 #include<iostream> #include<muduo/net/TcpServer.h> #include<muduo/net/EventLoop.h> using namespace std; using namespace muduo; using name…

STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

1. 基本介绍 开发环境准备&#xff1a;Keil uVision5 烧录软件&#xff1a;STC-ISP&#xff08;V6.92A&#xff09; 芯片&#xff1a; STC8H8K64U-45I-LQFP64 芯片引脚&#xff1a; 2.创建项目 打开Keil&#xff0c;点击【Project】&#xff0c;选择【new uVersion proje…

中北数据结构2023真题

雪雾: 设计一个算法&#xff0c;将一个节点值为自然数的单列表拆分成两个单列表&#xff0c;原表中值为偶数的节点保留&#xff0c;而值为奇数的节点&#xff0c;按他们在原表的相对次序组成一个新的单列表 #include <stdio.h> #include <stdlib.h>typedef struct…

【计算机图形学】习题课:Viewing

【计算机图形学】Viewing 部分问题与解答 CS100433 Computer Graphics Assignment 21 Proof the composed transformations defined in global coordinate frame is equivalent to the composed transformations defined in local coordinate frame but in different composing…

Python+Selenium+Unittest 之selenium13--WebDriver操作方法3-鼠标操作2

这篇说下ActionChains里常用的几种鼠标操作的方法。 ActionChains常用的鼠标操作方法 click()鼠标左键单击double_click()鼠标左键双击context_click()鼠标右键单击move_to_element()鼠标移动到某个元素上&#xff08;鼠标悬浮操作&#xff09;click_and_hold()点击鼠标左键&am…

工作流管理框架airflow-安装部署教程

1 概述 Airflow是一个以编程方式编写&#xff0c;用于管理和调度工作流的平台。可以帮助你定义复杂的工作流程,然后在集群上执行和监控这些工作流。 Airflow计划程序在遵循指定的依赖项&#xff0c;同时在一组工作线程上执行任务。丰富的命令实用程序使在DAG上执行复杂的调度…

LabVIEW精确测量产品中按键力和行程

项目背景 传统的按键测试方法涉及手工操作&#xff0c;导致不一致和效率低下。在汽车行业中&#xff0c;带有实体按键的控制面板非常常见&#xff0c;确保一致的按键质量至关重要。制造商经常在这些组件的大规模、准确测试中遇到困难。显然&#xff0c;需要一个更自动化、精确…

2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

一.进程 1.进程调度 Linux把所有进程通过双向链表的方式连接起来组成任务队列&#xff0c;操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 2.进程的状态 1.运行态&#xff1a;pcb结构体在运行或在运行队列中排队。 2.阻塞态&#xff1a;等待非cpu资源就绪&am…

算法练习-A+B/财务管理/实现四舍五入/牛牛的菱形字符(题目链接+题解打卡)

难度参考 难度&#xff1a;简单 分类&#xff1a;熟悉OJ与IDE的操作 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 A B1. A B - AcWing题库财务管理1004:财…

【C语言基础考研向】05 scanf读取标准输入超详解

文章目录 一.scanf函数的原理 样例问题原因解决方法 二.多种数据类型混合输入 错误样例正确样例 一.scanf函数的原理 C语言未提供输入/输出关键字&#xff0c;其输入和输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入&#xff0c;键盘输入又被称为标准输入。…