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

【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程

目录

1.Spring MVC的基本介绍

2.大致分析SpringMVC工作流程

3.SpringMVC的快速入门

首先大家先自行配置一个Tomcat

文件的配置

 配置 WEB-INF/web.xml

创建web/login.jsp

 创建com.ygd.web.UserServlet控制类

 创建src下的applicationContext.xml文件

重点的注意事项和说明

 !!!看看如果DispatcherServlet如果没在web.xml中指定Spring的上下文配置文件的路径。是如何去默认找到对应的xml文件的。


 

1.Spring MVC的基本介绍

1. SpringMVC WEB 层框架【老读 : SpringMVC 接管了 Web 层组件 , 比如控制器 , , 视图解析 , 返回给用户的数据格式 , 同时支持 MVC 的开发模式 / 开发架构】
2. SpringMVC 通过注解,让 POJO 成为控制器,不需要继承类或者实现接口
3. SpringMVC 采用低耦合的组件设计方式,具有更好扩展和灵活性 .
4. 支持 REST 格式的 URL 请求 .
5. SpringMVC 是基于 Spring , 也就是 SpringMVC 是在 Spring 基础上的。 SpringMVC 的核 心包 spring-webmvc-xx.jar spring-web-xx.jar

SpringMVC和SpringBoot的关系

1. Spring MVC 只是 Spring 处理 WEB 层请求的一个模块 / 组件 , Spring MVC 的基石是
Servlet[Java WEB]
2. Spring Boot 是为了简化开发者的使用 , 推出的封神框架 ( 约定优于配置,简化了 Spring
的配置流程 ), SpringBoot 包含很多组件 / 框架, Spring 就是最核心的内容之一,也包含 Spring MVC
3. 他们的关系大概是 : Spring Boot > Spring > Spring MVC

 

 

2.大致分析SpringMVC工作流程

 1:浏览器会发出url请求通过Tomcat中间键发送给后端。被前端控制器(DispatcherServlet)首先拦截。

 2:调用处理器映射器(HandlerMapping)。

3:处理器映射器会返回处理器执行器链(HandlerExecutionChain) 其中包含多个拦截器,以及处理器(Handler)(在下面的案例中Handler是UserServlet)。

4:前端控制器根据返回的处理器执行器链,调用处理器适配器(HandlerAdaptor)。

5:处理适配器才会去调用Handler处理器(Controller)

6: 调用处理器后返回ModelAndView(数据和视图)。

7:当ModelAndView返回给前端处理器后,前端处理器调用我们配置的视图解析器(InternalResourceViewResolver).

8:通过视图解析器返回view视图给前端控制器

9:前端控制器首先会进行一个视图的渲染(也就是对Jsp视图进行一些数据的加载啥的)

10:最后将真正的视图相应返回给客户端。


3.SpringMVC的快速入门

 进入登录界面后,登录显示登陆成功的信息!

分析流程:

首先大家先自行配置一个Tomcat

文件的配置

导入SpringMVC需要的jar包

 配置 WEB-INF/web.xml

1.配置前端控制器DispatcherServlet(包括初始化Spring上下文文件)

2.

<?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"><!--配置前端控制器/中央处理器/分发控制器1.用户的请求会经过他的处理--><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置属性 contextConfigLocation,用来指定DispatcherServlet 去操作的Spring的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext-mvc.xml</param-value></init-param><!--在web项目启动时,就会自动的加载DispatcherServlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><!--1. 在这里面我们配置的url-pattern是/,表示用户的请求都经过DispatcherServlet(中央处理器)2. 这样的配置也是rest风格的url请求--><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

创建web/login.jsp

注意在JavaWeb中学的工程路径
在填写action="login"表示的url是http://localhost:8080/springmvc/login
如果我填写action="/login"表示的url是http://localhost:8080/login

<%--Created by IntelliJ IDEA.User: Administrator :ygdDate: 2024/11/19Time: 23:30To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body><h3>登录界面</h3>
<%--  注意在JavaWeb中学的工程路径
在填写action="login"表示的url是http://localhost:8080/springmvc/login
如果我填写action="/login"表示的url是http://localhost:8080/login
--%>
<form action="login">u:<input name="username" type="text"><br/>p:<input name="password" type="password"><br/><input type="submit" value="登录">
</form></body>
</html>

 创建com.ygd.web.UserServlet控制类

1.这个UserServlet相当于Hander处理器,是用来决定将返回的信息返回到哪里的(要结合视图解析器)

2.JavaWeb之前是Jsp页面的东西给Servlet处理,然后Servlet重定向或者请求转发到其他的Jsp界面或者Servlet中

3.现在这个内容交给中中央控制器,和视图解析器完成。

package com.ygd.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author ygd* 1.如果我们使用了SpringMVC框架,在一个类上表明@Controller* 2.表示该类视为一个控制器,注入到容器中* 3.比原生的servlet开发要简化很多*/
@Controller
public class UserServlet {//编写方法,相应用户的请求//1.login()方法是用于响应用户的登录请求//2.@RequestMapping(value="/login")类似我们在原生的Servlet配置的url-pattern//3.当用户在浏览器输入http://localhost:8080/web工程路径/login能够访问到login()方法//4.return "login_ok";表示返回结果给视图解析器(InternalResourceViewResolver)// 视图解析器会根据配置,来决定跳转到那个页面。
//        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
//        <property name="prefix" value="/WEB-INF/pages/"/>
//        <property name="suffix" value=".jsp"/>
//    </bean>// 这个方法返回给视图解析器时,视图解析器会返回给/WEB-INF/pages/login_ok.jsp的页面@RequestMapping(value="/login")public String login(){System.out.println("login ok");return "login_ok";}
}

 创建src下的applicationContext.xml文件

1. 在Spring的上下文文件中,配置了InternalResourceViewResolver(视图解析器)。

2. 每个Servlet要返回到前端Jsp页面的操作都要经过视图解析器。

<?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"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">
<!--配置自动扫描的包--><context:component-scan base-package="com.ygd.web"/>
<!--配置视图解析器(整个容器中只能有一个视图解析器)--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀和后缀--><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean></beans>

执行该文件输入login.jsp跳转到登录界面,点击登录。案例结果完成!

重点的注意事项和说明

1. 这里的 UserServlet 需要注解成@Controller ,我们称为一个 Handler 处理器
2. UserServlet 指定 url 时,还可以这样


3. 关 于 SpringMVC 的 DispatcherServlet 的 配 置 文 件 , 如 果 不 在 web.xml 指 定
applicationContext-mvc.xml, 默认在 /WEB-INF/springDispatcherServlet-servlet.xml 找这
个配置文件
【简单看下 DispatcherServlet 的源码】。(推荐使用, 我们做下修改 , 并完成测
试)

下图是原本的项目的路径,以及在前端处理器中初始化属性contextConfigLocation。指定applicationContext路径。

 下图就是如果不在web.xml中指定applicationContext.xml的路径。

(因为这个关于Spring的上下文路径是必须要有的)

他会默认去和web.xml一样目录下(也就是/WEB-INF/)去寻找配置的前端处理器中的

<servlet-name>也就是下图的springDispatcherServlet加上-servlet.xml 文件(系统会默认这个xml文件就是Spring的上下文文件)。

如果既没有在web.xml文件中配置applicationContext.xml 又在web.xml的同级目录下,没找到对应的xml文件。就会报500的错误

 

 !!!看看如果DispatcherServlet如果没在web.xml中指定Spring的上下文配置文件的路径。是如何去默认找到对应的xml文件的。

 DispatcherServlet的父类FrameworkServlet 

绿色字体的意思是:WebApplicationContext命名空间的后缀。如果在上下文中将此类servlet命名为“test”,则servlet使用的命名空间将解析为“test-servlet”+".xml"。

什么意思:就是这里的test就是DispatcherServlet配置的<servlet-name>的名字 然后加上

-servlet.xml 寻找到我们的applicationContext.xml。


相关文章:

【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程

目录 1.Spring MVC的基本介绍 2.大致分析SpringMVC工作流程 3.SpringMVC的快速入门 首先大家先自行配置一个Tomcat 文件的配置 配置 WEB-INF/web.xml 创建web/login.jsp 创建com.ygd.web.UserServlet控制类 创建src下的applicationContext.xml文件 重点的注意事项和说明…...

vitepress博客模板搭建

vitepress博客搭建 个人博客技术栈更新&#xff0c;快速搭建一个vitepress自定义博客 建议去博客查看文章&#xff0c;观感更佳。原文地址 模板仓库&#xff1a; vitepress-blog-template 前言 服务器过期快一年了&#xff0c;博客也快一年没更新了&#xff0c;最近重新搭…...

Git入门图文教程 -- 深入浅出 ( 保姆级 )

01、认识一下Git&#xff01;—简介 Git是当前最先进、最主流的分布式版本控制系统&#xff0c;免费、开源&#xff01;核心能力就是版本控制。再具体一点&#xff0c;就是面向代码文件的版本控制&#xff0c;代码的任何修改历史都会被记录管理起来&#xff0c;意味着可以恢复…...

Linux编辑器 - vim

目录 一、vim 的基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) 二、vim 的基本操作 三、vim 正常模式命令集 1. 插入模式 2. 移动光标 3. 删除文字 4. 复制 5. 替换 6. 撤销上一次操作 7. 更改 8. 调至指定…...

Spring Security使用基本认证(Basic Auth)保护REST API

基本认证概述 基本认证&#xff08;Basic Auth&#xff09;是保护REST API最简单的方式之一。它通过在HTTP请求头中携带Base64编码过的用户名和密码来进行身份验证。由于基本认证不使用cookie&#xff0c;因此没有会话或用户登出的概念&#xff0c;这意味着每次请求都必须包含…...

MySQL —— explain 查看执行计划与 MySQL 优化

文章目录 explain 查看执行计划explain 的作用——查看执行计划explain 查看执行计划返回信息详解表的读取顺序&#xff08;id&#xff09;查询类型&#xff08;select_type&#xff09;数据库表名&#xff08;table&#xff09;联接类型&#xff08;type&#xff09;可用的索引…...

出海第一步:搞定业务系统的多区域部署

出海的企业越来越多&#xff0c;他们不约而同开始在全球范围内部署应用程序。这样做的原因有很多&#xff0c;例如降低延迟&#xff0c;改善用户体验&#xff1b;满足一些国家或地区的数据隐私法规与合规要求&#xff1b;通过在全球范围内部署应用程序来提高容灾能力和可用性&a…...

二手手机回收小程序,一键便捷高效回收

随着科技的不断升级&#xff0c;智能手机也在快速进行更新换代&#xff0c;出现了大量的闲置手机&#xff0c;这为二手手机市场提供了巨大的发展空间&#xff01; 经过手机回收市场的快速发展&#xff0c;二手手机回收已经成为了消费者的新选择&#xff0c;既能够减少手机的浪…...

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-性能分析(四)

一、前言 离线推理能够在模型训练完成后,特别是在处理大规模数据时,利用预先准备好的输入数据进行批量推理,从而显著提高计算效率和响应速度。通过离线推理,可以在不依赖实时计算的情况下,快速生成预测结果,从而优化决策流程和提升用户体验。此外,离线推理还可以降低云计…...

深入解析小程序组件:view 和 scroll-view 的基本用法

深入解析小程序组件:view 和 scroll-view 的基本用法 引言 在微信小程序的开发中,组件是构建用户界面的基本单元。两个常用的组件是 view 和 scroll-view。这两个组件不仅功能强大,而且使用灵活,是开发者实现复杂布局和交互的基础。本文将深入探讨这两个组件的基本用法,…...

【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读

文章目录 前言1. jcxz 指令1.1 什么是jcxz指令1.2 如何操作 2. loop 指令2.1 什么是loop指令2.2 如何操作 3. 根据位移进行转移的意义3.1 为什么&#xff1f;3.2 举例说明 4. 编译器对转移位移超界的检测结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构…...

opencv-python 分离边缘粘连的物体(距离变换)

import cv2 import numpy as np# 读取图像&#xff0c;这里添加了判断图像是否读取成功的逻辑 img cv2.imread("./640.png") # 灰度图 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 gray cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, binary cv2…...

机器学习杂笔记1:类型-数据集-效果评估-sklearn-机器学习算法分类

文章目录 1.类型2.数据集3.效果评估4.sklearn5.sklearn机器学习算法七种数据分析方法1.对比分析2.细分分析3.A/B测试 &#xff08;单一变量分析&#xff09;4.漏斗分析5.留存分析6.相关分析7.聚类分析 1.类型 【1】监督学习&#xff1a;从成对的已经标记好的输入和输出经验数据…...

Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能

网站部署在华为云服务器上&#xff0c;Debian系统&#xff0c;使用DjangoNginxuwsgi搭建。最终效果如下图所示。 一、响应逻辑顺序 1. 聊天页面请求 客户端请求/chat/&#xff08;输入聊天室房间号界面&#xff09;和/chat/room_name&#xff08;某个聊天室页面&#xff09;链…...

数据结构在二叉树Oj中利用子问题思路来解决问题

二叉树Oj题 获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N) 二叉树的遍历判断是否是对称的二叉树二叉…...

华为openEuler考试真题演练(附答案)

【单选题】 以下关于互联网的描述&#xff0c;哪个选项是正确的? A:Nginx 在万维网中可以作为 ftp 服务器的反向代理&#xff0c;并与ftp服务器的数量--对应 B:Nginx 在互联网中可以作为 web服务器端&#xff0c;成为万维网的一个节点 C:互联网上的的资源需使用 Nginx进行七层…...

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令&#xff0c;生成自签名证书和私钥文件&#xff1a; sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509&#xff1a;生成自签名证书。…...

物联网核心安全系列——智能汽车安全防护的重要性

汽车行业引入的智能硬件技术已经越来越多&#xff0c;早先设计者更多考虑到的是硬件成本和软件用户体验等因素&#xff0c;但随着国外两位技术人员成功实现远程控制汽车的视频曝出后&#xff0c;智能汽车安全便成为了一个热议话题。 汽车总线架构及原理比较复杂&#xff0c;日…...

数据库视图

数据库视图&#xff08;Database View&#xff09;是数据库中的虚拟表&#xff0c;其内容由查询定义&#xff0c;通常用来简化复杂的查询或提供安全访问数据。视图并不存储实际数据&#xff0c;而是将查询的结果集作为一个“虚拟表”呈现。用户通过查询视图&#xff0c;就可以看…...

从传统分析到智能问数,打造零门槛数据分析方案

众所周知&#xff0c;传统报表和自助分析工具存在使用门槛&#xff0c;且早期智能分析不够智能。随着AI技术发展&#xff0c;现有数据应用模式难以满足多样化、快速变化的需求&#xff0c;数据驱动、敏捷决策、精细运营成为了各大企业的新课题。 01企业数据应用挑战 业务人员的…...

java 设计模式 模板方法模式

模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它在父类中定义一个算法的框架&#xff0c;允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式非常适合于那些有一定公共流程&#xff0c;但某些步骤需要子类定制…...

基于UDP和TCP实现回显服务器

目录 一. UDP 回显服务器 1. UDP Echo Server 2. UDP Echo Client 二. TCP 回显服务器 1. TCP Echo Server 2. TCP Echo Client 回显服务器 (Echo Server) 就是客户端发送什么样的请求, 服务器就返回什么样的响应, 没有任何的计算和处理逻辑. 一. UDP 回显服务器 1. UD…...

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1&#xff1a;配置 MongoDB 官方源步骤 2&#xff1a;安装 MongoDB步骤 3&#xff1a;启动 MongoDB 服务步骤 4&#xff1a;验证安装步骤 5&#xff1a;可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤&#xff1a; 步骤 1&#x…...

Android和IOS的区别

一、系统区别 1、系统和框架的区别 &#xff08;1&#xff09;Android系统的底层建立在Linux系统之上&#xff1b;而ios基于UNIX系统 Android完全开放&#xff0c;iOS完全封源开发 &#xff08;2&#xff09;编程语言:Android的编程语言是Java和KotLin&#xff1b;而ios的则为O…...

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为…...

Vue前端开发子组件向父组件传参

在父组件中&#xff0c;如果需要获取子组件中的数据&#xff0c;有两种方式&#xff0c;一种是在子组件中自定义事件&#xff0c;父组件绑定该事件&#xff0c;当触发自定义事件时&#xff0c;向父组件传入参数;另一种是先通过ref属性给子组件命名&#xff0c;然后在父组件中就…...

javaScript语法基础(函数,对象,常用类Array,String,Math和Date)

# 本文详细结束了JavaScript中函数、对象、常用类Array&#xff0c;String&#xff0c;Math和Date的用法。 一、函数 1、概述 将程序中多次要用到的代码块封装起来&#xff0c;就是函数。函数使代码块的重复使用更方便&#xff0c;且功能独立&#xff0c;便于维护。 2、函数的…...

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是&#xff1a; 在官网说明里&#xff0c;才版本2024.1开始&#xff0c;默认启用的 Vue Language Server&#xff0c;但是在 Vue 2 项…...

k8s-NetworkPolicy

NetworkPolicy 是k8s中的网络策略可以限制pod以及namespace之间的访问流量 演示一下名称空间之间基于端口的访问限制 官方对networkpolicy的介绍 官方网址&#xff1a; 网络策略 |Kubernetes &#xff08;简体中文&#xff09; 一&#xff1a;创建NetworkPolicy vim…...

【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)

文章目录 前言1. 实现Date类的构造函数2. 实现Date类的拷贝构造函数3. 实现Date类的赋值运算符重载4. 实现各Date对象之间的比较接口5. 实现Date对象的加减接口6. const成员7. 取地址及const取地址操作符重载 前言 在我们前面学习到了"类和对象"的四大默认成员函数(…...

企业网站结构图/舆情分析报告

环境: 联想E14 Win10专业版 钉钉最新版6.5.50-11089104 问题描述: 钉钉在线表格下载后内容空白,在线编辑有时打开闪一下就空白,下载的表格sheet2还是空白的 sheet2有数据 下载后空白: 从下面方式下载,在线编辑进去下载,就卡死无响应,单独下载csv格式是可以的 原因分…...

响应式网站404页面怎么做/广告策划书

使用 visualvm干的第一件事情&#xff1a;监控类是否是多例模式 具体操作为&#xff1a; 1、首先启动本地项目&#xff0c;打开 jvisualvm&#xff0c;选择Tomcat&#xff08;注意&#xff0c;在jdk目录下的名称里&#xff0c;命名前加了一个 j&#xff0c;别找不到了&#xff…...

荥阳郑州网站建设/网络营销公司是做什么的

1.把snmpdiskio文件上传到被监控服务器的/usr/local/bin目录下;2.把解压之后文件夹下的 partition.xml上传到cacti监控服务器的/xxx/cacti/resource/snmp_queries/目录下。3、导入2个模板&#xff1a;cacti_graph_template_disk_io_bytessec.xmlcacti_data_query_snmp_disk_sta…...

电子商务网站建设教程/百度搜索排行seo

python续行符号及替换续行符符号 续行符号&#xff1a;“\” 代码示例 if signal"red" and\ car"moving":#上面代码相当于&#xff1a; if signal"red" and car"moving":不需要续行符&#xff1a; 第一种&#xff1a;小括号&#xf…...

点击图片进入网站怎么做/seo关键词选取工具

前言随着自己开发的应用的版本迭代&#xff0c;新功能不断增多&#xff0c;随之引入的第三方库也不可避免地多了起来&#xff0c;你可能就会发现自己应用Application中各种框架的初始化代码也在逐渐臃肿起来&#xff1a;什么推送啦&#xff0c;分享啦&#xff0c;统计啦&#x…...

做网站视频学什么专业/关键帧

卓易科技eazytec获得战略投资,涉及金额未透露,投资方为英特尔投资。 江苏卓易信息科技股份有限公司是由一批海外归国人员和毕业于国内著名大学的研究人员于2008年5月在江苏省宜兴环科园内成立的一家拥有计算设备BIOS核心技术的智慧城市云服务商。通过持续地BIOS固件技术和智慧城…...