首页 > 其他分享 >Spring MVC

Spring MVC

时间:2023-10-23 20:45:34浏览次数:31  
标签:RequestMapping Spring value MVC 请求 first

一、Spring MVC子父容器问题

因为Spring MVC属于Spring的子框架,所以Spring MVC中可以使用Spring框架的全部内容。

Spring 官方为Spring MVC专门定义了一个容器,这个容器里面放Spring MVC中全部Bean,且这个容器属于Spring容器的子容器。

有这样的一个规定:Spring MVC子容器可以调用Spring 父容器的全部内容。但是Spring父容器不能调用Spring MVC子容器内容。

 二、Spring MVC环境搭建

Spring MVC 在平时随意可以当成一个独立框架看待,但其本质只是Spring Framework中的spring-webmvc.jar文件,这个jar文件依赖了spring web模块和Spring框架核心功能的5个依赖。所以在只使用Spring MVC框架时需要导入spring-webmvc依赖即可。

引入依赖

    <dependencies>
        <!-- 依赖了Spring框架核心功能的5个依赖以及Spring整合Web的依赖spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.16</version>
        </dependency>
    </dependencies>

创建springmvc配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 扫描控制器类,千万不要把service等扫描进来,也千万不要在Spring配置文件扫描控制器类所在包 -->
    <context:component-scan base-package="com.bjsxt.controller"></context:component-scan>
    <!-- 让Spring MVC的注解生效 不要引错xsd-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>
springmvc.xml

web.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">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- 参数名称必须叫做:contextConfigLocation。单词和大小写错误都导致配置文件无法正确加载 -->
            <param-name>contextConfigLocation</param-name>
            <!-- springmvc.xml 名称自定义,只要和后面创建的文件名称对应就可以了。 -->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- Tomcat启动立即加载Servlet,而不是等到访问Servlet才去实例化DispatcherServlet -->
        <!-- 配置上的效果:Tomcat启动立即加载Spring MVC框架的配置文件-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- /表示除了.jsp结尾的uri,其他的uri都会触发DispatcherServlet。此处不要写成 /* -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
web.xml

三、@RequestMapping注解

@RequestMapping注解可以写在控制器类上,也可以写在控制单元方法上。

1. 所有属性

 2. value、path 属性

value和path都是定义映射的路径。

单个路径:

@RequestMapping(path="/first")

多个路径:

@RequestMapping(path={"/first4","first5"})

当只有value属性时,可以省略value 但path不能省略。

3. name 属性

name:给控制单元定义一个名称。可以理解name是控制单元的注释。

@RequestMapping(value = "/testName",name = "测试下name属性")

4. method 属性

method属性类型是RequestMethod[],RequestMethod是枚举类型,支持HTTP协议中绝大多数请求类型。

 当设置了method属性后,表示只有指定类型请求方式才能访问这个控制单元方法,其他的请求方式访问时,响应会出现405状态码。

// 请求方式只能是DELETE和POST类型。
@RequestMapping(value = "/testMethod",method = {RequestMethod.DELETE,RequestMethod.POST})

4.1 简写

Spring MVC 框架针对不同请求方式提供了5个专门请求方式的注解

​    @PostMapping("/first") 

​        等效于 @RequestMapping(value = "/first",method = RequestMethod.POST)

​    @GetMapping("/first")

​        等效于 @RequestMapping(value = "/first",method = RequestMethod.GET)

​    @DeleteMapping("/first")

​        等效于 @RequestMapping(value = "/first",method = RequestMethod.DELETE)

​    @PutMapping("/first")

​        等效于 @RequestMapping(value = "/first",method = RequestMethod.PUT)

​    @PatchMapping("/first")

​        等效于 @RequestMapping(value = "/first",method = RequestMethod.PATCH)

5. params 属性

params属性类型是String[],表示请求中必须包含指定名称的请求参数。

@RequestMapping(value="/testParam",params = {"name"})

表示请求中必须包含参数名为name的参数

如果请求中没有包含指定类型参数,响应会出现400状态码。并且明确提示在实际的请求参数中没有明确设置name参数。

6. headers 属性

headers属性类型是String[],表示请求头中必须包含指定的请求头参数。

@RequestMapping(value="/testHeaders",headers = "Accept")

如果请求头中没有指定的请求头参数,浏览器会报404。

7. consumes 属性

consumers表示处理请求内容(Content-Type)的类型,平时多不设置,由Spring MVC自动判断。

8. produces 属性

produces类型是String[],作用是设置@ResponseBody注解的响应内容类型。且仅当请求头中Accept中包含的值才生效。

@RequestMapping(value="/testProduces",produces = "text/html;charset=utf-8")
@ResponseBody
public String testProduces() throws IOException {
    return "这是中文";
}

注意:

  produces只对@ResponseBody注解生效,对于代码中响应输出流对象PrintWriter是无效的。

四、映射路径

1. 多级路径

可以写多级路径,但要注意返回值加 ‘/ ’ 与不加的区别

加了/ :/代表项目根目录,也就是webapp目录的根目录,就会从项目的根目录找。

不加:相当于./ 即当前目录。  

2. Ant 风格

在Spring MVC中支持Ant风格的映射路径写法。所谓的Ant风格就是支持三种特殊的符号。

符号解释
? 匹配任意单字符
* 匹配0或者任意数量的字符
** 匹配0或者更多数量的目录

解释说明:

使用Ant的特殊符号时,表示模糊匹配。可能出现客户端发送过来的URL能匹配上多个映射路径,这时的优先级为:

固定值 > ? > *> /**

五、Spring MVC中的转发和重定向

1. 转发和重定向区别

(1)转发为一次请求,tomcat内部跳转。重定向为多次请求,不是tomcat内部跳转。

(2)转发是一次请求,无论服务器内部转发多少次,请求对象都不变。所以转发可以共享请求域的值。同时对于客户端浏览器URL是不变的。

重定向后需要客户端重新发起请求,和重定向之前不是一个请求。所以重定向后不能获取到之前设置在请求域的值。同时客户端浏览器URL是改变的。

(3)转发只能跳转到当前项目内部资源。重定向可以跳转到外部资源。例如:从自己的项目中跳转到百度应该使用重定向。

(4)转发时资源路径如果是绝对路径,第一个 / 表示当前项目根目录。

重定向时资源路径时绝对路径,第一个 / 表示 Tomcat 的 webapps目录,即:当前项目的上层目录。

2. SpringMVC中的转发和重定向

在Spring MVC框架中,默认情况下都使用转发进行寻找资源。

@RequestMapping("/test/test2")
public String test2(){
    return "/first.jsp";
}

在资源路径前面添加forward: 表示转发。因为写不写forward:都是转发

所有上面代码等同于:

@RequestMapping("/test/test2")
public String test2(){
    return "forward:/first.jsp";
}

如果要使用

 

标签:RequestMapping,Spring,value,MVC,请求,first
From: https://www.cnblogs.com/giaogiaoyang/p/17783419.html

相关文章

  • MTV与MVC模型
    MTV#MTV:Django号称是MTV模型M:modelsT:templatesV:views MVC#MVC:Django本质也是MVC模型M:modelsV:viewsC:controller#vue框架:MVVM模型 ......
  • SpringBoot上传图片到指定目录并回显
    一、概述案例:1.利用SpringBoot写一个后台2.接收前端传递过来的图片并保存到服务器。3.前端可以通过url访问上传过的图片步骤:1.写一个FileController专门用来接收前端提交的图片文件,并把图片保存到服务器的指定位置2.配置W......
  • SpringBoot-自动配置原理
    导入start就会导入autoconfigure包autoconfigure包下面的META-INF/spring/org.springframe.boot.autoconfigure.AutoConfigation.imports文件存放了所有的xxxAutoConfigation自动配置类@EnableAutoConfigation注解,会把上面文件中的所有的自动配置类都导入进来,按需要加载。xxxA......
  • Spring Data JPA : 查-分页排序
    1.分页查询 pageNumber是从0开始,pageNumber=0,pageSize=3就是获取前3条参考创建分页Pageable变量创建Pageable对象,再查询importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;import......
  • spring data jpa 使用原生sql查询数据库 原生sql中有in关键字 该如何传参?直接传List集
    springdatajpa使用原生sql查询数据库原生sql中有in关键字该如何传参?直接传List集合就能找到数据,解析List集合交给springdatajpa框架去做遇到问题?第一次写的时候in关键字后面传的是将List集合转化为一个这样的字符串,"'123','23','23'" @Query(nativeQuery=true,......
  • Spring Data JPA : 查-条件化查询Specification
    条件化查询 用查询条件创建Specification对象参考SpringDataJPASpecification查询使用Criteria查询Criteria查询是面向对象查询,root就是一个对象,root.get("name")就是name属性。可以级联获取属性每一个查询条件创建一个Specification对象,如果有多个查询条件,就把多个Spec......
  • Springboot定时任务处理
    详细讲解SpringBoot利用注解创建静态定时任务,利用接口创建动态定时任务,利用@EnableAsync和@Async创建多线程定时任务阅读目录:序言一、静态:基于注解二、动态:基于接口三、多线程定时任务 阅读正文:回到顶部序言使用SpringBoot创建定时任务非常简单,目前主要有以下三......
  • Spring Cloud OpenFeign系列:简介和使用
    目录一、简介二、使用1、创建父工程2、创建order-service模块3、创建order-client模块三、效果四、配置说明1、超时配置全局超时配置局部超时配置2、Gzip压缩设置3、所有配置五、负载均衡五、对比Feign一、简介官网:https://spring.io/projects/spring-cloud-openfeign文档:https......
  • springboot整合swagger3.0
    pom文件中导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency>application.yml中写入配置swagger:enable:tr......
  • springboot+vue学习(2)
    1、ref :为子组件指定一个索引ID,给元素或者组件注册引用信息。refs是一个对象,包含所有的ref组件。<divid="parent"><user-profileref="profile"></user-profile>(子组件)</div>varparent=newVue({el:'#parent'})//访问子组件varchild=parent.$ref......