SpringMVC的全称是Spring Web MVC,是基于Servlet API构建的一个WEB框架。MVC则是Model View Controller的缩写,属于一种软件架构的模式,即将一个软件系统分成了模型、视图、控制器三个部分。
用户发送一个http请求到控制器(应用程序中处理用户交互的部分),控制器将处理之后的请求信息发送到模型部分(处理应用程序数据逻辑的部分),之后由模型返回相应的响应信息到控制器,控制器再将这些信息数据发送到视图部分(处理数据显示的部分),最后返回http响应到用户端,即使用MVC模式完成了一次数据访问。
SpringMVC与MVC之间是一种相辅相成的关系,即MVC是一种思想,而SpringMVC是对MVC思想的具体实现。
关于SpringMVC,主要需要关注的可以大致分为三个部分:连接浏览器访问和java程序、获取用户访问时带有的参数、返回程序的执行结果给用户。
Spring MVC项目的创建是建立在Spring Boot创建的基础上再添加一个Web框架完成的。
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller /* 将当前类加载并注册到Spring */
@RequestMapping("/user")
public class UserController {
@RequestMapping("/hello")
@ResponseBody /*返回非静态页面*/
public String hello(){
return "hello~";
}
}
也可以使用注解@RestController来等价替换@Controller+@ResponseBody,可以达到同样的效果;
SpringMVC中使用注解@RequestMapping来实现URL路由的映射,连接浏览器和程序。该注解可以修饰类,也可以修饰方法,访问时只需要地址加上类及方法的路由即可;
@RequestMapping支持get请求和post请求,同时也可以显式地指定只能接收某种请求;
可以使用postman来访问,查看结果:
显式地指定请求的方法:
此时只能发送post 请求:
发送其他类型的请求都会请求失败:
使用该注解时,只支持get请求:
使用该注解时,只支持post请求:
package com.example.demo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.http.HttpResponse;
@RestController
@RequestMapping("/web")
public class WebController {
/*
* Servlet获取单个参数的方式
* */
@RequestMapping("/getname1")
public Object getName1(HttpServletRequest request, HttpServletResponse response){
return request.getParameter("name1");
}
/*
* SpringMVC获取单个参数
* */
@RequestMapping("/getname")
public Object getName(String name){
return "name= "+name;
}
}
方法中传入的参数名必须与url中访问的参数名保持一致,区分大小写;
相比之下,Spring MVC获取参数的方式相对要更加简单,但实际是在Spring MVC中默认内置了HttpServletRequest、HttpServletResponse 两个参数;
传递多个参数时,URL中参数的顺序不会影响访问的结果;
首先需要创建一个对象:
表单参数的传递与多个参数的传递相似,需要格外注意的是,后端的路由设置必须与前端保持一致,同时前后端的参数名也必须保持一致;
需要使用到注解@RequestBody
使用postman来构造json对象,并进行访问:
可以使用postman来进行验证:
使用浏览器验证时,需要通过开发者工具来设置Cookie的值:
注解@CookieValue中的值代表的是前端传递的Cookie名称;
注解@SessionAttribute中的值代表前端传递的Session参数的名称,此处将required值设置为false是使得验证代码是不出现报错的结果;
使用注解 @PathVariable可以获取到URL中的参数,但实际访问的URL必须与后端设置的路由格式一致,才可以正常访问;
前后端的数据交互影响着程序的正确运行,若前后端传递的参数名不一致,会导致数据访问失败,因此在一些情况下需要进行参数的重命名;
注解中的值即重命名之后的参数名t,同时将该参数名下的值赋值给time,此时后端只能识别重命名之后的参数名;