Spring Web MVC

目录

一.什么是Spring Web MVC ?

二.什么是Spring MVC ? 

       2.1 MVC定义:

    2.2 Spring MVC 主要关注有两个点:

  三.学习Spring MVC

        3.1学习Spring MVC的重点:

3.2 建立连接:

3.3 请求:

3.3.1 传递单/多个参数

3.3.2 传递对象 

3.3.3 传递数组 

3.3.3 传递集合

3.3.4 传递JSON数据

 3.3.5 获取URL中参数@PathVariable

3.3.6上传⽂件@RequestPart

3.3.7 获取Cookie/Session 

3.4响应

3.4.1返回静态界面:

3.4.2 返回数据@ResponseBody 

3.4.3 返回JSON

3.4.4 设置状态码

3.4.5 设置Header (了解) 


一.什么是Spring Web MVC ?

        Spring Web MVC是基于Servlet API构建的原始Web框架(简单来说 Spring Web MVC是一个Web框架)—— 简称:Spring MVC

二.什么是Spring MVC ? 

       2.1 MVC定义:

                    Mvc是 Model View Controller 的缩写,分为三基本部分:(控制器 模型  视图)   

               MVC可以说是一种思想,而Spring实现了这个思想称为Spring MVC

 MVC的设计模式(图一): 

     图1 

    2.2 Spring MVC 主要关注有两个点:

  1.                 MVC
  2.                 Web框架 

         Spring MVC 全称是 Spring Web MVC

         总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架  

 Spring  MVC设计模式(图二

图二 

  三.学习Spring MVC

        3.1学习Spring MVC的重点:

                        如何通过浏览器和用户程序进行交互

        重点主要分为三方面:

  1.   建立连接:将用户 (浏览器)和Java程序连接起来,通过访问地址能调用Spring程序
  2.   请求:Spring程序接收请求,获取参数的功能
  3.   响应:执行完业务逻辑后,把执行后的结果返回给用户,就是响应

3.2 建立连接:

通过 @RequestMapping 来实现URL路由映射, 浏览器连接程序的关键

@RequestMapping 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;


@RestController
public class RequestController{
    @RequestMapping("/r1")
    public String r1(){
        return "hello";
    }
}

⽅法名和路径名称⽆需⼀致 

访问: http://127.0.0.1:8080/r1  可以查看程序返回的数据


import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;

@RequestMapping("/calc")
@RestController
public class RequestController{
    @RequestMapping("/r1")
    public String r1(){
        return "hello";
    }
}

 访问: http://127.0.0.1:8080/calc/r1  可以查看程序返回的数据

@RequsetMapping 即支持Get请求,又支持Post请求(也支持其他请求)

3.3 请求:

        访问不同的路径,就是发送不同的请求, 发送请求时,可能需要传递参数。

        所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收

3.3.1 传递单/多个参数

  @RequestMapping("/r4")
    public String r4(Integer id ,String name){
        return "接收参数 id:"+id+"  name: "+name;
    }

  @RequestMapping("/r9")
    public String r9(String name){
        return "接收参数:"+name;
    }

无论单个参数还是多个参数 双方名称必须一致

3.3.2 传递对象 

@RequestMapping( "/r3")
    public String r3(@RequestParam Student student){

        return "接收参数:"+student;
    }

//@RequestParam 必须传参

3.3.3 传递数组 

Spring MVC可以自动绑定数组参数的赋值

  @RequestMapping("/r2")
    public String r2(String [] name){
        return Arrays.toString(name);
    }

3.3.3 传递集合

跟传递数组基本差不多3.3.4

@RequestMapping("/r6")
    //@RequestParam 必传参数
    public String r6(@RequestParam List<String> list){
        return "接收参数 list::"+list;
    }

3.3.4 传递JSON数据

    JSON:   JavaScript Object Notation 的缩写

    JSON :本质是字符串,却有自己的风格和语法,使⽤⽂本表⽰⼀个对象或数组的信息

  //RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中    
    @RequestMapping("/r10")
    public String r9(@RequestBody Student student){
        return "接收参数:"+student.toString();
    }

JSON字符串和JAVA对象互转 :

                 readValue:把JSON字符串转成对象

                 writeValueAsString:把对象转为JSON字符串

public class JsonText {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String json ="{\"id\":10,\"name\":\"niha\",\"age\":5}";
        //JSON字符串转对象
        Student student = objectMapper.readValue(json, Student.class);
        System.out.println(student);
        //对象转字符串
        String s =objectMapper.writeValueAsString(student);
        System.out.println(s);
    }
}

JSON优点:
1.简单易用:语法简单,易于理解和编写,可以快速地进行数据交换
2.   跨平台支持:JSON可以被多种编程语言解析和生成,可以在不同的平台和语言之间进行数据交换和传输
3.   轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占用带宽较小,可以提高数据传输速度
4.易于扩展:JSON的数据结构灵活,支持嵌套对象和数组等复杂的数据结构,便于扩展和使用
5.安全性:JSON数据格式是一种纯文本格式,不包含可执行代码,不会执行恶意代码,因此具有较高的安全性 

 3.3.5 获取URL中参数@PathVariable


1.如果方法参数名称和需要绑定的URL中的变量名称一致时,可以简写,不用给@PathVariable的      属性赋值
2.如果方法参数名称和需要绑定的URL中的变量名称不一致时,需要@PathVariable的属性value赋值,
 

3.3.6上传⽂件@RequestPart

   /*
     * 上传文件
     * @RequestParam("File")重命名
     * */
    @RequestMapping("/r8")
    public String r8(@RequestPart("File") MultipartFile jpgFile){
        String originalFilename = jpgFile.getOriginalFilename();
        return "接收到文件名称::"+originalFilename;
    }

3.3.7 获取Cookie/Session 

        首先要知道HTTP属于  "无状态"  协议

        无状态的含义指:HTTP协议下的客户端和服务器的这次连接,与下次通信没有直接连接


HttpServletRequest , HttpServletResponse 是Servlet提供的两个类,是SpringMVC方法的内置对象.需要时直接在方法中添加声明即可.


HttpServletRequest 对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息.


HttpServletResponse 对象代表服务器的响应.HTTP响应的信息都在这个对象中,比如向客户
端发送的数据,响应头,状态码等.通过这个对象提供的方法,可以获得服务器响应的所有内容 

获取Session: 

//设置session
    @RequestMapping("/setSess")
    public String setSession(HttpServletRequest  request ){
        //从cookie中获取SessionId,根据sessionId获取session对象,如果没有获取到,会创建一个session对象
        HttpSession session = request.getSession();

        session.setAttribute("name","zhangsan");


        return "设置session成功";
    }
    /*
获取session方法一
* */
    @RequestMapping("/getSess")
    public String getSession(HttpServletRequest  request ){
        HttpSession session = request.getSession();
        String name =(String) session.getAttribute("name");
        return "从session获取name:"+name;
    }
    /*
   获取session方法二
   HttpSession:封装获取sesionId方法
   * */
    @RequestMapping("/getSess2")
    public String getSession2(HttpSession session ){
        String name =(String) session.getAttribute("name");
        return "从session获取name:"+name;
   }
   /*
   获取session方法三
   注解@SessionAttribute:把获取sessionId和session对象全部封装在一起了
   * */
    @RequestMapping("/getSess3")
    public String getSession3(@SessionAttribute String name){
        return "从session获取name:"+name;
   }

  

获取Cookie :

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;

@RestController
@RequestMapping("/session")
public class SessionController {
    @RequestMapping("/getCk")
    /*
    获取cookie方法一
    * */
    public String getCookie(HttpServletRequest request, HttpServletResponse response){
        String name = request.getParameter("name");
        Cookie[] cookies = request.getCookies();
        if(cookies != null){

            Arrays.stream(cookies).forEach(ck -> System.out.println(ck.getName()+": "+ck.getValue()));
        }
        return "获取cookie";
    }

    @RequestMapping("/getCk2")
    /*
    获取cookie方法二
    * */
    public String getCookie(@CookieValue("cookie") String cookie){
        
        return "获取cookie:  "+cookie;
    }
}

获取header:

  /*
   * 获取header信息
   * */
    @RequestMapping("/getheader")
   public  String getHeader(@RequestHeader("User-Agent") String UserAgent){
       return "从header中获取信息:"+UserAgent;
   }

3.4响应

在我们前面的代码例子中,都已经设置了响应数据,Http响应结果可以是数据,也可以是静态页面,也可以针对响应设置状态码,Header信息等

3.4.1返回静态界面:

创建前端⻚⾯calc.html(注意路径)

  • @Controlller:返回视图
  • @ResponseBody:返回数据
  • @RestController @Controlller  + @ResponseBody

随着前后端分离,后端不需要处理页面,只需要返回页面所需要的数据 

想要返回视图 ,我们需要把@Restcontroller改为@Controller

3.4.2 返回数据@ResponseBody 

3.4.3 返回JSON

/*
    * 返回JSON
    * */
    @RequestMapping("/returnJson")
    @ResponseBody
    public HashMap<String,String> returnJosn(){
        HashMap<String, String> map = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }

3.4.4 设置状态码

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

  /*
     * 设置状态码
     * */
    @RequestMapping(value = "/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response){
       response.setStatus(401);
       return "设置状态码成功 ";
    }

 

3.4.5 设置Header (了解) 

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

1️⃣.设置Content-Type
 @RequestMapping(value = "/returnJson2",produces = "application/json")
    @ResponseBody
    public String returnJson2() {
        return "{\"success\":true}";
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值