Spring Web MVC
前言
这篇文章介绍一些Spring Web MVC的一些基础入门知识,关于建立连接和请求!
什么是Spring Web MVC?
官方解释:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)SpringMVC).
总结
Spring Web MVC 是⼀个 Web 框架.!
MVC
Model View Controller
Model 模型
View 视图
Controller 控制器
MVC是一种思想,Spring MVC是一种实现
建立连接
@RestController
public class UserController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
/可加可不加,但建议加上
@RequestMapping作用范围
1.类 类路径_方法路径
2.方法上
@RestController
@RequestMapping(/"a1")
public class UserController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
当一个类有多个注解时,这些注解没有先后顺序
我们使用Postman来测试
**
**
指定请求方式
@RequestMapping(value = "/r1",method = RequestMethod.POST)
public String r1(String name) {
return "接收到的参数 name:" + name;
}
@RequestMapping注解里,双引号的值会赋值给"value"这个属性
多个对对多个属性赋值,需要写上属性名,只有一个属性时,且属性名为value,可以省略
上述指定使用post,此处使用get导致报错!
请求单个参数
@RequestMapping("/r1")
public String r1(String name) {
return "name:"+name;
}
当出现错误
1.先观察HTTP状态码
如果是404,先确定url是否存在
如果是5xx,先看后端控制台日志
传递多个参数
@RequestMapping("/r2")
public String r2(String name, Integer age) {
return "age:" + age + " name:" + name;
}
传递对象
public class UserInfo {
private String name;
private Integer age;
private Integer id;
public UserInfo() {
}
public UserInfo(String name, Integer age, Integer id) {
this.name = name;
this.age = age;
this.id = id;
}
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
@RequestMapping("/r3")
public String r3(UserInfo userInfo) {
return userInfo.toString();
}
参数进行重命名
@RequestMapping("/r4")
public String r4(@RequestParam("name") String username , Integer age){
return "username:"+ username +",age:"+age;
}
从请求中获取name的参数,并赋值给uername参数,默认这个参数是必传的
@RequestMapping("/r4")
public String r4(@RequestParam(value = "name",required = false) String username , Integer age){
return "username:"+ username +",age:"+age;
}
设置参数为非必传
传递数组
@RequestMapping("/r5")
public String r5(String[] arr) {
return Arrays.toString(arr);
}
传递集合
@RequestMapping("/r6")
public String r6(@RequestParam(value = "list",required = false) List<String> list) {
if (list == null) {
return "list为空";
}
return list.toString()+" size:" + list.size();
}
集合参数:和数组类似,同一个请求参数名有为多个,且需要使用 @RequestParam绑定参数关系!
传递JSON数据
简单来说:JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JOSN本质是字符串,主要负责在不同的语言中数据传递和交换!
JSON与Javascript的关系
没有关系,只是语法类似.js开发能更快的上手而已
JSON是一个字符串,其格式非常类似于Javascript对象字面量的格式
JSON的语法:
- 数据在 键值对(Key/Value) 中
- 数据由逗号 , 分隔
- 对象⽤ {} 表⽰
- 数组⽤ [] 表⽰
- 值可以为对象,也可以为数组,数组中可以包含多个对
JSON本质上是一个字符串,Spring MVC框架也集成了JSON的转换工具.
JSON的优点
1.简单易用
2.跨平台支持
3.轻量级
4,易于扩展
5.安全性
接收JSON对象,需要使⽤ @RequestBody 注解
@RequestMapping("/r7")
public String r7(@RequestBody UserInfo userInfo){
return userInfo.toString();
}
获取URL中的参数
使用@PathVariable
path variable:路径变量
@RequestMapping("/r8/{articleid}")
public String r8(@PathVariable Integer articleid){
return "articleid:"+articleid;
}
这里是对应的
对参数进行重命名
@RequestMapping("/r9/{name}/{age}")
public String r9(@PathVariable(value = "name") String Username,@PathVariable Integer age){
return "name:"+Username+",age:"+age;
}
上传文件
使用@RequestPart
@RequestMapping("/r10")
public String r10(@RequestParam MultipartFile file) throws IOException {
String filename = file.getOriginalFilename();
file.transferTo(new File("D:/temp/"+filename));
return "获取上传文件:"+file.getOriginalFilename();
}
然后观察路径下文件是否上传成功!
获取Cookie/Session
一般来说
1.用户提供账号和密码,服务器进行严重
2.服务器通过验证,会把信息存储在Session中,把SessionId返回给客户端
3.客户端收到响应,把SessionId纯初中Cookie中
4.后续的请求中,客户端带着SessionId去请求(带着Cookie信息去请求)
Cookie和Session的区别
1.Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.
2.Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的桥梁
3. Cookie和Session经常会在⼀起配合使⽤.但是不是必须配合.
4.完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是SessionId
5.Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递.
共同点:
都是会话机制
Cookei是客户端机制
Session是服务器机制
Cookie存储的信息由程序员而定
Session也不一定必须存在Cookie中
传统方法获取Cookie
@RequestMapping("/getCookie")
public String getCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
System.out.println(c.getName() + ":" + c.getValue());
}
return "获取Cookie成功";
}
return "Cookie 为空";
}
Cookie是可以伪造的,也就是不安全的,所以使用Cookie时后端需要进行Cookie校验
简洁获取Cookie
@RequestMapping("/r12")
public String cookie(@CookieValue("netherworld") String netherworld){
return "netherworld"+netherworld;
}
Session存储和获取
Session是服务器端的机制,我们需要先存储,才能再获取
Session也是基于HttpServletRequest来存储和获取的
@RequestMapping("/setSess")
public String setsess(HttpServletRequest request){
HttpSession session = request.getSession();
if (session != null) {
session.setAttribute("username","java");
}
return "Session 存储成功";
}
获取
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request){
HttpSession session = request.getSession();
String username =(String) session.getAttribute("username");
return "登录用户:"+username;
}
另外两种写法
@RequestMapping("/getSession2")
public String getSession(HttpSession session){
String username =(String) session.getAttribute("username");
return "登录用户:"+username;
}
@RequestMapping("/getSession3")
public String getSession(@SessionAttribute(value = "username",required = false) String username){
return "登录用户:"+username;
}
Header
@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request){
String userAgent = request.getHeader("user-Agent");
return "userAgent:"+userAgent;
}
@RequestMapping("/getHeader2")
public String getHeader(@RequestHeader("user-Agent") String userAgent){
return "userAgent:"+userAgent;
}
浏览器上
今天就到这里了!