Spring Mvc(一)

什么是Spring MVC

Spring Web MVC是基于Servlet API构建的原始WEB框架,从一开始就包含在Spring 框架中,它的正式名称“Spring Web MVC”来自其源模块的名称,但他通常被称为Spring MVC.
从上述定义可以得出两个信息:
(1)Spring MVC. 是一个基于Web的框架
(2)Spring MVC是基于Servlet API 构建的

MVC定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
为模型、视图和控制器三个基本部分

在这里插入图片描述

MVC 和Spring MVC的关系

MVC是设计思想
Spring MVC是具体的实现框架
Spring MVC是基于MVC设计模式和Servlet API实现的Web项目,同时Spring MVC又是Spring 框架中的WEB模块,它随着Spring的诞生而存在的一个框架。

为什么要学Spring MVC

在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实现用户和程序的映射

在浏览器输入URL地址之后,能够在程序中匹配到相应的方法。

@RequestMapping(“/***”)

idea展开文件夹的方式
在这里插入图片描述

在这里插入图片描述

@Controller
@RequestMapping("/user")//类上面的RequestMapping可以省略
@ResponseBody //作用:返回一个非静态页面的数据
public class UserController {

    @RequestMapping("/sayhi")
    public  String sayHi(){
        return "你好,world";
    }
}

@ RequestMapping既能修饰类(可选)也可修饰方法
默认@RequestMapping既支持post请求方式,也支持get请求方式

@RequestMapping参数扩展(只支持某种类型的请求方式,比如post类型的请求方式)

 @RequestMapping(method = RequestMethod.POST, value="/sayhi2")
    public String sayHi2(){
        return "hello world";
    }

@PostMapping(“/***”)

//只支持post类型的访问方式
    @PostMapping("/sayhi3")
    public String sayHi3(){
        return "你好,world3";
    }

@GetMapping(“/***”)

@GetMapping("/sayhi4")
    public String sayHi4(){
        return "你好,world4";
    }

获取用户请求参数

获取单个参数

 @RequestMapping("/getuserbyid")
    public UserInfo getUserById(Integer id){
        // 不查数据库,伪代码,返回用户对象
        UserInfo userInfo=new UserInfo();
        userInfo.setId(id);
        userInfo.setUsername("张三");
        userInfo.setAge(18);
        return userInfo;
    }
@Data
public class UserInfo {
    private int id;
    private String username;
    private String password;
    private int age;
}

在这里插入图片描述

获取多个参数

@RequestMapping("/login")
    public String login(String username,String password){
        return "用户名:"+username + " | 密码:"+password;
    }

在这里插入图片描述

获取对象

@RequestMapping("/reg")
    public String reg(UserInfo userInfo){
        return "用户信息:" + userInfo;
    }

这里是引用

扩展功能:参数重命名
使用@RequestParam
前端传来的是name,但是后端是username,此时就可以使用@RequestParam进行重命名。

@RequestMapping("/login2")
    public String login2(@RequestParam("name") String username,String password){
        return "用户名:"+username + " | 密码:"+password;
    }

这里是引用

@RequestParam注意事项:
如果在参数中添加@RequestParam注解,那么前端一定要传递参数,否则就会报错,如果想解决此问题,可以给@RequestParam里面添加required = false

@RequestMapping("/login3")
    public String login3(@RequestParam(value = "name",required = false) String username,String password){
        return "用户名:"+username + " | 密码:"+password;
    }

这里是引用

获取URL中的参数

从URL地址中获取参数(不是从URL地址中的参数部分获取参数)
在这里插入图片描述

@RequestMapping("/hero/{id}/{name}")
    public String getHeroInfo(@PathVariable Integer id,@PathVariable String name){
        return "ID:"+id +"| Name:"+name;
    }

这里是引用

在这里插入图片描述

上传文件

扩展功能:不同运行平台的配置文件设置
(1)新建不同平台的配置文件
在这里插入图片描述
(2)在主配置文件中设置运行环境的配置文件
在这里插入图片描述

//从配置文件中读取图片保存的路径
    @Value("${img.path}")
    private String imgpath;


@RequestMapping("/upimg")
    public boolean upImg(Integer uid, @RequestPart("img")MultipartFile file){
        boolean result=false;
        //1.目录=imgpath
        //2.图片名称(图片名不能重复)
        // 3。获取原上传图片的格式
       String fileName= file.getOriginalFilename();//得到原图片的名称(xxx.png)
       fileName=fileName.substring(fileName.lastIndexOf("."));//得到图片后缀
        fileName= UUID.randomUUID().toString()+fileName;


        //保存图片到本地目录
        try {
            file.transferTo(new File(imgpath+fileName));
            result=true;
        } catch (IOException e) {
            log.error("上唇啊图片失败:"+e.getMessage());
        }
        return result;
    }

获取cookie

(1)servlet获取cookie的方法

 @RequestMapping("/cookie")
    public void getCookie(HttpServletRequest request){
        Cookie[] cookies=request.getCookies();
        for(Cookie item:cookies) {
            log.info("Cookie Name:" + item.getName() + "| Cookie Value:"+item.getValue());
        }
        
    }

(2)使用@CookieValue注解实现Cookie的读取

 @RequestMapping("/cookie2")
    public String getCookie2(@CookieValue("bbb") String cookie){
        return  "Cookie Value"+ cookie;
    }

获取header

(1)servlet获取header

 @RequestMapping("/getua")
    public String getHead(HttpServletRequest request){
        return "header:"+request.getHeader("User-Agent");
    }

在这里插入图片描述
(2)@RequestHeader

 @RequestMapping("/getua2")
    public String getHead2(@RequestHeader("User-Agent") String userAgent){
        return "header:"+ userAgent;
    }

在这里插入图片描述

存储和获取session

存储session

@RequestMapping("/setsess")
    public boolean setSession(HttpServletRequest request){
        boolean result=false;
        //1.得到httpsession对象
        HttpSession session=request.getSession(true);//true表示如果没有会话,那么创建一个

        //2.使用setAtt设置值
        session.setAttribute("userinfo","userinfo");
        result=true;
        return result;
    }

获取session
(1)使用servlet模式

@RequestMapping("/getsess")
    public String getSession(HttpServletRequest request){
        String result=null;
        //1.得到HttpSession对象
        HttpSession session=request.getSession(false);//false 如果有会话,使用会话,如果没有不会新创建会话
        //2. getAtt得到session信息
        if(session != null && session.getAttribute("userinfo") != null) {
            result  =(String) session.getAttribute("userinfo");
        }
        return result;
    }

(2)使用注解

@RequestMapping("/getsess2")
    public String getSession2(@SessionAttribute(value = "userinfo",required = false) String userinfo){
        return "会话"+userinfo;
    }

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值