(Java)SpringMVC学习笔记(二)

news/2024/2/28 17:21:14

前言

继续学习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.xsdhttp://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.ppmy.cn/news/3892.html

相关文章

软件测试基础理论体系学习10-什么是本地化测试?本地化测试有哪些问题?本地化测试的重点是什么?

10-什么是本地化测试&#xff1f;本地化测试有哪些问题&#xff1f;本地化测试的重点是什么&#xff1f;1 本地化测试概述1.1软件本地化概念1.2 软件本地化工程1.3 软件本地化的重要性2 本地化测试翻译问题2.1 软件本地化不等于软件翻译2.2 软件本地化语言翻译技术2.2.1 翻译记…

简单理解HTML区块_HTML学习第七篇区块元素和内联元素

简单理解HTML区块_区块元素和内联元素HTML篇_第七章、区块一、区块元素和内联元素1.1块级元素1.2内联元素二、<div>元素三、<span>元素HTML篇_第七章、区块 一、区块元素和内联元素 HTML元素可以通过<div>和<span>元素组合起来&#xff0c;大多数 HT…

[附源码]Node.js计算机毕业设计高校学生宿舍管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【Java开发】 Spring 11 :Spring Boot 配置 Web 运行参数并部署至服务器

Spring Boot 项目开发结束后的工作便是运维&#xff0c;简单来说需要配置 Web 运行参数和项目部署两大工作&#xff0c;本文将尽可能详细地给大家讲全&#xff01; 目录 1 定制 Web 容器运行参数 1.1 运行参数介绍 1.2 项目搭建 ① 通过 IDEA Spring Initializr 创建项目 …

Json字符串转成对象

Json字符串转成对象 Hello吖&#x1f60a;&#xff0c;我是孤音&#xff08;一个你理解不了的程序猿&#xff09;&#xff0c;今天来分享一个小技巧&#xff0c;能够大大滴提高效率额 问题&#x1f635; 接收到一串JSON格式的字符串&#xff0c;需要获取其中某些字段的值 思路…

Python——字典

什么是字典&#xff1f; 有时候我们需要存储一组相关党得数据的时候&#xff0c;比如要存储一个人的信息&#xff0c;那么有user_name, age, birthday 等&#xff0c;如果这些信息都存储在列表中&#xff0c;比如[ user_name , age , birthday] 那么用起来可能不是很方便。比较…

功能测试进阶自动化测试,一个女测试工的坎坷之路

绝大多数测试工程师都是从功能测试做起的&#xff0c;工作忙忙碌碌&#xff0c;每天在各种业务需求学习和点点中度过&#xff0c;过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展&#xff0c;从业人员能力的整体进步&#xff0c;软件测试需要具备的能力要…

学习->C++篇十七:C++的类型转换和IO流

目录 一.类型转换 1.C语言中的类型转换 2.C中的类型转换 二.IO流 1. C语言的输入与输出 2. 流是什么 3. stringstream 一.类型转换 1.C语言中的类型转换 &#xff08;1&#xff09;隐式类型转换&#xff0c;编译阶段自动进行&#xff0c;不能转换就编译报错。&#xff…

【C语言数据结构(基础版)】第三站:链表(二)

目录 一、单链表的缺陷以及双向链表的引入 1.单链表的缺陷 2.双向链表的引入 3.八大链表结构 &#xff08;1&#xff09;单向和双向 &#xff08;2&#xff09;带头和不带头 &#xff08;3&#xff09;循环和不循环 &#xff08;4&#xff09;八种链表结构 二、带头双向…

对 CSS 工程化的理解

CSS 工程化是为了解决以下问题&#xff1a; 宏观设计&#xff1a;CSS 代码如何组织、如何拆分、模块结构怎样设计&#xff1f;编码优化&#xff1a;怎样写出更好的 CSS&#xff1f;构建&#xff1a;如何处理我的 CSS&#xff0c;才能让它的打包结果最优&#xff1f;可维护性&a…

【1785. 构成特定和需要添加的最少元素】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数…

读书笔记(四)——12.14-12.16

文章目录一、曾国藩家书1.1 读书必须有恒心1.2 读书不可太疏忽一、曾国藩家书 1.1 读书必须有恒心 在此篇&#xff0c;有言学问之道无穷&#xff0c;而总以有恒为主。理解就是&#xff0c;幸好学问是没有穷尽的&#xff0c;我们可以每天以滴水石穿的有恒&#xff0c;来学习广…

selenium操作元素时的实用方法

1.判断元素的属性if i.get_attribute(‘type’) ‘checkbox’ 2.获取当前窗口的坐标 driver.get_window_position 获取当前窗口的长宽 driver.get_window_size 获取元素坐标 driver.find_element_by_xpath(“//*[id’tablechart’]/tbody/tr[14]/td[9]”).location 3.提交…

Docker入门之docker-compose

一&#xff0c;Docker-compose简介 1&#xff0c;Docker-compose简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c…

STM32F103xx随记

关于STM32F103xx单片机的一些零碎知识&#xff0c;随时整理下来&#xff0c;方便查阅。 STM32F103xx随记STM32 & STM8 命名STM32F103xx引脚定义表引脚信息芯片手册地址大佬那里抄来的图STM32F103xxADC笔记STM32 & STM8 命名 STM32F103xx引脚定义表 今天在给新的模块添…

前端基础(九)_CSS的三大特征

CSS的三大特征 1、层叠性 1.样式冲突&#xff0c;遵循就近原则 2.样式不冲突&#xff0c;不会层叠&#xff0c;会叠加 1.1.样式冲突&#xff0c;遵循就近原则例子&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UT…

读写锁的学习与实验

目录 目录 1&#xff0c;场景 2&#xff0c;接口 3&#xff0c;场景模拟 1&#xff0c;场景 有一种场景&#xff0c;读者多&#xff0c;写者少&#xff0c;绝大多数的情况下我们都是在进行读取而不修改&#xff0c;只有少数的情况下我们才会修改。 场景一&#xff1a;比如…

【水果识别】苹果质量检测及分级系统(带面板)【含GUI Matlab源码 1613期】

⛄一、简介 1 案例背景 目前&#xff0c;苹果的分级主要靠人工完成&#xff0c;该方法存在主观误差大、效率低和苹果易造成二次损伤等问题。随着机器视觉技术的快速发展&#xff0c; 图像处理在水果质量检测方面也取得了深入进展。 试验拟通过采集视野内苹果图&#xff0c; 综…

基于java+springmvc+mybatis+vue+mysql的学生竞赛模拟系统

项目介绍 本系统采用java语言开发&#xff0c;后端采用springboot框架&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。 前台&#xff1a; 首页、公交信息、论坛交流、试卷、校园资讯、个人中心、后台管理 后台&#xff1a; 首页、个人中心、用户管理…

【C语言进阶】不会处理字符串?一万三千五百字包会保姆级教程

目录 &#x1f618;前言&#x1f618;&#xff1a; 一、字符串处理函数介绍&#x1f92f;&#xff1a; 1.strlen 函数&#x1f94e;&#xff1a; 2.strcpy 函数⚾&#xff1a; 3.strcat 函数&#x1f3c0;&#xff1a; 4.strcmp 函数&#x1f3c8;&#xff1a; 5.strncpy 函数…
最新文章