Java EE 突击 10 - Spring MVC 程序开发 (1)

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

这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架
JavaEE 进阶专栏

Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在

接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点

并且带领大家进行环境的配置 , 让大家真正用好框架、学懂框架

来上一篇文章复习一下吧
点击即可跳转到前置文章
Java EE 突击 10 - Spring MVC 程序开发 (1),JavaEE 进阶,java-ee,spring,mvc

一 . Spring MVC

1.1 什么是 Spring MVC?

我们先来看官方对于 Spring MVC 的解释
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
image.png

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring 框架中。Spring Web MVC 的正式名称“Spring Web MVC” , 来自于其源代码模块 (Spring -webmvc) 的名称,但它更常用的名称是“Spring MVC”。

剖析一下 :
Spring MVC 全称 Spring Web MVC , 那么 Spring Web MVC 又被简称为 Spring MVC 或 Spring Web .
它是一个原始的基于 Servlet API 的 web 框架
那么我们之前就提出了一个问题 : Spring / Spring Boot / Spring MVC 有什么区别 ?

Spring : 全称是 Spring Framework , 是一个包含了众多工具 / 方法的 IoC 容器 , 它里面包含了很多模块 , 它的最核心功能就是 IoC 容器 , 使用 IoC 容器可以降低代码的耦合性
Spring Boot : 在创建之初的目的就是为了服务 Spring , 为了快速开发 Spring 框架的 , 其本质就是 Spring
Spring MVC : 是一个 Web 框架 , 在整个 Spring Framework 里面算是一个模块

目前为止 , 我们已经总结出了两个非常关键的信息 :

  1. Spring MVC 是一个 Web 框架
  2. Spring MVC 是基于 Servlet API 构建的

那么这个 MVC 怎样理解呢 ?

MVC 定义

MVC 全称是 Model View Controller , 翻译过来就是 模型视图控制器 , 它是软件工程中的⼀种软件架构模式(设计思想),它把软件系统分为模型、视图和控制器三个基本部分
image.png
无标题.png
但是既然 Spring MVC 是前后端不分离的模式 , 我们还有必要学习吗 ?
当然有必要啊 , 我们的 Spring MVC 也是会慢慢发展的 , 逐步的就把 View 模块淡化了(现在都是采用的前后端分离模式)

Spring MVC 与 MVC 有什么关系呢 ?

MVC 是⼀种思想,而 Spring MVC 是对 MVC 思想的具体实现。

这就跟我们之前介绍的 IoC 与 DI 差不多

1.2 Spring MVC 学习内容

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

二 . Spring MVC 的创建和连接

2.1 创建 Spring MVC

其实我们创建 Spring Boot 的时候 , 就已经创建了 Spring MVC 了
接下来 , 带大家再走一遍流程
Java EE 突击 10 - Spring MVC 程序开发 (1),JavaEE 进阶,java-ee,spring,mvc

image.png
image.png
[外链图片转存中…(img-N1HXoG73-1691714953614)]
先在 Developer Tools 里面添加工具
image.png
然后在 Web 里面添加工具
[外链图片转存中…(img-4cZC0kUO-1691714953615)]

我们仔细看一下 IDEA 对于 Spring Web 的介绍
[外链图片转存中…(img-OQD36Siu-1691714953615)]

然后点击 Next
image.png
接下来打开 Maven 窗口
方法一 :
[外链图片转存中…(img-8rYltOKb-1691714953616)]
[外链图片转存中…(img-nYmshUD2-1691714953616)]
方法二 :
在 pom.xml 里面右键 , 点击 Add as Maven Project
[外链图片转存中…(img-FztgXH6Y-1691714953616)]
然后把无关文件删掉即可
image.png

2.2 连接 HTTP 请求

我们需要使用一个注解 : @RequestMapping(“/xxx”) , 这个注解代表的就是我们的路由 , 通过括号中的地址我们可以访问到特定的页面
接下来我们创建一个 controller 包 , 里面创建 WebController 类

package com.example.demo.controller;

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

@RequestMapping("/web")
public class WebController {

    @RequestMapping("/hi")
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

接下来运行一下 , 看一下效果
image.png
访问不到 ? 我加了路由了啊 , 这怎么回事 ?
这是因为我们虽然加了路由 , 但是对应的类还没有加载 (就是你虽然加这个功能了 , 但是没有人调用) , 所以如果我们想要在 Spring Web 项目上启动的时候 , 就需要加类注解把映射的路径加载起来(添加 @Controller 注解 )

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/web")
public class WebController {

    @RequestMapping("/hi")
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

image.png
不是吧 阿sir , 怎么还不好使 ?
其实这是因为我们最早的 Spring MVC 是将视图返回给用户 , 所以我们的 Spring MVC 会以为我们返回的是一个视图 , 他就会找我们的视图去了 , 但是我们只是返回一句话 , 并没有返回视图 , 所以没找到 , 就会报了 404 , 他的解决办法就是 : 加注解 @ResponseBody , 这个注解的作用意思就是告诉 Spring MVC 我们返回的不是一个视图

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 // 告诉 Spring MVC 当前类返回的是非静态页面(非视图)
@RequestMapping("/web") // 使用"/web"可以访问到当前类
public class WebController {

    @RequestMapping("/hi") //使用"/web/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

[外链图片转存中…(img-IF2kWYnB-1691714953617)]
我们的 @ResponseBody @RequestMapping 不光能修饰类 , 还可以修饰方法
我们可以把 @ResponseBody 移到方法上面

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 启动的时候加载并注册
@RequestMapping("/web") // 使用"/web"可以访问到当前类
public class WebController {

    @ResponseBody // 告诉 Spring MVC 当前方法返回的是非静态页面
    @RequestMapping("/hi") //使用"/web/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

重新运行
image.png
也是可以成功运行的
我们的 @ResponseBody 也是可以不写的 , 直接返回视图 .
比如我们新建一个前端界面
[外链图片转存中…(img-bmS6Osqi-1691714953617)]
然后把这段代码输入进去

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>我是 index.html 页面</h1>
</body>
</html>

接下来回到 WebController.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 启动的时候加载并注册
@RequestMapping("/web") // 使用"/web"可以访问到当前类
public class WebController {

    //@ResponseBody // 不加 @ResponseBody 默认返回视图
    @RequestMapping("/hi") //使用"/web/hi"可以访问到当前方法
    public Object sayHi() {
        return "/index.html";
    }
}

image.png
那么有的同学觉得写 @ResponseBody @Controller 很麻烦 , 那么其实可以写成一个注解 : @RestController

package com.example.demo.controller;

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

@Controller // 是一个控制类,要在 Spring 启动的时候加载并注册
@RestController // @RestController = @ResponseBody + @Controller
public class WebController {
    @RequestMapping("/hi") //使用"/web/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

这样的话我们地址栏就直接输入方法的路由即可
image.png
目前为止 , 我们想要使用 Spring MVC , 我们需要加三个注解

  1. @Controller
  2. @RequestMapping
  3. @ResponseBody

其中 , 1 和 3 可以合并成 @RestController
[外链图片转存中…(img-IqKwITBn-1691714953617)]
image.png

@Controller 注解可以换成其他五大类注解吗

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
@ResponseBody
public class WebController {
    @RequestMapping("/hi") //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

目前程序是没问题的
image.png
那么我们把 @Controller 换成其他注解呢 ?

package com.example.demo.controller;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Component
@ResponseBody
public class WebController {
    @RequestMapping("/hi") //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

运行一下 , 看一下效果
image.png
艾玛 , 报错了
那试一下 @Service 呢 ?

package com.example.demo.controller;

import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Service
@ResponseBody
public class WebController {
    @RequestMapping("/hi") //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

image.png
还是不行 , 那么基本就是只能使用 @Controller 了
那这是因为什么呢 ? 不知道大家是否还记得这张图 ?
[外链图片转存中…(img-4XsdqcyQ-1691714953618)]
前端的数据是先传给 @Controller 的 , 只有 @Controller 才能实现将类里面的方法和类进行数据注入

@RequestMapping 注解 Get 请求和 Post 请求都可以访问吗?

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
@ResponseBody
public class WebController {
    @RequestMapping("/hi") //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

Get 请求一定是可以的 , 因为我们在地址栏输入地址 , 就产生了 Get 请求 , 我们也可以抓个包看看
image.png
image.png
那么我们测试一下 Post 请求可不可以 , 那么怎么构造请求呢 , 这就需要用到 Postman 了
image.png
也打印出来了内容 , 这就说明 Post 请求也是没问题的

@RequestMapping(value = “/hi”,method = RequestMethod.POST) 方式

这个注解的意思是该 方法/类 只支持使用 POST 方法访问
那假如你的书背产品经理提出了要求 : 我们的产品只支持 Post 请求 , 不支持 Get 请求 , 你该怎样做呢 ?
我们就可以在 @RequestMapping 后面加参数

@RequestMapping(value = "/hi",method = RequestMethod.POST)

我们来试一下

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class WebController {
    @RequestMapping(value = "/hi",method = RequestMethod.POST) //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

image.png
改成 Get 访问呢 ?
image.png
也可以在浏览器地址栏来测试
image.png
所以这种写法只支持 POST 请求 , 不支持 GET 请求
但是我们还有更好的写法 , 来康康吧

@GetMapping 和 @PostMapping

我们测试一下 @PostMapping , 使用这个注解就可以实现只允许 POST 请求

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
public class WebController {
    @PostMapping("/hi") //使用"/hi"可以访问到当前方法
    public Object sayHi() {
        return "Hi,Spring MVC.";
    }
}

在 Postman 里面发送 post 请求 , 能正常显示结果
image.png
发送 Get 请求就会报错
image.png
@GetMapping 同理


到目前为止 , 我们 Spring MVC 的连接可以用三个注解

  1. @RequestMapping : 支持所有类型的接口访问(包含 Get/Post…)
  2. @PostMapping : 只支持 Post 请求
  3. @GetMapping : 只支持 Get 请求

注意 : 以上注解需要配合 @Controller 或者 @RestController 一起使用文章来源地址https://www.toymoban.com/news/detail-642587.html

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

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

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

相关文章

  • Spring MVC 程序开发

    目录 什么是 Spring MVC? MVC 定义 MVC 和 Spring MVC 的关系 为什么要学 Spring MVC? Spring MVC 项目的创建 学习 Spring MVC 的 三个目标 Spring MVC项目的连接(用户 和 程序 的 映射) 方法1:@RequestMapping(“/xx”) @RequestMapping 是 post 还是 get 请求? 总结 拓展  方法2 和 方法 3:@GetMapping  和

    2024年02月15日
    浏览(43)
  • Spring MVC程序开发

    目录 1.什么是Spring MVC? 1.1MVC定义 1.2MVC和Spring MVC的关系 2.为什么要学习Spring MVC? 3.怎么学Spring MVC? 3.1Spring MVC的创建和连接 3.1.1创建Spring MVC项目 3.1.2@RequestMapping 注解介绍 3.1.3 @RequestMapping 是 post 还是 get 请求? ​编辑 3.1.4 @GetMapping 和 PostMapping 3.2 获取参数 3.2.1 传递单个参数

    2024年02月14日
    浏览(43)
  • Java EE 突击 14 - Spring AOP

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

    2024年02月11日
    浏览(44)
  • Java EE 突击 9 - Spring Boot 日志文件

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

    2024年02月13日
    浏览(51)
  • 三、使用注解形式开发 Spring MVC程序

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

    2024年02月12日
    浏览(39)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第五天)MyBatis的注解开发

    ​ 昨天我们深入学习了 MyBatis多表之间的关联映射,了解掌握了一对一关联映射,一对多关联映射,嵌套查询方式以及嵌套结果方式,掌握了缓存机制的一级缓存,二级缓存等概念,也使用了代码进行复现理解 。但是都是基于XML配置文件的方式来实现的,现在我们要学习一下

    2024年02月11日
    浏览(64)
  • (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL,Mybatis的关联映射,一对一、一对多、多对多、Mybatis的缓存机制,一二级缓存的开启和设置,缓存命中率、如何使用idea链接数据库自动生成pojo类等。我们学

    2024年02月10日
    浏览(67)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第三天)动态SQL

    昨天我们深入学习了 Mybatis的核心对象SqlSessionFactoryBuilder , 掌握MyBatis核心配置文件以及元素的使用 ,也掌握MyBatis映射文件及其元素的使用。那么今天我们需要掌握的是更加复杂的查询操作。 学会编写MyBatis中动态SQL 学会MyBatis的条件查询操作 学会MyBatis的更新操作 学会MyBati

    2024年02月11日
    浏览(53)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第一天)Mybatis的学习

    一、当前的主流框架介绍(这就是后期我会发出来的框架学习) Spring框架 ​ Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的 ,其主要优势之一就是分层架构。 Spring提供了更完善的开发环境,可以为POJO(Plain Ordinary Java Object,普通Java对象 )对象提供企业级

    2024年02月12日
    浏览(58)
  • SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习

    上一篇我们的项目搭建好了,也写了简答的Junit测试类进行测试,可以正确映射到数据库中。 那么这篇文章来深入学习一下以下几个点: 了解 MyBatis的核心对象SqlSessionFactoryBuilder 以及它的作用 掌握MyBatis核心配置文件以及元素的使用 。 掌握MyBatis映射文件及其元素的使用 。

    2024年02月11日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包