当前位置: 首页 > news >正文

02_01_SpringMVC初识

一、回顾MVC三层架构

1、什么是MVC三层

  • MVC是 模型Model)、视图View)、控制器Controller)的简写,是一种软件设计规范。主要作用是降低视图与业务逻辑之间的双向耦合,它不是一种设计模式,而是一种架构模式。
  • Model(模型):数据处理模型,提供了要展示的数据,包括了数据和业务行为;
  • View(视图):负责展示模型,一般就是我们所见到的用户界面,客户想看到的东西;
  • Controller(控制器):接收用户请求,委托给模型进行处理,将处理后的模型数据返回给视图,视图负责进行渲染展示;

2、MVC模型

mvc模型

二、介绍SpringMVC

  • SpringMVC是Spring框架的一部分,是基于Java实现MVC设计模式的轻量级Web框架。

1、SpringMVC的优点

  • 轻量级、可适配、非侵入式、简单易学;
  • 高效,是基于请求响应的MVC框架(降低视图层与业务层之间的耦合性、提高可重用性和维护性);
  • 与Spring框架有很好的兼容性;
  • 功能强大、简洁灵活;

2、SpringMVC的实现原理

2.1 相关组件

  • 前端控制器/调度器DispatcherServlet):负责将用户发送的请求拦截下来,分发到各个控制器方法中;
  • 处理器映射器HandlerMapping):根据请求的URL 与 @RequestMaping映射进行匹配,匹配成功后会返回具体的Handler(封装了具体的控制器方法);
  • 处理器适配器HandlerAdapator):负责调用Handler中的具体方法、返回视图名地址,将其封装到ModelAndView中(封装视图名和request域的数据);
  • 视图解析器ViewReslover):根据ModelAndView中的视图名地址,去找到具体的jsp,然后封装到View对象中;
  • 视图View):进行视图渲染(将jsp转换成html的内容),最终响应到客户端;

2.2 执行流程

流程

  • 后续补充…

3、基于XML实现的SpringMVC

3.1 添加依赖

 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.1</version></dependency>

3.2 编写web.xml文件

<?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"><!--注册配置DispatcherServlet【前端控制器】--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--关联springmvc的配置文件【初始化DispatcherServlet】--><init-param><!--初始化参数:(1)contextConfigLocation 配置springmvc的xml配置文件,需要指定路径(2)也可以不配置,它会自动去WEB-INF中去找一个(【servlet-name】-servlet.xml)的文件--><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--设置优先级【当启动服务器时,就会加载IOC容器中所有的bean】--><!--当web服务器启动时,就会创建一个servlet(会自动调用servlet的构造函数以及init()方法)--><load-on-startup>1</load-on-startup></servlet><!--配置servlet的映射路径:(1)'/'  会匹配除 .jsp 之外的请求(2)‘/*’ 会匹配所有的请求--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--配置编码过滤器 CharacterEncodingFilter,解决中文乱码问题--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!--配置编码--><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><!--同时开启请求和响应的编码设置--><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><!--配置拦截哪些请求进行过滤--><filter-mapping><filter-name>characterEncodingFilter</filter-name><!--指定需要拦截的url路径--><url-pattern>/*</url-pattern><!--拦截规则:指定过滤哪个servlet--><servlet-name>springmvc</servlet-name></filter-mapping>
</web-app>

3.3 编写springmvc.xml配置文件

<?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 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="org.example"></context:component-scan></beans>

3.4 编写控制器类

@Controller
public class HelloController {//@RequestMapping 将方法映射给对应的url请求处理@RequestMapping("/Hello")public String helloWorld(String name){System.out.println("hello springmvc:"+ name);/** 响应:* (1)redirect:重定向* (2)默认值:转发*/return "index.jsp";}
}
  • 项目结构
    项目结构
  • 请求地址:
    http://localhost:8090/springmvc/Hello?name=李四

相关文章:

02_01_SpringMVC初识

一、回顾MVC三层架构 1、什么是MVC三层 MVC是 模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;、控制器&#xff08;Controller&#xff09;的简写&#xff0c;是一种软件设计规范。主要作用是降低视图与业务逻辑之间的双向耦合&#xff0c;它不是一种…...

Python学习打卡:day04

day4 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day428、while 循环的嵌套应用29、while 循环案例 — 九九乘法表补充知识示例&#xff1a;九九乘法表 30、for 循环基本语法while 和 for 循环对比f…...

gitlab问题记录

You wont be able to pull or push project code via SSH until you add an SSH key to you 解决方案&#xff1a;https://blog.csdn.net/gufenchen/article/details/95663284...

OpenCV练习(1)签名修复

1.目的 在学校的学习过程中&#xff0c;需要递交许多材料&#xff0c;且每份材料上都需要对应负责人签名&#xff0c;有时候找别人要签名&#xff0c;然后自己粘贴的话&#xff0c;会出现签名模糊&#xff0c;背景不是纯白透明。为此以word中的“颜色校正”功能为参照&#xf…...

软设之系统测试之测试的基本概念及分类

测试的基本概念 尽早&#xff0c;不断地进行测试 程序员避免测试自己设计的程序 既要选择有效&#xff0c;合理的数据&#xff0c;也要选择无效&#xff0c;不合理的数据 修改后应进行回归测试 尚未发现的错误数量与该程序已发现错误其他成正比。 动态测试 黑盒测试(测试…...

Python学习打卡:day06

day6 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day648、函数综合案例49、数据容器入门50、列表的定义语法51、列表的下标索引1、列表的下标&#xff08;索引&#xff09;2、列表的下标&#xff08…...

支付宝 沙盒demo使用

简介&#xff1a;支付宝沙箱环境是一个为开发者提供的模拟测试环境&#xff0c;用于在应用上线前进行接口功能开发和联调。在这个环境中&#xff0c;开发者可以模拟开放接口&#xff0c;进行开发调试工作&#xff0c;以确保应用上线后能顺利运行。 1. 配置沙盒 1. 1 沙箱控制…...

ConcurrentHashMap如何保证线程安全?

ConcurrentHashMap 是 HashMap 的多线程版本&#xff0c;HashMap 在并发操作时会有各种问题&#xff0c;比如死循环问题、数据覆盖等问题。而这些问题&#xff0c;只要使用 ConcurrentHashMap 就可以完美解决了&#xff0c;那问题来了&#xff0c;ConcurrentHashMap 是如何保证…...

spring属性注入的不细心错误

属性注入问题 个人博客:www.zgtsky.top 同个的对象&#xff0c;在一个类中注入成功&#xff0c;在另一个类中注入为null 问题&#xff1a;在检测各个需要的类上已经打上注解后&#xff0c;出现了在一个类A1中注入B属性成功了&#xff0c;但在另一个类A2中注入B属性却失败了。…...

JVM 根可达算法

Java中的垃圾 Java中"垃圾"通常指的是不再被程序使用和引用的对象&#xff0c;具体表现在没有被栈、JNI指针和永久代对象所引用的对象。Java作为一种面向对象的编程语言&#xff0c;它使用自动内存管理机制&#xff0c;其中垃圾收集器负责检测和回收不再被程序引用的…...

Kafka基础架构与核心概念?有哪些应用场景?

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者,性能特点主要是高吞吐,低时延。 Kafka主要设计…...

内网不能访问网站怎么办?

内网不能访问网站是在网络使用过程中常见的问题之一。当我们使用局域网连接时&#xff0c;有时候会遇到无法访问特定网站的情况。这可能是因为网络环境复杂&#xff0c;或者受到了某些限制。本篇文章将介绍一种解决内网不能访问网站问题的产品——天联组网。 天联组网是一款由…...

python-求f(x,n)

[题目描述] 输入&#xff1a; 输入 &#x1d465;和 &#x1d45b;。输出&#xff1a; 函数值&#xff0c;保留两位小数。样例输入1 4.2 10 样例输出1 3.68 来源/分类&#xff08;难度系数&#xff1a;一星&#xff09; 完整代码如下&#xff1a; x,nmap(eval,input().split(…...

java值jsp语法笔记

1 JSP注释 1.1 显示注释 显示注释会出现在生成的HTML文档中&#xff0c;对用户可见。 <!-- 这是一个HTML显示注释 --> 1.2 隐式注释 隐式注释不会出现在生成的HTML文档中&#xff0c;对用户不可见。 <%-- 这是一个JSP隐式注释 --%> 2 JSP脚本元素 2.1 局部…...

057、PyCharm 运行代码报错:Error Please select a valid Python interpreter

当我们在PyCharm运行代码时&#xff0c;提示如下图错误&#xff1a; 那么问题通常是由于PyCharm未正确配置Python解释器引起的。 我们只需按以下步骤重新配置Python解释器即可&#xff1a; 打开PyCharm设置&#xff1a; 在菜单栏中的点击 “File” -> “Settings”&#xf…...

Java实现图书管理系统

一、引言 本篇介绍了一个简易的图书管理系统&#xff0c;面向管理员和普通用户分别给出了不同的菜单&#xff0c;实现了一些基本的图书操作功能&#xff0c;包括图书的增删查改、借阅、归还等 二、图书管理系统框架 图书管理系统&#xff0c;顾名思义&#xff0c;管理的是图…...

使用静态方法接受对象参数

我们先来看一个例子 public class MyInteger { private int value; // 构造函数 public MyInteger(int value) { this.value value; } // 实例方法 public boolean isEven() { return value % 2 0; } // 静态方法接受int参数 public static boolean isEvenStatic…...

cocos creator如何使用cryptojs加解密(及引入方法)

cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 如果想转请评论留个言并注明原博 Sclifftop 13805064305 阿浚 cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 步骤 获取库 1. npm install crypto-js -g&#xff0c;加不加…...

安装台式电脑网卡驱动

安装电脑网卡驱动 1. 概述2. 具体方法2.1 先确定主板型号2.2 详细操作步骤如下2.2.1 方法一2.2.2 方法二2.2 主流主板官网地址 结束语 1. 概述 遇到重装系统后、或者遇到网卡驱动出现问题没有网络时&#xff0c;当不知道怎么办时&#xff0c;以下的方法&#xff0c;可以作为一…...

JavaEE-多线程(1)

这篇文章&#xff0c;我们将介绍进程、线程的相关概念以及进程和线程的区别&#xff0c;下篇文章我们将使用Java来编写多线程的代码 进程&#xff1a; 进程&#xff08;Process&#xff09;是操作系统中资源分配的基本单位&#xff0c;它是一个正在运行的程序的实例。进程包括…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

MySQL基本操作(续)

第3章&#xff1a;MySQL基本操作&#xff08;续&#xff09; 3.3 表操作 表是关系型数据库中存储数据的基本结构&#xff0c;由行和列组成。在MySQL中&#xff0c;表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...