【SpringMVC】入门篇:带你了解SpringMVC的执行流程

news2024/11/15 19:35:20

目录
一、简介
二、环境的搭建
三、快速入门
四、SpringMVC的执行流程
在这里插入图片描述


Spring有关的文章已经全部更新完,收录于我的专栏👉Spring👈


一、简介

我们在前边已经学习了Spring的基本使用。从这节开始,我们进行SpringMVC的学习。在学习之前,我们首先得搞清楚SpringMVC是个什么东西?它可以用来干什么?

 SpringMVC就是一个Spring内置的MVC框架。它是基于SpringFrame的web层框架。我们可以简单理解为它可以将我们原来的Controller进行接管,相较于我们javaWeb部分学习的Servlet,需要继承Servlet实现类的这种方式,在SpringMVC中我们只需要用一个注解就可以完成。总的一句话:SpringMVC使我们的开发流程更加的简便。

虽然我们SpringMVC使我们的开发更加的简便,但它的底层还是用到了我们的Servlet,SpringMVC是对它做了封装。所以想要学好SpringMVC的前提是学好的我们的Servlet。

二、环境的搭建

添加jar包

在我们前边Spring环境的基础上添加两个jar包:spring-web-x.x.x.jarspring-webmvc-x.x.x.jar
在SpringMVC中我们需要将我们的请求要交由中央控制器来进行处理。所以我们得在web.xml文件中进行配置。

配置中央控制器

<!--配置前端控制器.用户的请求都会经过它的处理(他就是一个Servlet)-->
<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:springDispatcherServlet-servlet.xml</param-value>
   </init-param>
   <!--在web项目启动的就自动加载 DispatcherServlet-->
   <load-on-startup>1</load-on-startup>
</servlet>
<!--
   1. 这里我们配置的url-pattern是/,表示用户的请求都经过它的拦截处理
   2. 这样配置同样也支持rest风格的url请求
-->
<servlet-mapping>
   <servlet-name>springDispatcherServlet</servlet-name>
   <url-pattern>/</url-pattern>
</servlet-mapping>

除了上边我们配置方式,还有它们默认的一种指定Spring配置文件的方式。
我们可以将<init-param>都注释掉,那么它默认的就回去找servlet名称-servlet.xml文件。这是因为:
源码中有这样一个注释:

/**
  * Suffix for WebApplicationContext namespaces. If a servlet of this class is
  * given the name "test" in a context, the namespace used by the servlet will
  * resolve to "test-servlet".
  */

 这也就是说,如果我们没手动配置contextConfigLocation,他就会默认去/WEB-INF/servlet名称-servlet.xml找有没有这个文件。

创建Spring配置文件

 在我们的Spring配置文件中需要配置一个默认的视图解析器,至于它的作用是什么,我们后边来详细的进行讲解。
<!--spring容器的配置文件-->
<!--配置自动扫描的包-->
<context:component-scan base-package="com.jl.web"></context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置前缀-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <!--
    这个配置就是告诉解析器,当我返回”login_ok“这个字符串的时候,
    视图解析器应该去找 "/WEB-INF/pages/login_ok.jsp"这个资源-->
</bean>

三、快速入门

 完成了上边环境的搭建。我们这里先使用一个简单的登录案例来体会一下SpringMVC的便捷之处。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆页面</title>
</head>
<body>
<form action="/springmvc/login/doLogin" method="post">
    u:<input type="text" name="name"><br>
    p:<input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>
package com.jl.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * ClassName: UserServlet
 * Package: com.jl.web
 * Description: SpringMVC的入门演示
 *
 * @Author: Long
 * @Create: 2022/11/26 - 15:16
 * @Version: v1.0
 *
 * 如果我们在一个类上边声明了@Controller
 * 表示将此类当作一个控制器注入到容器当中
 * 简化了我们原生Servlet的那一套操作
 */
@Controller
public class UserServlet {
    /**
     * 1. 编写方法,响应用户的请求
     * 2. @RequestMapping类似于我们原生Srevlet配置那个 url-pattern
     * 3. 就是当用户输入http://localhost:8080/web工程路径/login 的时候就
     *  能直接访问到我们的这个方法
     * 4. return "login_ok";表示返回结果给视图解析器(InternalResourceViewResolver)
     *  ,视图解析器根据配置,来决定跳转哪个页面。
     * @return
     */
    @RequestMapping(value = "/login")
    public String login(){
        System.out.println("登录成功");
        return "login_ok";
    }
}

登录成功页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<h1>登陆成功</h1>
</body>
</html>

结果截图:
在这里插入图片描述
在这里插入图片描述
 看到这,有的小伙伴可能觉得这好像没有简化,反而还变得复杂了,要配置这配置那的。这是因为我们这里只是简单的进行一个案例演示,到后边我们理清整个流程之后,就会体会到它的妙用。

四、SpringMVC的执行流程

在这里插入图片描述

这里只是简单的一个流程图,方便于大家理解。

下节来讲我们的SpringMVC的使用

如果文章中有描述不准确或者错误的地方,还望指正。您可以留言📫或者私信我。🙏
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏

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

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

相关文章

汇编算数运算指令

目录 加法类指令 加法指令ADD 加进位的加法指令ADC 带进位有啥用呢&#xff1f; 增量指令INC&#xff08;1&#xff09; 减法类指令 减法指令SUB 带借位减法指令SBB 减量指令DEC 比较指令CMP&#xff08;分支程序设计常用&#xff09; 乘法指令 乘法指令MUL和符号整…

职场经验:自动化测试介绍和分类,看这一篇就够了

什么是自动化测试? 自动化测试是软件测试活动中一个重要的分支和组成部分,即利用工具或脚本达到测试目的,没有人工或者极少人工参与的软件测试活动称为自动化测试. 自动化测试的优势有哪些? 方便进行回归测试,当软件的版本发布比较频繁的时候,自动化的效果很明显 自动处理…

全网第三详细tshark使用帮助

一 前言tshark作为wireshark的命令行版本&#xff0c;功能非常强大&#xff0c;可以抓包&#xff0c;数据包分析、提取文件、提取分析后的数据还支持各种格式&#xff0c;可以说一把流量分析的瑞士军刀&#xff0c;如果在低流量的场景&#xff0c;包装下tshark命令&#xff0c;…

查找树莓派ip地址的几种方法

1.环境说明 从上面的图中可以看到树莓派是通过网线和win10电脑相连的&#xff0c;以此来共享win10电脑网络&#xff0c;但是需要在电脑端设置后才能将网络共享出来&#xff0c; 设置方法参考以下链接&#xff1a; 通过一根网线共享网络给另一个电脑或者群辉上网 注意&#xff0…

jQuery 遍历

什么是遍历&#xff1f; jQuery 遍历&#xff0c;意为"移动"&#xff0c;用于根据其相对于其他元素的关系来"查找"&#xff08;或选取&#xff09;HTML 元素。以某项选择开始&#xff0c;并沿着这个选择移动&#xff0c;直到抵达您期望的元素为止。 下图…

dotnet项目使用Cefsharp与Js互相调用函数

1. 背景 最近在一个项目中使用 CefSharp 加载H5页面, 其中一些业务逻辑需要调用 Js 函数, 同时 Js 也会调用一些 native 函数: 这里我们使用官方的demo代码进行添加修改, 修改后的代码在此: DevWiki/CefSharp.MinimalExample - CefSharp.MinimalExample - DevWiki Gitea 2. J…

Allegro如何打开和关闭飞线操作指导

Allegro如何打开和关闭飞线操作指导 Allegro可以打开和关闭飞线,下面介绍如何打开和关闭飞线,具体操作如下 选择display-show rats-all。打开所有nets的飞线 如下图 如果菜单里面添加图标,可以直接点击图标显示所有飞线 选择display-Blank Rats-all关闭所有nets的飞线 …

Spring MVC学习 | 简介HelloWord

文章目录一、Spring MVC简介1.1 MVC回顾1.2 Spring MVC是神魔二、HelloWord2.1 相关文件的准备2.2 创建请求控制器2.3 创建Spring MVC配置文件2.4 测试HelloWord2.4.1 访问首页2.4.2 访问目标页面2.5 执行流程学习视频&#x1f3a5;&#xff1a;https://www.bilibili.com/video…

STM32G4系列存储访问的两个小话题

一、有关CCM访问地址的话题有用过STM32F4系列部分芯片或STM32F334芯片的人&#xff0c;可能知道片内有个CCM【Core Coupled Memory】区域,从芯片系统框图结合文字说明&#xff0c;可以清晰知道这个区域仅能被CPU访问&#xff0c;常用来存放些对执行效率敏感的关键性的代码或数据…

【mmdetection系列】mmdetection之head讲解

目录 1.configs 2.具体实现 3.调用 3.1 注册 3.2 调用 配置部分在configs/_base_/models目录下&#xff0c;具体实现在mmdet/models/*_heads目录下。 这个heads可以是很多个目录下的。 1.configs 我们看下yolox的head吧。 https://github.com/open-mmlab/mmdetection/b…

Web前端开发技术课程大作业:基于HTML+CSS+JavaScript实现校园主题-萍乡田家炳中学校网站(1页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

详细讲解Linux物理内存初始化

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 介绍 让我们思考几个朴素的问题&#xff1f; 系统是怎么知道物理内存的&#xff1f;在内存管理真正初始化之前…

Java项目:SSM实现的校园门户平台网站系统含开题报告与需求分析

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统为前后台项目&#xff0c;后台为管理员登录&#xff0c;前台为社团、学生、教师角色登录&#xff1b; 管理员角色包含以下功能&#xff…

对称加密算法(二)(分组密码,Feistel Cipher)

文章目录Traditional Block Cipher StructureStream Ciphers and Block CiphersFeistel CipherReferencesTraditional Block Cipher Structure Stream Ciphers and Block Ciphers 序列密码也称为流密码 (Stream Ciphers)&#xff0c; 它是指每次对数字数据流的一个比特或一个…

CSS -- CSS复合选择器总结

文章目录CSS的复合选择器1 什么是复合选择器2 后代选择器3 子选择器4 并集选择器5 伪类选择器6 链接伪类选择器7 :focus 伪类选择器8 复合选择器总结CSS的复合选择器 1 什么是复合选择器 在 CSS 中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#…

【博客554】k8s 中的 Client-Side Apply 和 Server-Side Apply

k8s 中的 Client-Side Apply 和 Server-Side Apply 背景 如果你经常与 kubectl 打交道&#xff0c;那相信你一定见过 kubectl.kubernetes.io/last-applied-configuration annotation&#xff0c;以及那神烦的 managedFields&#xff0c;像这样&#xff1a; kubectl get pods…

单元测试理论储备及JUnit5实战

概述 测试驱动开发&#xff0c;TDD&#xff0c;Test Driven Development&#xff0c;优点&#xff1a; 使得开发人员对即将编写的软件任务具有更清晰的认识&#xff0c;使得他们在思考如何编写代码之前先仔细思考如何设计软件对测试开发人员所实现的代码提供快速和自动化的支…

银保监机构保险许可证数据(2007-2022年)

保险是金融系统的重要组成部分,保险的经济补偿和资金融通功能对维持金融系统的稳定,维护整个社会的安定起着不可或缺的作用,因此,从现实意义上来讲,对于我国保险业系统性风险的研究是很有必要性的。 通过对保险业系统性风险的类型、传播机制的研究,可以有效防范并降低我国保险…

MATLB|基于粒子群优化算法的智能微电网调度(含风、光、微型燃气轮机、电网输入微网、储能)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

linux基本使用及服务器环境搭建

文章目录0.linux基本命令1.配置jdk环境变量2.安装tomcat3. mysql安装4.部署jar项目基本命令5. 前端项目继承到后端项目中0.linux基本命令 1.pwd 我在那里 2.who am i 我是谁 3.clear 清屏 4.ctrlc 强制停止 5.ip addr 查看地址 6.ping 是否联通网站 7.systemctl start|s…