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;
    }
相关推荐
你驴我39 分钟前
WhatsApp 消息撤回与编辑的幂等性设计实践
java·服务器·前端·后端·python
一缕清烟在人间43 分钟前
HarmonyOS开发实战:小分享-TextEditPage文字编辑器——Header+TextArea+工具栏
后端·华为·harmonyos·鸿蒙
程序员cxuan1 小时前
Opus 5 深夜炸场,价格还挺香。。。
人工智能·后端·程序员
青山木1 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
卷无止境1 小时前
Python的collections模块:那些被低估的"瑞士军刀"
后端·python
卷无止境2 小时前
Python的方法解析顺序:一场关于继承顺序的精妙设计
后端·python
小龙报2 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
宁&沉沦2 小时前
Chrome 扩展 Manifest 字段版本支持一览(全量)
前端·后端·编辑器
自强的小白2 小时前
重点!起始时间和结束时间与创建时间和修改时间的区别(localdate与LocaldateTIME区别)以及增删改查什么时候设置目前时间(添加和更新员工时)
java
雪的季节2 小时前
Python 线程同步与异步编程 全解析
java·开发语言