Spring Web MVC(1)

前言

这篇文章介绍一些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的语法:

  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  5. 值可以为对象,也可以为数组,数组中可以包含多个对

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;
    }

在这里插入图片描述

浏览器上

在这里插入图片描述

今天就到这里了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值