Spring MVC

一.什么是SpringMVC

首先需要知道什么是MVC,MVC是一种软件工程的架构模式,也是一种分类的思想。它将软件工程分为模型(model),视图(view),控制器(controller)三个部分。

模型:处理数据逻辑

视图:处理数据显示

控制器:处理与用户交互的部分

Spring MVC就是对MVC思想的一种实现,并且继承了servlet的Web框架。

Spring MVC的主要功能:

spring MVC能够实现用户与程序之间的交互。将用户的浏览器与Java程序链连接,用户通过一个url能够调用程序,实现用户与程序之间的交互。

二.SpringMVC实现

1.创建SpringMVC项目

要创建一个SpringMVC项目,先打开idea,创建一个spring-boot项目

spring-boot里集成了多种框架,我们选中的spring web其实就是表明我们创建的项目也是spring mvc项目。

2.编写代码

项目创建完成以后,创建一个controller包,再创建一个 UserController类,编写以下代码并运行:

java 复制代码
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller//将它交给spring管理
@ResponseBody//返回非页面数据
@RequestMapping("/user") //一级路由映射
public class UserController {

    @RequestMapping("/springMVC")//二级路由映射(默认为get请求)
    public String saySpringMVC(){

        return "springMVC";
    }
}

然后在浏览器输入以下URL就能访问到相应的返回数据。对于URL,访问本机:

java 复制代码
127.0.0.1:8080/一级路由映射/二级路由映射

其中的一级路由映射和二级路由映射是代码中可以自己指定的。

以上是对于以上的代码,它们的意思分别是:

复制代码
@Controller:将该类交给spring管理
复制代码
@ResponseBody:返回非页面数据,之所以要加这个注解,是因为默认情况下,SpringMVC默认返回给浏览器的是一个页面,如果要返回像字符串等非页面数据,需要加上这个注解。
复制代码
@RequestMapping :一级路由映射,这个注解里的("/user")是一级路由映射,对应url的一级路径。

3.关于@RequestMapping

@RequestMapping默认支持的是GET请求,如果要指定GET请求或者POST请求,可以有以下写法:

1.关于GET请求有三种写法

java 复制代码
//get请求三种写法
     //写法一:
    @RequestMapping("/springMVC")//二级路由映射(默认是get请求)
    public String saySpringMVC(){

        return "springMVC";
    }
 //写法二:
    @GetMapping("/springMVC2")
    public String saySpringMVC2(){

        return "springMVC";
    }
//写法三:
    @RequestMapping(value = "/springMVC3",method = RequestMethod.GET)//二级路由映射
    public String saySpringMVC3(){

        return "springMVC";
    }

2.关于POST请求有两种写法

java 复制代码
//post请求的两种写法
    //写法一:
    @PostMapping("/hi")
    public String sayHai(){
        return "hi";
    }
    //写法二:
    @RequestMapping(value = "/hi",method = RequestMethod.POST)
    public String sayHi2(){
        return "hi";
    }

4.获取参数

从发送的请求中获取参数,可以在方法中定义参数

java 复制代码
//获取参数
    @GetMapping("/getPar")
    public Object getPar(String name){

        System.out.println("name" + name);

        return name;
    }

使用postman发送请求,可以看到,返回参数name=zhangsan。

5.传递对象

先定义一个对象类Person,使用lombok的@data给对象类加入getter、setter等方法。

java 复制代码
package com.example.demo.model;

import lombok.Data;

@Data
public class Person {

    private String name;
    private int age;
    private String gender;

}

再传递一个Person对象

java 复制代码
 //传递对象
    @GetMapping("/getPerson")
     public Person getPerson(Person person){

         System.out.println("名字:" + person.getName());
         System.out.println("年龄:" + person.getGender());
         System.out.println("性别: "+ person.getGender());

         return person;
     }

使用postman传递一个person对象,指定属性值,可以看到返回了相应的person对象

java 复制代码
     //后端参数重命名
    //后端参数重命名,前端传参url用time,后端参数重命名为createTime
    @GetMapping("/reName")
    public Object reName(@RequestParam("time") String createTime){

        System.out.println("时间:" + createTime);

        return createTime;
    }

6.设置参数非必传与后端参数重命名

url里的参数有时是可传的,有时是不必须传的,,那么就可以使用@RequestParam(value = "重命名",required = false),value里的值是url里需要传递的值,有了value以后,java的形参就可以改变,required = false,表示这个参数可传也可不传。

java 复制代码
//设置参数为非必传
    //value = "time",required = false 代表前端参数为time,非必传,可传可不传,程序都不会报错
    @GetMapping("/method1")
    public Object method1(@RequestParam(value = "time",required = false) String createTime){
        System.out.println("时间:" + createTime);
        return createTime;
    }

使用postman发送请求可以看到没传参数没有报错。

传了参数也没有报错。

7.获取url中的参数

java 复制代码
  //获取url中的参数
    @PostMapping("/param/{name}/{age}")
    public Object method2(@PathVariable String name,@PathVariable String age){
        System.out.println("name" +name);
        System.out.println("age" + age);
        return "name :" + name + " age: " + age;
    }

8.session的存储与获取

sesion存储:

request.getSession()置为true,表明如果session不存在,自动创建

java 复制代码
 //session存储
    @GetMapping("/sess")
    public String sess(HttpServletRequest request){
        //置为true,如果session不存在,自动创建
        HttpSession session=request.getSession(true);
        if(session != null ){
            session.setAttribute("name","张三");
        }
        return "存储成功";
    }

session获取:

request.getSession()置为false,表明如果session不存在,不自动创建

java 复制代码
//session获取,从HttpServletRequest中获取
   @GetMapping("/session")
    public String session(HttpServletRequest request){
        //置为false,如果session不存在,不会自动创建
       HttpSession session=request.getSession(false);
       String username="";
       if(session != null || session.getAttribute(username) != null){

           username=(String)session.getAttribute("username");
       }
       return "username" +username;
    }
相关推荐
重庆小透明25 分钟前
力扣刷题记录【1】146.LRU缓存
java·后端·学习·算法·leetcode·缓存
lang2015092830 分钟前
Reactor操作符的共享与复用
java
TTc_41 分钟前
@Transactional事务注解的批量回滚机制
java·事务
博观而约取1 小时前
Django 数据迁移全解析:makemigrations & migrate 常见错误与解决方案
后端·python·django
wei_shuo2 小时前
飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
java·开发语言·飞算javaai
寻月隐君2 小时前
Rust 异步编程实践:从 Tokio 基础到阻塞任务处理模式
后端·rust·github
GO兔2 小时前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
Sincerelyplz2 小时前
【Temproal】快速了解Temproal的核心概念以及使用
笔记·后端·开源
爱上语文2 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Lemon程序馆2 小时前
速通 GO 垃圾回收机制
后端·go