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;
    }
相关推荐
言慢行善8 分钟前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星14 分钟前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟32 分钟前
操作系统之虚拟内存
java·服务器·网络
Tong Z34 分钟前
常见的限流算法和实现原理
java·开发语言
凭君语未可37 分钟前
Java 中的实现类是什么
java·开发语言
He少年39 分钟前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新1 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏4941 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4941 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链