欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Spring Web MVC

Spring Web MVC

2025/2/25 8:11:36 来源:https://blog.csdn.net/2401_83177222/article/details/144343794  浏览:    关键词:Spring Web MVC

目录

一.什么是Spring Web MVC ?

二.什么是Spring MVC ? 

       2.1 MVC定义:

    2.2 Spring MVC 主要关注有两个点:

  三.学习Spring MVC

        3.1学习Spring MVC的重点:

3.2 建立连接:

3.3 请求:

3.3.1 传递单/多个参数

3.3.2 传递对象 

3.3.3 传递数组 

3.3.3 传递集合

3.3.4 传递JSON数据

 3.3.5 获取URL中参数@PathVariable

3.3.6上传⽂件@RequestPart

3.3.7 获取Cookie/Session 

3.4响应

3.4.1返回静态界面:

3.4.2 返回数据@ResponseBody 

3.4.3 返回JSON

3.4.4 设置状态码

3.4.5 设置Header (了解) 


一.什么是Spring Web MVC ?

        Spring Web MVC是基于Servlet API构建的原始Web框架(简单来说 Spring Web MVC是一个Web框架)—— 简称:Spring MVC

二.什么是Spring MVC ? 

       2.1 MVC定义:

                    Mvc是 Model View Controller 的缩写,分为三基本部分:(控制器 模型  视图)   

               MVC可以说是一种思想,而Spring实现了这个思想称为Spring MVC

 MVC的设计模式(图一): 

     图1 

    2.2 Spring MVC 主要关注有两个点:

  1.                 MVC
  2.                 Web框架 

         Spring MVC 全称是 Spring Web MVC

         总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架  

 Spring  MVC设计模式(图二

图二 

  三.学习Spring MVC

        3.1学习Spring MVC的重点:

                        如何通过浏览器和用户程序进行交互

        重点主要分为三方面:

  1.   建立连接:将用户 (浏览器)和Java程序连接起来,通过访问地址能调用Spring程序
  2.   请求:Spring程序接收请求,获取参数的功能
  3.   响应:执行完业务逻辑后,把执行后的结果返回给用户,就是响应

3.2 建立连接:

通过 @RequestMapping 来实现URL路由映射, 浏览器连接程序的关键

@RequestMapping 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.util.Arrays;
import java.util.List;@RestController
public class RequestController{@RequestMapping("/r1")public String r1(){return "hello";}
}

⽅法名和路径名称⽆需⼀致 

访问: http://127.0.0.1:8080/r1  可以查看程序返回的数据


import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.util.Arrays;
import java.util.List;@RequestMapping("/calc")
@RestController
public class RequestController{@RequestMapping("/r1")public String r1(){return "hello";}
}

 访问: http://127.0.0.1:8080/calc/r1  可以查看程序返回的数据

@RequsetMapping 即支持Get请求,又支持Post请求(也支持其他请求)

3.3 请求:

        访问不同的路径,就是发送不同的请求, 发送请求时,可能需要传递参数。

        所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收

3.3.1 传递单/多个参数

  @RequestMapping("/r4")public String r4(Integer id ,String name){return "接收参数 id:"+id+"  name: "+name;}@RequestMapping("/r9")public String r9(String name){return "接收参数:"+name;}

无论单个参数还是多个参数 双方名称必须一致

3.3.2 传递对象 

@RequestMapping( "/r3")public String r3(@RequestParam Student student){return "接收参数:"+student;}//@RequestParam 必须传参

3.3.3 传递数组 

Spring MVC可以自动绑定数组参数的赋值

  @RequestMapping("/r2")public String r2(String [] name){return Arrays.toString(name);}

3.3.3 传递集合

跟传递数组基本差不多3.3.4

@RequestMapping("/r6")//@RequestParam 必传参数public String r6(@RequestParam List<String> list){return "接收参数 list::"+list;}

3.3.4 传递JSON数据

    JSON:   JavaScript Object Notation 的缩写

    JSON :本质是字符串,却有自己的风格和语法,使⽤⽂本表⽰⼀个对象或数组的信息

  //RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中    @RequestMapping("/r10")public String r9(@RequestBody Student student){return "接收参数:"+student.toString();}

JSON字符串和JAVA对象互转 :

                 readValue:把JSON字符串转成对象

                 writeValueAsString:把对象转为JSON字符串

public class JsonText {public static void main(String[] args) throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();String json ="{\"id\":10,\"name\":\"niha\",\"age\":5}";//JSON字符串转对象Student student = objectMapper.readValue(json, Student.class);System.out.println(student);//对象转字符串String s =objectMapper.writeValueAsString(student);System.out.println(s);}
}

JSON优点:
1.简单易用:语法简单,易于理解和编写,可以快速地进行数据交换
2.   跨平台支持:JSON可以被多种编程语言解析和生成,可以在不同的平台和语言之间进行数据交换和传输
3.   轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占用带宽较小,可以提高数据传输速度
4.易于扩展:JSON的数据结构灵活,支持嵌套对象和数组等复杂的数据结构,便于扩展和使用
5.安全性:JSON数据格式是一种纯文本格式,不包含可执行代码,不会执行恶意代码,因此具有较高的安全性 

 3.3.5 获取URL中参数@PathVariable


1.如果方法参数名称和需要绑定的URL中的变量名称一致时,可以简写,不用给@PathVariable的      属性赋值
2.如果方法参数名称和需要绑定的URL中的变量名称不一致时,需要@PathVariable的属性value赋值,
 

3.3.6上传⽂件@RequestPart

   /** 上传文件* @RequestParam("File")重命名* */@RequestMapping("/r8")public String r8(@RequestPart("File") MultipartFile jpgFile){String originalFilename = jpgFile.getOriginalFilename();return "接收到文件名称::"+originalFilename;}

3.3.7 获取Cookie/Session 

        首先要知道HTTP属于  "无状态"  协议

        无状态的含义指:HTTP协议下的客户端和服务器的这次连接,与下次通信没有直接连接


HttpServletRequest , HttpServletResponse 是Servlet提供的两个类,是SpringMVC方法的内置对象.需要时直接在方法中添加声明即可.


HttpServletRequest 对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息.


HttpServletResponse 对象代表服务器的响应.HTTP响应的信息都在这个对象中,比如向客户
端发送的数据,响应头,状态码等.通过这个对象提供的方法,可以获得服务器响应的所有内容 

获取Session: 

//设置session@RequestMapping("/setSess")public String setSession(HttpServletRequest  request ){//从cookie中获取SessionId,根据sessionId获取session对象,如果没有获取到,会创建一个session对象HttpSession session = request.getSession();session.setAttribute("name","zhangsan");return "设置session成功";}/*
获取session方法一
* */@RequestMapping("/getSess")public String getSession(HttpServletRequest  request ){HttpSession session = request.getSession();String name =(String) session.getAttribute("name");return "从session获取name:"+name;}/*获取session方法二HttpSession:封装获取sesionId方法* */@RequestMapping("/getSess2")public String getSession2(HttpSession session ){String name =(String) session.getAttribute("name");return "从session获取name:"+name;}/*获取session方法三注解@SessionAttribute:把获取sessionId和session对象全部封装在一起了* */@RequestMapping("/getSess3")public String getSession3(@SessionAttribute String name){return "从session获取name:"+name;}

  

获取Cookie :

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;import java.util.Arrays;@RestController
@RequestMapping("/session")
public class SessionController {@RequestMapping("/getCk")/*获取cookie方法一* */public String getCookie(HttpServletRequest request, HttpServletResponse response){String name = request.getParameter("name");Cookie[] cookies = request.getCookies();if(cookies != null){Arrays.stream(cookies).forEach(ck -> System.out.println(ck.getName()+": "+ck.getValue()));}return "获取cookie";}@RequestMapping("/getCk2")/*获取cookie方法二* */public String getCookie(@CookieValue("cookie") String cookie){return "获取cookie:  "+cookie;}
}

获取header:

  /** 获取header信息* */@RequestMapping("/getheader")public  String getHeader(@RequestHeader("User-Agent") String UserAgent){return "从header中获取信息:"+UserAgent;}

3.4响应

在我们前面的代码例子中,都已经设置了响应数据,Http响应结果可以是数据,也可以是静态页面,也可以针对响应设置状态码,Header信息等

3.4.1返回静态界面:

创建前端⻚⾯calc.html(注意路径)

  • @Controlller:返回视图
  • @ResponseBody:返回数据
  • @RestController @Controlller  + @ResponseBody

随着前后端分离,后端不需要处理页面,只需要返回页面所需要的数据 

想要返回视图 ,我们需要把@Restcontroller改为@Controller

3.4.2 返回数据@ResponseBody 

3.4.3 返回JSON

/** 返回JSON* */@RequestMapping("/returnJson")@ResponseBodypublic HashMap<String,String> returnJosn(){HashMap<String, String> map = new HashMap<>();map.put("Java", "Java Value");map.put("MySQL", "MySQL Value");map.put("Redis", "Redis Value");return map;}

3.4.4 设置状态码

SpringMVC会根据我们方法的返回结果自动设置响应状态码,程序员也可以手动指定状态码
通过SpringMVC的内置对象HttpServletResponse提供的方法来进行设置

  /** 设置状态码* */@RequestMapping(value = "/setStatus")@ResponseBodypublic String setStatus(HttpServletResponse response){response.setStatus(401);return "设置状态码成功 ";}

 

3.4.5 设置Header (了解) 

Http响应报头也会向客户端传递一些附加信息,比如服务程序的名称,请求的资源已移动到新地址等,如:Content-Type, Local等.
这些信息通过 @RequestMapping 注解的属性来实现

1️⃣.设置Content-Type
 @RequestMapping(value = "/returnJson2",produces = "application/json")@ResponseBodypublic String returnJson2() {return "{\"success\":true}";}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词