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;
    }
相关推荐
AskHarries几秒前
Spring Boot集成Akka Cluster快速入门Demo
java·spring boot·后端·akka
2402_85758936几秒前
Java免税商品购物商城:Spring Boot实现详解
java·开发语言·spring boot
少喝冰美式4 分钟前
【大模型教程】如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!
人工智能·spring boot·后端·langchain·llm·ai大模型·计算机技术
Armyyyyy丶10 分钟前
spring-boot-maven-plugin插件打包和java -jar命令执行原理
java·maven·插件打包
罗政29 分钟前
[附源码]SpringBoot+VUE+Java实现人脸识别系统
java·vue.js·spring boot
-XWB-36 分钟前
【Java】将一个List拆分使用线程池多线程运行
java·windows·list
陈大爷(有低保)41 分钟前
题目:基于TCP/IP用DOM4j修改XML
java·服务器·tcp/ip
岁岁岁平安42 分钟前
《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)
后端·游戏·设计模式·飞机大战·java-gui
m0_738755921 小时前
.ideavimrc在idea打不开
java·vim·intellij-idea
超级小的大杯柠檬水1 小时前
IDEA中实现springboot热部署
java·spring boot·intellij-idea