(Java)SpringMVC学习笔记(二)

前言

继续学习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知识点稍微新一些且视频不包含字幕,杨老师也全程无尿点,所以哪怕原倍速,也要聚起精神来学习~

猜你喜欢

转载自blog.csdn.net/lion_no_back/article/details/128308852