Spring MVC程序开发(JavaEE进阶系列3)

这篇具有很好参考价值的文章主要介绍了Spring MVC程序开发(JavaEE进阶系列3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.什么是Spring MVC

1.1MVC的定义

1.2MVC和Spring MVC的关系

1.3为什么要学习Spring MVC

2.Spring MVC项目的创建

3.Spring MVC框架的使用

3.1连接的功能

3.1.1@RequestMapping

3.1.2@GetMapping 

3.1.3@PostMapping

3.2获取参数的功能

3.2.1获取单个参数

3.2.2获取对象

3.2.3上传文件

3.2.4获取Cookie

3.2.5获取Session

3.2.6获取Header

3.2.7从url的path(非参数部分)获取参数

3.3输出数据的功能

结束语:


前言:

在前几节中小编给大家分享了有关于Spring Boot的项目的创建和使用,那么在接下来小编将会给大家分享一些有关于Spring MVC的的程序的开发,以及什么是Spring MVC。

1.什么是Spring MVC

Spring MVC本质是Spring Web MVC他是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。从上面的一段描述中我们可以看出来Spring MVC是一个Web框架,Spring MVC是基于Servlet API构建的。

1.1MVC的定义

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

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

解释:

  • Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常模型负责在数据库中存取数据。
  • View(视图):是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器):是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC的执行流程:

  • 用户的请求首先到Controller。
  • Controller将请求转发给Model。
  • Model处理业务并将数据结构给Controller。
  • Controller会将数据给View引擎。
  • View转换数据生成最终的页面给用户。

1.2MVC和Spring MVC的关系

MVC是一种思想,而Spring MVC是对MVC思想的具体实现。总结来说,Spring MVC是一个实现MVC模式,并继承了Servlet API的Web框架,既然是Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC项目就可以感知到用户的请求。

1.3为什么要学习Spring MVC

现在绝大部分的Java项目都是基于Spring(或Spring Boot)的,而Spring的核心就是Spring MVC,也就是说Spring MVC是Spring框架的核心模块,而Spring Boot是Spring的脚手架,因此我们可以推断出,现在市面上绝大部分的Java项目约等于Spring MVC项目,这是我们要学习Spring MVC的原因。

2.Spring MVC项目的创建

和我们之前的创建Spring Boot项目的方式一样只不过是在我们选择项目依赖的时候需要对其进行多选择一个依赖,具体如下所示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

3.Spring MVC框架的使用

学习Spring MVC我们只需要掌握以下三个功能:

  • 连接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用我们Spring程序。
  • 获取参数的功能:用户访问的时候会带一些参数,在程序中要想办法获取到参数。
  • 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户。

3.1连接的功能

接下来我们就来实现客户端和程序之间的“连接”。

3.1.1@RequestMapping

在Spring MVC中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用。

它是Spring Web应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的所谓路由映射指的是当用户在访问一个url时将用户的请求对应到某个类的某个方法的过程就叫做路由映射。

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {
    @RequestMapping("/sayhi")
    public String sayHi() {
        return "你好 Spring MVC";
    }
}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

注意:从上面的代码中我们可以看出来@RequestMapping既可以修饰类又可以修饰方法。  

那么@RequestMapping是GET请求呢还是POST氢气呢?这里我们可以使用PostMan来进行验证。 

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

由上可以得知@RequestMapping即是GET请求又是POST请求。 

3.1.2@GetMapping 

使用@GetMapping实现HTTP连接,但只支持GET类型的请求。

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test_get")
public class GetController {
    //写法一:
    @RequestMapping("/get1")
    public String sayHi1() {
        return "你好 Spring MVC1";
    }
    //写法二:
    @RequestMapping(value = "/get2",method = RequestMethod.GET)
    public String sayHi2() {
        return "你好 Spring MVC2";
    }

    //写法三:
    @GetMapping("/get3")
    public String sayHi3() {
        return "你好 Spring MVC3";
    }
}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

同样我们也可以使用PostMan来进行验证一下看是不是只是支持GET请求。

当我们发送的是一个GET请求的时候是可以访问到的。

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

当我们发送的是POST的时候就访问不到了,所以证明了当我们使用@GetMapping的时候确实是只是支持GET类型的。

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

3.1.3@PostMapping

使用@PostMapping实现HTTP连接,但只支持POST类型的请求。

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("test_post")
public class PostController {
    //写法一:
    @RequestMapping("/post1")
    public String sayHi1() {
        return "你好 Spring MVC1";
    }
    //写法二:
    @RequestMapping(value = "/post2",method = RequestMethod.POST)
    public String sayHi2() {
        return "你好 Spring MVC2";
    }

    //写法三:
    @PostMapping("/post3")
    public String sayHi3() {
        return "你好 Spring MVC3";
    }

}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

注意:这里在代码中的写法一是可以通过浏览器正常访问到的,但是写法二和写法三是不可以的,因为浏览器默认是使用GET类型的。

这里虽然在浏览器上看不出来效果但是我们可以使用PostMan来进行模拟。

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

同样这里也可以使用PostMan来验证是否是只能使用POST。 

3.2获取参数的功能

3.2.1获取单个参数

获取单个参数时可以使用以下两种方法来进行参数的传递。

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/getname")
public class TestController2 {
    //方法一:
    @RequestMapping("/getname1")
    public String getName1(HttpServletRequest request) {
        return "Name: " + request.getParameter("name");
    }
    
    //方法二:
    @RequestMapping("/getname2")
    public String getName2(String name) {
        return "Name: " + name;
    }
}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

3.2.2获取对象

在此之前我们先来创建出一个User实体类。

代码如下所示(PS:这里我们使用了Lombok里面的@Data注解)

package com.example.demo.model;

import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private int age;
}

那么接下来我们就尝试着获取User这个对象。 

代码展示:

package com.example.demo.controller;

import com.example.demo.model.User;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class TestController3 {
    @RequestMapping("add1")
    public User add(User user) {
        return user;
    }

    @RequestMapping("/add2")
    public User addByJson(@RequestBody User user) {
        return user;
    }
}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

使用JSON格式的对象。 

 Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

3.2.3上传文件

如果我们想要将一张图片上传至本地磁盘中,我们就可以使用以下的方式来进行上传。

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/test4")
public class TestController4 {
    @RequestMapping("/upload")
    public String upload(@RequestPart("myfile")MultipartFile file) throws IOException {
        String path = "D:\\image\\img.png";
        //保存文件
        file.transferTo(new File(path));
        return path;
    }
}

结果展示:

在Postman中进行演示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

3.2.4获取Cookie

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/Cookie")
public class TestController5 {

    @RequestMapping("/getcookie")
    public String getCookie(@CookieValue(value = "java",required = false) String ck) {
        return ck;
    }
}

注意:在上述中的代码中我们设置了@RequestParma中的required=false,这样就可以满足我们的实际业务前端的参数是一个非必传的参数了。

3.2.5获取Session

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;

@RestController
@RequestMapping("/Session")
public class TestController6 {
    @RequestMapping("/getsession")
    public String getsession(@SessionAttribute(required = false,value = "1") String name) {
        return name;
    }
}

3.2.6获取Header

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/Header")
public class TestController7 {
    @RequestMapping("/header")
    public String header(@RequestHeader("User-Agent") String userAgent) {
        return "userAgent: " + userAgent;
    }
}

3.2.7从url的path(非参数部分)获取参数

代码展示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/url")
public class TestController8 {
    @RequestMapping("/urlpath/{name}/{age}")
    public String geturl(@PathVariable String name, @PathVariable String age) {
        return name + age;
    }
}

结果展示:

 Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

 

3.3输出数据的功能

通过上面的学习我们知道,默认请求下无论是Spring MVC或者是Spring Boot返回的是视图(xxx.html),而现在都是前后端分离的,后端只是需要返回给前端数据即可,这个时候我们就需要使用@ResponseBody注解了。

创建一个index.html:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

代码展示:

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
@RequestMapping("/p")
public class indexController {
    @RequestMapping("/index")
    public String index(){
        return "/index.html";
    }
    @RequestMapping("/m")
    @ResponseBody
    public String index2() {
        return "<h1>Hello Spring MVC</h1>";
    }
}

结果展示:

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee

如果我们想要直接在页面中显示的就是我们返回的数据那么就可以直接使用上述的@RestController这个注解。 

结束语:

好了这节小编就给大分享到这里啦,希望这节对大家有关于Spring MVC的基础知识的了解有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

Spring MVC程序开发(JavaEE进阶系列3),JavaEE进阶,spring,mvc,java-ee文章来源地址https://www.toymoban.com/news/detail-728305.html

到了这里,关于Spring MVC程序开发(JavaEE进阶系列3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三、使用注解形式开发 Spring MVC程序

    1、 创建 maven 项目,添加框架支持 2、 添加依赖,因为 maven 可以有一些资源过滤的问题,这里直接将资源过滤配置补全 3、 检查项目结构中是否有 lib 夹以及 jar 是否成功导入了,并配置 tomcat 这里配置完基本上就不用在动了,统一使用注解来解决 @Controller: @Controller 用于标

    2024年02月12日
    浏览(40)
  • Java EE 突击 11 - Spring MVC 程序开发 (2)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(74)
  • Java EE 突击 10 - Spring MVC 程序开发 (1)

    这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领大家进行环境的配置 , 让大家真正用好

    2024年02月13日
    浏览(49)
  • 【JavaEE进阶】 初识Spring Web MVC

    Spring Web MVC 是 基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC). Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的

    2024年02月03日
    浏览(45)
  • JavaWeb开发框架对比与选择:Struts、Spring MVC、JavaEE

    引言:         在JavaWeb开发领域,选择合适的开发框架对于项目的成功与否至关重要。随着技术的不断发展,出现了许多优秀的开发框架,其中最为知名的包括Struts、Spring MVC和JavaEE。本文将对这三个框架进行对比,并给出选择的建议。 一、Struts框架         Struts是一

    2024年02月04日
    浏览(43)
  • 【JavaEE】Spring Web-MVC

    目录 Spring Web MVC 是什么 什么是Serlet 什么是MVC 什么是Spring MVC 使用Spring MVC 建立连接 @RequestMapping 请求 传递单个参数 传递多个参数 传递对象 后端参数重命名  传递数组 传递集合 传递JSON数据 获取url参数-@pathvariable 上传文件@RequestPart 获取Cookie Session 获取Header 响应 返回静态页

    2024年04月12日
    浏览(30)
  • Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发

      掌握纯注解开发依赖注入(DI)模式 学习使用纯注解进行第三方Bean注入 问题导入 思考:如何使用注解方式将Bean对象注入到类中 1.1 使用@Autowired注解开启自动装配模式(按类型) 说明:不管是使用配置文件还是配置类,都必须进行对应的Spring注解包扫描才可以使用。@Autowired默

    2024年02月14日
    浏览(58)
  • 【Spring进阶系列丨第一篇】初识Spring开发

    小伙伴们大家好,我是陈橘又青,今天起 《Spring进阶系列》 开始更新。本专栏将涵盖Spring框架的核心概念、配置管理、Web开发、AOP、Boot、Security、Data、Integration和Batch等多个主题。通过理论讲解和实际案例的剖析,帮助读者深入理解Spring框架的原理和应用技巧,提升开发人员

    2024年02月05日
    浏览(46)
  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发

    前两篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,以及详细讲解IOC,今天详细介绍一些DI(依赖注入) 能够配置setter方式注入属性值 能够配置构造方式注入属性值 能够理解什么是自动装配 思考:向一个类中传递数据的方式有几种?(给类

    2024年02月13日
    浏览(50)
  • 真的简单,单手用Spring Boot 开发一个微信小程序

      嗨,大家好,现在微信使用的用户很多,作为开发人员也可以建立一个自己的微信小程序,本期与大家分享一下作者建立微信小程序的开发流程。   百度搜索微信公众号平台,然后扫码登录注册一个微信公众号,   进入申请页面之后,需要及时完善小程序相关信息

    2024年02月10日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包