Java SpringMVC(一) --- 建立连接,请求,获取Cookie,Session,Header
对上面内容的一个总结:6. 传递数组当我们的请求,同一个参数有多个时,浏览器就会帮我们给封装成一个数组return "接收到的参数arrayParam: " + Arrays.toString(arrayParam) + ",长度为: " + arrayParam.length;传递集合@RequestParam让上传的参数变为不是非必须上传的,不上传的时候,值为null。
文章目录
SpringMVC
- Spring Web MVC就是Spring全家桶下的一个模块,现在通常把Spring Web MVC叫做Spring MVC
- Spring MVC:是一个 Web 框架
- Spring Boot:是一个 快速开发框架,它自动集成了 Spring MVC
Spring MVC 就是一个web的框架,用来做web的功能
MVC
- 什么是MVC ??
MVC把一个项目分为了三个部分
View就相当于前台,Controller就相当于团队,团队就指派某个人进行处理,Model就相当于某个人
下面是MVC的图
2. MVC是一种思想,Spring进行了实现,所以称为Spring MVC
下面是Spring MVC的图
3. SpringBoot是创建SpringMVC项目的一种方式而已
4. 当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以也就没有view层
view层又有了一层解释,之前返回的是视图,现在返回的是视图所需要的数据
下面返回的就可以是视图所要的数据:
学习Spring MVC
- 建立连接(客户端和服务器)
- 请求
- 响应
建立连接
- 通过 @RequestMapping 建立路由映射,通过tomcat找到服务器的地址

- @RequestMapping 可以修饰方法,也可以修饰类
访问地址:类的路径 + 方法路径
下图中访问的路径就是:127.0.0.1:8080/hello/sayhi
注意**:路径前面的 / 可以省略,比如 /hello,可以写成hello,建议统一都加上**
前面的 / 加上,后面的 / 不加上
@RequestMapping用的是get请求,还是post请求??
@RequestMapping默认支持所有的请求,也可以进行显示请求的方式

请求
- 请求,主要就是学习如何传参
1.传递单个参数
2.多个参数
3.对象
4.数组/集合
开发中,建议加上类路径
1.避免重复的方法
2.方便查找代码(在某个路径下就可以找到了)
- 传递单个参数
需要名称一样
底层逻辑:从请求的参数中,获取参数名为name的值,并给name赋值
- 传递多个参数
参数的类型在请求中位置不要求的,位置随便在哪都行

如果参数中有基本类型,必须要传值,不传会报错


- 传递对象

- 后端参数重命名
后端对前端的参数进行了重命名
使用了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;
}
- 传递集合
@RequestParam让上传的参数变为不是非必须上传的,不上传的时候,值为null

@RequestMapping("/m6")
public String m5(@RequestParam List<String> listParam){
return "接收到的参数arrayList: " + listParam + ",长度为: " + listParam.size();
}
- 状态码都是后端去自定义的吗?
不是的,状态码分为http状态码(不是后端自定义的),业务状态码(是后端自定义的)
JSON传递数据
虽然介绍了这些传递参数的方法,但是我们工作中并不使用这些方法,而是使用JSON传递数据
-
接口指的是API
就是应用程序提供了哪些服务给我们使用,接口如果对应到代码上,通常是指方法 -
JSON本质上是一个字符串,表示对象的字符串(JSON字符串)
-
传递JSON数据,需要使用@RequestBody
把整个正文传给这个对象
@RequestBody获取请求正文中的数据

// 通过json请求进行传递
@RequestMapping("/m7")
public String m7(@RequestBody Person person){
return "接收到的参数person: " + person.toString();
}
获取url中的参数
@PathVariable获取url中的参数时使用
- 可以获取url中的一个参数

- 可以获取url中的多个参数,但是要注意顺序要一致

- 可以对参数进行重命名,但是路径上的参数的名字和下面括号中参数的名字要一致

@RequestMapping("/m8/{useId}/{name}")
public String m8(@PathVariable Integer useId,@PathVariable("name") String usename){
return "useId: " + useId + "name: " + usename;
}
上传文件@RequestPart
- 上传图片


- 还可以上传图片到本机中的指定路径或者是指定的文件服务器中
// 上传文件
@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
- Http是无状态的,http没有记忆功能,现在请求和过一会请求,同样的请求参数,得到的结果(这个结果是指处理逻辑是一样的,而不是指数据是一样的)是一样的
- Cookie 客户端机制,比如存储学生证中的id身份信息
Session 服务端机制

获取Cookie
- 使用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
- 使用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为空";
}

- 使用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
- Servlet提供的获取Header的方式
// 获取Header
@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request){
String useAgent = request.getHeader("User_Agent");
return "User_Agent " + useAgent;
}

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

学会看错误日志:
获取 Header 中的Host(指的是网络中的一台计算机或设备,而域名是用于标识和定位这些设备的字符串)信息:
总结
- 对上面内容的总结:

更多推荐



所有评论(0)