【Spring Web MVC】(MVC 响应 返回静态页面 返回数据@ResponseBody 返回HTML代码片段 返回JSON 设置状态码 设置Header)


MVC

响应

返回静态页面

创建前端页面:
在这里插入图片描述

测试页面是否正常,先启动项目

在这里插入图片描述

@RequestMapping("/return")
@Controller
public class ReturnController {
    @RequestMapping("/index")
    public  String returnIndex(){
        return "/index.html";
    }
}

在这里插入图片描述

@Controller返回视图,随着前后端分离,后端不处理数据,就返回页面所需要的数据。通过@ResponseBody返回数据,它俩加在一起就是@RestController

在这里插入图片描述

返回数据@ResponseBody

可以修饰类,也可以修饰方法,修饰类的时候表示这个类下的所有方法,返回的均为数据,修饰方法时,表示该方法返回的数据。

如果一个类中所有方法返回的都是数据,我们就把这个注解加在类上

@RequestMapping("/return")
@Controller
public class ReturnController {
    @ResponseBody
    @RequestMapping("/returnData")
    public  String returnData(){
        return "返回视图需要的数据";
    }
}

在这里插入图片描述

返回HTML代码片段

@ResponseBody
    @RequestMapping("/returnHtml")
    public  String returnHtml(){
        return "<h1>返回HTML代码片段</h1>";
    }

在这里插入图片描述

返回JSON

@ResponseBody
    @RequestMapping("/returnJson")
    public Person returnJson(){
        Person person = new Person();
        person.setId(1);
        person.setName("zhangsan");
        person.setAge(7);
        return person;
    }

在这里插入图片描述
当接口返回的是String时,content-type是text/html
当接口返回的对象(Map
时,content-type是application/json

在这里插入图片描述

@ResponseBody
    @RequestMapping("/returnMap")
    public Map<String, String> returnMap(){
        Map<String,String> kv = new HashMap<>();
        kv.put("k1","v1");
        kv.put("k2","v2");
        kv.put("k3","v3");
        return kv;
    }

在这里插入图片描述

在这里插入图片描述

设置状态码

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

@ResponseBody
    @RequestMapping("/setStatus")
    public String setStatus(HttpServletResponse response){
        response.setStatus(401);//通常表示没有登录
        return "设置状态码成功";
    }

在这里插入图片描述

设置Header

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

设置content-type

@ResponseBody
    @RequestMapping(value = "/r1",produces = "application/json;charset=utf-8")
    public String r1(HttpServletResponse response){
        return "{'oK':1}";
    }

在这里插入图片描述
我们还可以设置header
在这里插入图片描述

用户登录

需求: ⽤⼾输⼊账号和密码, 后端进⾏校验密码是否正确

  1. 如果不正确, 前端进⾏⽤⼾告知
  2. 如果正确, 跳转到⾸⻚. ⾸⻚显⽰当前登录⽤⼾
  3. 后续再访问⾸⻚, 可以获取到登录⽤⼾信息
约定前后端交互接口

校验接口

请求路径:/user/login
请求⽅式:POST
接⼝描述:校验账号密码是否正确

响应数据:

Content-Type: text/html
响应内容: 
true //账号密码验证成功
false//账号密码验证失败

查询登录用户接口

请求路径:/user/getUserInfo
请求⽅式:GET
接⼝描述:查询当前登录的⽤⼾
服务器端代码
@RequestMapping("/user")
@RestController
public class UserController {
    @RequestMapping("/login")
    public Boolean login(String userName, String password, HttpSession session){
        // 校验参数合法性
//        if(userName == null || userName.length() == 0 || password.length() == 0){
//            return false;
//        }
        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){
            return false;
        }
        // 进行用户名和密码的校验
        if("admin".equals(userName) && "admin".equals(password)){
            //设置session
            session.setAttribute("username","admin");
            return true;
        }
        return false;
    }
    @RequestMapping("/getUserInfo")
    public String getUserInfo(HttpSession session){
        //从session中获取用户
        String userName = (String) session.getAttribute("username");
        return userName;
    }
}

先验证后端代码是否正确:

在这里插入图片描述

在这里插入图片描述

修改前端代码

使用vscode编写ajax:

function login() {
      $.ajax({
        url:"/user/login",
        type:"post",
        data:{
          "userName":$("#userName").val,
          "password":$("paswword").val
        },
        success:function(result){
          if(result){
            location.href = "/index.html";
            // location.assign();
          }else{
            alert("密码错误");
          }
        }
      });
    }
// 页面加载时就去调用后端请求
       $.ajax({
            url:"user/getUserInfo",
            type:"get",
            success:function(username){
                $("#loginUser").text(username);
            }
       }); 
运行测试

在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马尔科686

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值