(Java)SpringMVC学习笔记(二)

news2025/3/11 0:01:45

前言

继续学习SpringMVC视频教程,争取今明后三天把设定的目标完成

SpringMVC 框架搭建

这一步花了我一上午时间,报了个404错误,没办法,只能从头开始创建项目(心态差点整爆炸,第一次是自认不懂,结果是好的,第二次自认懂点,结果爆炸

求学要保持虚心求教的态度,不可好高骛远

第一步 创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步 pom.xml文件配置

修改打包方式==>war

引入相关依赖
在这里插入图片描述
在这里插入图片描述

完整源码如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.mvc</groupId>
    <artifactId>springMVC-demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring5Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>


</project>

第三步 web.xml文件配置

src/main目录下创建webapp,要注意是否有蓝点

在这里插入图片描述
在这里插入图片描述

SpringMVC核心配置文件默认的位置在WEB-INF下,有默认的名称为servlet-name标签的值-servlet.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>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <!-- 将前端控制器初始化时间提前到服务器启动时 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

第四步 SpringMVC核心配置文件配置

浏览器通过视图(html文件)向服务器发送请求,若请求路径与注解@RequestMapping的value值相符,则其注解的方法为处理请求的方法,处理完后返回String型字符串即视图名称

在这里插入图片描述

<?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 http://www.springframework.org/schema/context/spring-context.xsd" >


    <!-- 自动扫描包 -->
    <context:component-scan base-package="com.atguigu.mvc.controller"/>

    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">

                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>

                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>


</beans>

第五步 测试是否搭建成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意事项

以下三点务必重点关注:
导入依赖
web.xml配置
核心文件配置

我出错在核心配置文件/WEB-INF/templates/路径错误,应该还有别的错,总之新手要谦虚谨慎
在这里插入图片描述

@RequestMapping注解

@RequestMapping注解的功能

从注解名称上可以看到,@RequestMapping注解的作用是将请求和处理请求的控制器方法关联起来,建立映射关系

SpringMVC接受到指定的请求,就会来找在映射关系中对应的控制器方法来处理这个请求

注意:必须保证RequestMapping处理的请求地址是唯一的

在这里插入图片描述

@RequestMapping注解的位置

在这里插入图片描述

@RequestMapping表示一个类:设置映射请求的请求路径的初始信息
@RequestMapping标识一个方法:设置映射请求的请求路径的具体信息

package com.atguigu.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class RequestMappingController {
	
	//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
    @RequestMapping("/testRequestMapping")
    public String success(){
        return "success";
    }
}

在这里插入图片描述
在这里插入图片描述

thymeleaf会自动为@{}大括号配置上下文路径

浏览器解析的/为绝对路径,也就是http://localhost:8080/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实用场景

因为RequestMapping中的value值不能一样,不然请求路径相同,处理的方法会发生冲突

解决就是更改请求路径,这时候RequestMapping中的value值相同也无妨

比如有用户模块和订单模块,两者都有列表,请求都为绝对路径加list参数

那么就会发生冲突

图解

user ====> list
order ====> list

解决之道

user ===> /user/list
order ===> /order/list

通过@RequestMapping标识类来为请求添加一层目录从而区分不同业务

@RequestMapping标识类通常在不同模块的控制器来处理相同的@RequestMapping的value属性值所标识的方法

@RequestMapping中的value属性

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射

@RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址 多对应的请求

@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@RequestMapping的method属性

@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射

@RequestMapping注解的method属性是一个RequestMapping类型的数组,表示该请求映射能够匹配多种请求方式的请求

若当前请求的请求地址满足请求映射的value属性,但请求方式不满足method属性,则浏览器报405错误Request method 'POST' not supported

get请求一般是用来获取数据(也可以用来提交数据,但通常用于获取数据)
post请求一般是用来提交数据
原因

get会把请求参数放在url(请求路径)中,隐私性、安全性较差,且请求数据长度有限制,但传输速度快
post请求没有长度限制,请求数据放在请求体中

当不设置method属性值时,不以请求方式为条件来匹配请求映射
在这里插入图片描述
在这里插入图片描述

当设置mehod属性值为RequestMethod=GET时,请求方式不匹配,报405错误
在这里插入图片描述
在这里插入图片描述

当把method属性值设为RequestMethod.GET,RequestMethod.POST后匹配POST请求
在这里插入图片描述

在这里插入图片描述

1、对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

  • 处理get请求的映射 —> @GetMapping
  • 处理post请求的映射 —> @PostMapping
  • 处理put请求的映射 —>@PutMapping
  • 处理delete请求的映射 —> @DeleteMapping

示例展示
在这里插入图片描述
在这里插入图片描述

2、常用的请求方式有get,post,put,delete

  • 当时目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符串(put 或 delete),则按照默认的请求方式get处理
  • 若要发送put和delete请求,则需通过spring提供的过滤器HiddenHttpMethodFilter,在restful部分会讲到

在这里插入图片描述

在这里插入图片描述

@RequestMapping的params属性

@RequestMapping注解的params属性通过请求的请求参数匹配请求映射

@RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系

  • “param”:要求请求映射所匹配的请求必须携带param请求参数
  • “!param”:要求请求映射所匹配的请求必须不能携带param请求参数
  • “param=value”:要求请求映射所匹配的请求必须携带param请求参数且参数值为value
  • “param!=value”:要求请求映射所匹配的请求必须携带param请求参数且参数值不能为value

示例如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@RequestMapping的headers属性

  • @RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
    @RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系
    “header”:要求请求映射所匹配的请求必须携带header请求头信息
    “!header”:要求请求映射所匹配的请求必须不能携带header请求头信息
    “header=value”:要求请求映射所匹配的请求必须携带header请求头信息且值为value
    “header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且值不为value
  • 若当前请求满足@RequestMapping注解的value和method属性,但不满足headers属性,此时页面显示404错误,即资源未找到

示例
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

小结

  • 请求后页面响应报400错误,重点看 请求中的请求参数
  • 请求后页面响应报404错误,重点看 请求中的请求头和请求路径
  • 请求后页面响应报405错误,重点看 发送请求的方式

Ant风格的路径

Spring MVC支持Ant风格的URL路径映射,所谓Ant风格其实就是一种通配符风格,可以在处理器映射路径中使用通配符对访问的URL路径进行关联

?:表示任意的单个字符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/在URL中代表路径分隔符,?代表参数拼接符,说是代表任意单个,首先是单个,然后任意加上引号

*:表示任意的0个或多个字符

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

**:表示任意的一层或多层目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意: 在使用时,只能使用 /**/xxx的方式

SpringMVC支持路径中的占位符(重点)

除了支持Ant风格的URL路径映射外,Spring MVC还支持RESTful风格的路径映射

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

SpringMVC路径中的占位符常用于restful风格中,在请求路径中将某些数据通过路径的方式传输到服务器中

就可以在相应的@RequestMapping注解的value属性中通过占位符(xxx)表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

示例理解:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取占位符所对应的值比较单一,就是通过@PathVaribale注解将占位符所代表的值和形参进行绑定,也就是将占位符所表示的数据赋值给控制器形参

占位符必须和value进行匹配,这两者关系类似name和value的关系

简单描述:通过键值映射关系,用键获取值,在把键和形参绑定,这样当键有其对应的值,就会传给形参,也就是控制器(服务器端)

  • RESTful风格在HTTP请求中通过GET、POST、PUT和DELETE这4个动词对应4种基本请求操作,具体如下所示:
  • GET:用于获取资源
  • POST:用于新建资源
  • PUT:用于更新资源
  • DELETE:用于删除资源

小结

这一部分,遇到最大的问题就是搭建Spring MVC的时候,所幸解决了。

然后就是一些知识点的学习掌握,总的来说,无论是理解还是实践都没有太大难度

跟着尚硅谷学习Spring MVC,要打起精神,之前学习mybatis和spring都是1.5倍速,学Spring MVC知识点稍微新一些且视频不包含字幕,杨老师也全程无尿点,所以哪怕原倍速,也要聚起精神来学习~

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

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

相关文章

格力博通过创业板注册:上半年营收32亿 拟募资34.56亿

雷递网 雷建平 12月15日格力博&#xff08;江苏&#xff09;股份有限公司&#xff08;简称&#xff1a;“格力博”&#xff09;日前通过注册&#xff0c;准备在深交所创业板上市。格力博计划募资34.56亿元&#xff0c;其中&#xff0c;11.69亿元用于年产500万件新能源园林机械智…

【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】

目录1. LeNet模型介绍与实现2. 输入为Fashion-MNIST时各层输出形状3. 获取Fashion-MNIST数据和并使用LeNet模型进行训练4.完整代码之前我们对Fashion-MNIST数据集中的图像进行分类时&#xff0c;是将28*28图像中的像素逐行展开&#xff0c;得到长度为784的向量&#xff0c;并输…

Spring Cloud基于JWT创建统一的认证服务

认证服务肯定要有用户信息&#xff0c;不然怎么认证是否为合法用户&#xff1f;因为是内部的调用认证&#xff0c;可以简单一点&#xff0c;用数据库管理就是一种方式。或者可以配置用户信息&#xff0c;然后集成分布式配置管理就完美了。 表结构 本教程中的案例把查数据库这…

2022-年终总结

2022年已经到了尾声&#xff0c;后半年度过的太漫长了&#xff0c;也是自己这两年来成长速度最快的一次了&#xff08;后文揭晓&#xff09; 今年的年中总结链接 上半年我沉浸在读各类技术书籍中&#xff0c;但是后半年的我几乎放弃了读书&#xff0c;转而投身到另外一个学习渠…

Linux Phy 驱动解析

文章目录1. 简介2. phy_device2.1 mdio bus2.2 mdio device2.3 mdio driver2.4 poll task2.4.1 自协商配置2.4.2 link 状态读取2.4.3 link 状态通知3. phylink3.1 phylink_create()3.2 phylink_connect_phy()3.3 phylink_start()3.3 poll task参考资料1. 简介 在调试网口驱动的…

从另外一个角度解释AUC

AUC到底代表什么呢&#xff0c;我们从另外一个角度解释AUC&#xff0c;我们先看看一个auc曲线 蓝色曲线下的面积(我的模型的AUC)比红线下的面积(理论随机模型的AUC)大得多&#xff0c;所以我的模型一定更好。 我的模型比随机模型好多少呢?理论随机模型只是对角线&#xff0c;…

加密与认证技术

加密与认证技术密码技术概述密码算法与密码体制的基本概念加密算法与解密算法秘钥的作用什么是密码密钥长度对称密码体系对称加密的基本概念典型的对称加密算法DES加密算法3DES加密算法非对称密码体系非对称加密基本概念密码技术概述 密码技术是保证网络安全的核心技术之一&am…

【windows Server 2019系列】 构建IIS服务器

个人名片&#xff1a; 对人间的热爱与歌颂&#xff0c;可抵岁月冗长&#x1f31e; Github&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff1a;念舒_C.ying CSDN主页✏️&#xff1a;念舒_C.ying 个人博客&#x1f30f; &#xff1a;念舒_C.ying Web服务器也称为WWW(World W…

电子厂测试题——难倒众多主播——大司马也才90分

一、选择题 1、1-2 ( ) A.1 B.3 C.-1 D.-3 2、|1-2|( ) A.1 B.3 C. -1 D.-3 3、1x2x3( ) A.5 B.6 C.7 D.8 4、3643( ) A.29 B.16 C.8 D.3 5、55x5( ) A.15 B.30 C.50 D.125 二、填空题(请填写阿拉伯数字) 6、110100 1000_______ 7、一个三角形砍去1个角&#…

Feign的两种最佳实践方式介绍

何谓最佳实践呢&#xff1f;就是企业中各种踩坑&#xff0c;最后总结出来的相对比较好的使用方式&#xff1b; 下面给大家介绍两种比较好的实践方案&#xff1a; 方式一&#xff08;继承&#xff09;&#xff1a;给消费者的FeignClient和提供着的Controller定义一个统一的父接…

在逆变器中驱动和保护IGBT

在逆变器中驱动和保护IGBT 介绍 ACPL-339J是一款先进的1.0 A双输出&#xff0c;易于使用&#xff0c;智能的手机IGBT门驱动光耦合器接口。专为支持而设计MOSFET制造商的各种电流评级&#xff0c;ACPL-339J使它更容易为系统工程师支持不同的系统额定功率使用一个硬件平台通过…

全面解析若依框架(springboot-vue前后分离--后端部分)

1、 若依框架分解 - 启动配置 前端启动 # 进入项目目录 cd ruoyi-ui# 安装依赖 npm install# 强烈建议不要用直接使用 cnpm 安装&#xff0c;会有各种诡异的 bug&#xff0c;可以通过重新指定 registry 来解决 npm 安装速度慢的问题。 npm install --registryhttps://regist…

算法刷题打卡第47天:排序数组---归并排序

排序数组 难度&#xff1a;中等 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5]归并排…

用CSS给健身的侣朋友做一个喝水记录本

前言 事情是这样的&#xff0c;由于七八月份的晚上时不时就坐在地摊上开始了喝酒撸串的一系列放肆的长肉肉项目。 这不&#xff0c;前段时间女朋友痛下决心&#xff08;心血来潮&#xff09;地就去报了一个健身的私教班&#xff0c;按照教练给的饮食计划中&#xff0c;其中有一…

卵巢早衰与微生物群,营养治疗新进展

卵巢早衰 卵巢早衰&#xff08;premature ovarian insufficiency&#xff0c;简称POI&#xff09;在生殖系统疾病中位居首位&#xff0c;这些疾病可能会损害多个功能系统&#xff0c;降低生活质量&#xff0c;最终剥夺女性患者的生育能力。 目前的激素替代疗法不能改善受孕或降…

NR PDSCH(七) DL SPS

非动态调度&#xff0c;除了PUSCH configured grant type 1和2的传输&#xff0c;还有PDSCH SPS 传输&#xff0c;两者的流程基本类似&#xff0c;也有些小区别。在实网并没有见过配置DL SPS PDSCH传输的log&#xff0c;但还是按顺序理一遍相关内容。 RRC/MAC 先看下MAC 38.32…

文件上传,还存储在应用服务器?

一般项目开发中都会有文件、图片、视频等文件上传并能够访问的场景。要实现这样的场景&#xff0c;要么把文件存储在应用服务器上&#xff0c;要么搭建文件服务来存储。但是这两种方式也有不少的缺点&#xff0c;增加运维的成本。 因此&#xff0c;追求用户体验的项目可能会考…

Tomcat安装配置全解

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…

数据库分库分表

文章目录为什么要分库分表&#xff1f;数据切分垂直切分水平切分&#xff08;每个表的结构相同&#xff09;范围拆分取模拆分&#xff08;一般为业务主键&#xff09;分库分表带来的问题数据倾斜问题热点问题事务问题聚合查询问题分页问题非分区业务查询分库分表实现或工具hash…

DSP篇--C6701功能调试系列之 UART串口测试

目录 1、原理 2、测试 调试的前期准备可以参考前面的博文&#xff1a;DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 UART串口收发数据存在两种模式&#xff1a;通常的串口模式&#xff08;McBSP in Serial Port Mode&#xff09;和GPIO模式&#xff08;McBS…