当前位置: 首页 > news >正文

Java SpringMVC(一) --- 建立连接,请求,获取Cookie,Session,Header

文章目录

  • SpringMVC
    • MVC
    • 学习Spring MVC
      • 建立连接
      • 请求
      • 总结
      • JSON传递数据
      • 获取url中的参数
      • 上传文件@RequestPart
    • Cookie和Session
      • 获取Cookie
      • 获取Session
      • 获取Header

在这里插入图片描述

SpringMVC

  1. Spring Web MVC就是Spring全家桶下的一个模块,现在通常把Spring Web MVC叫做Spring MVC
  2. Spring MVC:是一个 Web 框架
  3. Spring Boot:是一个 快速开发框架,它自动集成了 Spring MVC

Spring MVC 就是一个web的框架,用来做web的功能

MVC

  1. 什么是MVC ??
    MVC把一个项目分为了三个部分
    View就相当于前台,Controller就相当于团队,团队就指派某个人进行处理,Model就相当于某个人

下面是MVC的图
在这里插入图片描述
2. MVC是一种思想,Spring进行了实现,所以称为Spring MVC

下面是Spring MVC的图
在这里插入图片描述
3. SpringBoot是创建SpringMVC项目的一种方式而已
4. 当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以也就没有view层

view层又有了一层解释,之前返回的是视图,现在返回的是视图所需要的数据

下面返回的就可以是视图所要的数据:
在这里插入图片描述

学习Spring MVC

  1. 建立连接(客户端和服务器)
  2. 请求
  3. 响应

建立连接

  1. 通过 @RequestMapping 建立路由映射,通过tomcat找到服务器的地址
    在这里插入图片描述
  2. @RequestMapping 可以修饰方法,也可以修饰类
    访问地址:类的路径 + 方法路径

下图中访问的路径就是:127.0.0.1:8080/hello/sayhi
在这里插入图片描述
注意**:路径前面的 / 可以省略,比如 /hello,可以写成hello,建议统一都加上**
前面的 / 加上,后面的 / 不加上

@RequestMapping用的是get请求,还是post请求??
@RequestMapping默认支持所有的请求,也可以进行显示请求的方式

在这里插入图片描述

请求

  1. 请求,主要就是学习如何传参
    1.传递单个参数
    2.多个参数
    3.对象
    4.数组/集合

开发中,建议加上类路径
1.避免重复的方法
2.方便查找代码(在某个路径下就可以找到了)
在这里插入图片描述

  1. 传递单个参数
    需要名称一样
    底层逻辑:从请求的参数中,获取参数名为name的值,并给name赋值
    在这里插入图片描述
  2. 传递多个参数
    参数的类型在请求中位置不要求的,位置随便在哪都行
    在这里插入图片描述
    在这里插入图片描述
    如果参数中有基本类型,必须要传值,不传会报错

在这里插入图片描述
在这里插入图片描述

  1. 传递对象
    在这里插入图片描述
  2. 后端参数重命名
    后端对前端的参数进行了重命名
    在这里插入图片描述
    使用了required = false就不会出现报错
    在这里插入图片描述
    在这里插入图片描述
package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/m1")public String m1(String name){return "接收到的参数name: " + name;}// 方法名和路径名不要求一样@RequestMapping("/m2")public String m2(String name,Integer age){return "接收到的参数name: " + name + ",age: " + age;}// 传递一个对象@RequestMapping("/m3")public String m2(Person person){return "接收到的参数person: " + person.toString();}@RequestMapping("/m4")public String m4(@RequestParam(value = "name",required = false) String usename){return "接收到的参数name: " + usename;}
}

总结

对上面内容的一个总结:

在这里插入图片描述
6. 传递数组
当我们的请求,同一个参数有多个时,浏览器就会帮我们给封装成一个数组

比如下面两种传参的方式:
在这里插入图片描述

@RequestMapping("/m5")public String m5(String[] arrayParam){return "接收到的参数arrayParam: " + Arrays.toString(arrayParam) + ",长度为: " + arrayParam.length;}
  1. 传递集合
    @RequestParam让上传的参数变为不是非必须上传的,不上传的时候,值为null
    在这里插入图片描述

在这里插入图片描述

@RequestMapping("/m6")public String m5(@RequestParam List<String> listParam){return "接收到的参数arrayList: " + listParam + ",长度为: " + listParam.size();}
  1. 状态码都是后端去自定义的吗?
    不是的,状态码分为http状态码(不是后端自定义的),业务状态码(是后端自定义的)
    在这里插入图片描述

JSON传递数据

虽然介绍了这些传递参数的方法,但是我们工作中并不使用这些方法,而是使用JSON传递数据

  1. 接口指的是API
    就是应用程序提供了哪些服务给我们,接口如果对应到代码上,通常是指方法

  2. JSON本质上是一个字符串,表示对象的字符串(JSON字符串)

  3. 传递JSON数据,需要使用@RequestBody
    把整个正文传给这个对象
    @RequestBody获取请求正文中的数据
    在这里插入图片描述
    在这里插入图片描述

// 通过json请求进行传递@RequestMapping("/m7")public String m7(@RequestBody Person person){return "接收到的参数person: " + person.toString();}

获取url中的参数

@PathVariable获取url中的参数时使用

  1. 可以获取url中的一个参数
    在这里插入图片描述
  2. 可以获取url中的多个参数,但是要注意顺序要一致
    在这里插入图片描述
  3. 可以对参数进行重命名,但是路径上的参数的名字和下面括号中参数的名字要一致
    在这里插入图片描述
 @RequestMapping("/m8/{useId}/{name}")public String m8(@PathVariable Integer useId,@PathVariable("name") String usename){return "useId: " + useId + "name: " + usename;}

上传文件@RequestPart

  1. 上传图片

在这里插入图片描述

在这里插入图片描述

  1. 还可以上传图片到本机中的指定路径或者是指定的文件服务器中
// 上传文件@RequestMapping("/m9")public String m9(@RequestPart MultipartFile file) throws IOException {// 打印文件名字System.out.println(file.getOriginalFilename());// 把上传的图片进行保存到本地电脑或者是专门的文件服务器中file.transferTo(new File("E:/文件夹/" + file.getOriginalFilename()));return "success";}

Cookie和Session

  1. Http是无状态的,http没有记忆功能,现在请求和过一会请求,同样的请求参数,得到的结果(这个结果是指处理逻辑是一样的,而不是指数据是一样的)是一样的
  2. Cookie 客户端机制,比如存储学生证中的id身份信息
    Session 服务端机制

在这里插入图片描述

获取Cookie

  1. 使用servlet的方式获取cookie,可以获取全部的cookie
// 获取Cookie@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request){Cookie[] cookies = request.getCookies();
//        for(Cookie cookie : cookies){
//            System.out.println("name: " + cookie.getName() + "Value: " + cookie.getValue());
//        }// lambda的写法if(cookies != null) {Arrays.stream(cookies).forEach(cookie -> {System.out.println("name: " + cookie.getName() + "Value: " + cookie.getValue());});}return "获取Cookie的值成功";}

在这里插入图片描述

在这里插入图片描述
2. 使用Spring的方式获取Cookie(使用注解的方式),只能一个一个cookie去拿

 @RequestMapping("/getCookie")public String getCookie(@CookieValue String abc){return "cookie的值为: " + abc;}

在这里插入图片描述
也可以传多个注解的Cookie参数

在这里插入图片描述

获取Session

  1. 使用Servlet的方式获取Session

在这里插入图片描述

// 构造一个Session对象@RequestMapping("/setSession")public String setSesion(HttpServletRequest request){HttpSession session = request.getSession();session.setAttribute("usename","zhangsan");return "success";}// 获取Session@RequestMapping("/getSession")public String getSession(HttpServletRequest request){// 为true就是没有session,也会创建一个session对象// 为false就是没有session,不会创建一个session对象HttpSession session = request.getSession(false);if(session != null){String usename = (String)session.getAttribute("usename");return "登录用户: " + usename;}return "session为空";}

在这里插入图片描述

  1. 使用Spring的方式获取Session
    session是存在服务器的内存中的,每次进行刷新,session之前设置的值都会清空
@RequestMapping("/getSession2")public String getSession2(@SessionAttribute(required = false) String usename){// 在@SessionAttribute下,usename为必传的return "usename: " + usename;}

在这里插入图片描述
3. 第三种获取Session的方式
HttpSession是内置的接口

@RequestMapping("/getSession3")public String getSession3(HttpSession session){String usename = (String) session.getAttribute("usename");return "usename: " + usename;}

在这里插入图片描述

获取Header

  1. Servlet提供的获取Header的方式
// 获取Header@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request){String useAgent = request.getHeader("User_Agent");return "User_Agent " + useAgent;}

在这里插入图片描述

  1. Spring提供的获取Header的方式
@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User_Agent") String useAgent){return "User_Agent " + useAgent;}

在这里插入图片描述

学会看错误日志:
在这里插入图片描述
获取 Header
在这里插入图片描述

http://www.dtcms.com/a/457171.html

相关文章:

  • 【传奇开心果系列】基于Flet框架实现的允许加载本地图片的圆形头像自定义组件模板特色和实现原理深度解析
  • 大模型——ChatGPT 变身 App Store,对话即应用的时代到了
  • leetcode 70.爬楼梯
  • 【LeetCode 热题 100】No.283—— 移动零
  • 旅游景点网站策划书香河住房与建设局网站
  • jvm双亲委派的含义
  • 【linux内核驱动day06-I2C】
  • Photoshop - Photoshop 工具栏(10)透视裁剪工具
  • 一种基于 RK3568+AI 的国产化充电桩安全智能交互终端的设计与实现,终端支持各种复杂的交互功能和实时数据处理需求
  • SSM动漫衍生品交易平台z25so(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Canny边缘检测算法详解
  • 不止是 Python:聊聊 Node.js/Puppeteer 在爬虫领域的应用
  • MCP协议深度解析:AI时代的通用连接器
  • 首钢建设网站网站源码程序修改
  • Doris专题11- 数据导入概览
  • 厦门优化网站排名合肥网站改版
  • 详解Spring Security+OAuth2.0 和 sa-token
  • 临沂企业建站程序德国网站的后缀名
  • Day14_内核编译安装
  • 全面SEO优化指南:网站运营与前端开发的协同策略
  • 网站整站优化公司赣州平面设计公司
  • DAY03:【DL 第一弹】神经网络
  • 2018年下半年试题四:论NoSQL数据库技术及其应用
  • 如何检查网站死链网站建设技术咨询协议
  • 【MATLAB技巧】contour|等高线图绘制,使用示例和使用技巧
  • matlab计算算法的运行时间
  • 有人情味的网站北京大数据公司排行
  • 时间箭头 量子信息的不可逆扩散
  • iPhone 17 Pro Max 的影像升级全解:从长焦、前置聊到 ProRes RAW
  • 阿里巴巴国际站费用淘宝装修做代码的网站