Spring MVC 详解 (Spring Boot)

19 篇文章 2 订阅
订阅专栏

一、什么是 Spring MVC

官方描述:
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”.
引⽤来⾃: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
翻译为中⽂:
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。

从上述定义我们可以得出两个关键信息:
1)Spring MVC 是⼀个 Web 框架。
2)Spring MVC 是基于 Servlet API 构建的。

然⽽要真正的理解什么是 Spring MVC?我们⾸先要搞清楚什么是 MVC?

1.1 MVC 定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。
在这里插入图片描述

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

1.2 MVC 和 Spring MVC 的关系

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

1.3 学习目的

现在绝⼤部分的 Java 项⽬都是基于 Spring(或 Spring Boot)的,⽽ Spring 的核⼼就是 Spring MVC。简单来说,咱们之所以要学习 Spring MVC 是因为它是⼀切项⽬的基础,我们以后创建的所有 Spring、Spring Boot 项⽬基本都是基于 Spring MVC 的。

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

二、Spring MVC 创建和连接

2.1 创建 Spring MVC 项目

Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同(Spring MVC 使用 Spring Boot 的⽅式创建),在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬:

在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架,如下图所示:
在这里插入图片描述

项目创建与简单使用 博客链接: https://blog.csdn.net/yyhgo_/article/details/128639865?spm=1001.2014.3001.5501

2.2 相关注解

@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。

路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。

@RequestMapping 既可以修饰类,也可以修饰方法:

  • 单独只修饰方法时,访问的地址是方法的 @RequestMapping 的路由。
  • 当修饰类和方法时,访问的地址是类 + 方法的 @RequestMapping 的路由。
package com.example.demo.controller;

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

@RequestMapping("/web")
public class WebController {
    @RequestMapping(value = "/hi")
    public Object sayHi() {
        return "Hi,Spring MVC";
    }
}

此时访问 http://localhost:8080/web/hi,报错:
在这里插入图片描述
为什么呢?
此时虽然你加了这个功能了,但是类还没有加载,没有人调用啊!所以要先加载并注册:加类注解 @Controller

我们有五大类注解,添加其他的类注解是否可行呢?
之前我们讲过:
在这里插入图片描述
每个注解都有各自的使用场景,此处只有 @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(value = "/hi")
    public Object sayHi() {
        return "Hi,Spring MVC";
    }
}

重新启动并访问 http://localhost:8080/web/hi,依然报错:
在这里插入图片描述
为什么呢?
因为最开始咱们介绍 MVC 时就说过,“V” 代表 “视图 (View)”,但此时我们返回的并不是一个 HTML 页面…
所以需要再加上一个注解 @ResponseBody,表示返回的仅仅是响应正文,而不是一个页面:
(或者使用组合注解 @RestController,表示 @Controller + @ResponseBody)

@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
@ResponseBody
@RequestMapping("/web")
public class WebController {
    @RequestMapping(value = "/hi")
    public Object sayHi() {
        return "Hi,Spring MVC";
    }
}

在这里插入图片描述

顺利访问了 ~~

如今大都是“前后端分离”,所以返回“视图” (HTML 页面) 的情况并不多。


@RequestMapping 处理的是什么方法的HTTP请求呢?
经过使用 Postman 测试,2.6.3 版本之后,@RequestMapping 默认情况下对于各种类型的 HTTP 请求均可以处理!

指定 GET/POST 方法类型:

  1. 设置 method:@RequestMapping(value = "/hi",method= RequestMethod.POST)
    (RequestMethod.POST 是枚举的值)
    此时只能接收 POST 请求了!
  2. 使用 @GetMapping 和 PostMapping:@PostMapping(value = "/hi")
    使用这两个注解替代 @RequestMapping。

三、获取参数

3.1 使用 Servlet API

前面我们讲了:Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架。所以 Servlet 学的那些在 Spring MVC 这里同样适用:getParameter() 方法!

对于每个方法来说,它有两个默认的内置的参数:HttpServletRequest 和 HttpServletResponse。
可以随时得到他们,直接在参数里写了就行,然后我们就可以使用 Servlet 的方式获取参数了!

在这里插入图片描述
详细讲解博客链接: https://blog.csdn.net/yyhgo_/article/details/128494852?spm=1001.2014.3001.5501

缺点:
1)需要先声明出 HttpServletRequest 和 HttpServletResponse 参数。
2)返回的数据类型永远是 String,假如想要使用 int 等类型,需要先进行强转,可能会出现空指针异常。

3.2 通过方法参数直接拿到

3.2.1 传递单个参数

在 Spring MVC 中可以直接⽤⽅法中的参数来实现传参,比如以下代码:

    /**
     * 获取单个参数
     *
     * @return
     */
    @RequestMapping("/get1")
    public String getParam1(Integer age) {
        return "value:" + age;
    }

通过 http://localhost:8080/web/get1?age=5 访问:
在这里插入图片描述

参数名一定要对应!
在这里插入图片描述

这里为什么不使用 int,而使用 Integer 呢?
若我们在输入 URL 时没有传入对应的参数,使用 Integer 时会输出 null;而使用 int 时会直接报错!
因为 int 是基本数据类型,并不会有 null 值,而 Integer 是包装类 ~~

3.2.2 传递多个参数

    /**
     * 获取多个参数(2个及以上)
     *
     * @param name
     * @param age
     * @return
     */
    @RequestMapping("/get2")
    public String getParam2(String name, Integer age) {
        // 执行到此行已经得到了前端传递参数的值,就可以随意使用了
        return "name:" + name + " | age:" + age; // 返回的顺序无所谓
    }

参数的先后顺序没有影响,因为是根据参数名来拿的 ~~

访问 http://localhost:8080/web/get2?age=7&name=yyh:
在这里插入图片描述

3.2.3 对象接收

当参数很多时,以上方法不利于修改和维护,这时我们可以传递对象!

首先要封装一个对象:

package com.example.demo.model;

import lombok.Data;

@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private String classname;
    // ....
}
    /**
     * 获取参数类型为对象的 demo
     *
     * @param student
     * @return
     */
    @RequestMapping("/get3")
    public String getParam3(Student student) {
        return student.toString();
    }

访问 localhost:8080/web/get3?id=3&name=张三&age=18&classname=六三:
(前端依然正常传递参数,后端拿到后会 setter 到对象的属性中)

在这里插入图片描述

Student 就是一个普通的实体类,不需要做特殊的处理。属性名一定要对应!在这里插入图片描述

在这里插入图片描述

3.2.4 form 表单参数传递

根据场景选择 多个参数接收 / 对象接收。

3.2.5 ajax 参数传递

同 form 表单参数传递。

举个登录的例子:
在这里插入图片描述

    @RequestMapping("/login2")
    public HashMap<String, Object> login2(String name, String password) {
        HashMap<String, Object> result = new HashMap<>();
        result.put("name", name);
        result.put("password", password);
        return result;    // 业务代码先省略~
    }

这里我们让服务器返回的是一个 HashMap,响应就会自动解析成 json 格式的数据!
(可以通过 抓包查看 / console.dir()后在浏览器控制台查看)

3.2.6 传递JSON对象 – @RequestBody

在这里插入图片描述

{"id":1,"name":"java","password":"javapwd"}

后端接收代码:

package com.example.demo.model;

import lombok.Data;

@Data
public class Person {
    private Integer id;
    private String name;
    private String password;
}
    @RequestMapping(value = "/login1", method = RequestMethod.POST)
    public Object method_5(@RequestBody Person person) {
        HashMap<String, Object> result = new HashMap<>();
        result.put("id", person.getId());
        result.put("name", person.getName());
        result.put("password", person.getPassword());
        return result;    // 业务代码先省略~
    }

通过 http://localhost:8080/web/login1 ,Send 后:
在这里插入图片描述

由此:
1)当传递 json 对象时,接收参数必须是一个对象,且前面必须加上 @RequestBody 注解。
2)返回一个 HashMap 对象时,响应就会自动解析成 json 格式的数据。
在这里插入图片描述

3.2.7 上传文件 – @RequestPart

    @RequestMapping("/reg")
    public String reg2(String name, @RequestPart("myfile") MultipartFile file) throws IOException {
        // 保存文件
        file.transferTo(new File("C:\\yyhjava_project\\tmp\\yyh.jpg"));
        return "success";
    }

上传文件加上 @RequestPart("xxx") 注解!!!

同样可以使用 Postman:(或者构造一个 form 表单)
在这里插入图片描述

此时查看我的保存路径下:

在这里插入图片描述

成功保存在服务器端了 ~


其他类型的文件如MP3、MP4格式…的也可以传递,这时可以拼接一下:

    @RequestMapping("/param")
    public String param(String name, @RequestPart("myfile") MultipartFile file) throws IOException {
        // 获取⽂件后缀名
        String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        // ⽂件保存地址
        String filePath = ClassUtils.getDefaultClassLoader().getResource("static").getPath() + "/" + UUID.randomUUID() + fileName;
        // 保存⽂件
        file.transferTo(new File(filePath));
        return filePath + " 上传成功.";
    }

获取项目目录的几种方式:

ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath();
new ClassPathResource("").getFile().getAbsolutePath();
ClassUtils.getDefaultClassLoader().getResource("").getPath();
ResourceUtils.getFile("classpath:static/").getPath();

3.2.8 获取Cookie/Session/header

使用 Servlet API

Servlet API 详细讲解博客链接: https://blog.csdn.net/yyhgo_/article/details/128494852?spm=1001.2014.3001.5501
Cookie/Session 详细讲解博客链接: https://blog.csdn.net/yyhgo_/article/details/128511187?spm=1001.2014.3001.5501

简洁获取Cookie – @CookieValue
    /**
     * spring mvc 获取 cookie 值
     */
    @RequestMapping("/getck")
    public String getCookie(@CookieValue("yyh") String bite,
                            @CookieValue("java") String java) {
        return "yyh:" + bite + " |java:" + java;
    }

验证:
首先访问路由 http://localhost:8080/web/getck:

此时没有 “yyh” 和 “java” 这两个 Cookie,所以报错:

在这里插入图片描述

这时打开开发者工具设置 Cookie:

在这里插入图片描述

设置完成后重新刷新页面,就可以得到:

在这里插入图片描述

默认设置的 Cookie 是在内存中存储的,并没有持久化。可以通过一些方式来实现持久化 ~

简洁获取Header – @RequestHeader
    /**
     * 读取请求头 header 里面的信息
     *
     * @param userAgent
     * @return
     */
    @RequestMapping("/get_header")
    public String getHead(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent:" + userAgent;
    }

访问 http://localhost:8080/web/get_header:

在这里插入图片描述

Session 存储和获取 – @SessionAttribute(获取)

Session 存储和 Servlet 类似,如下代码所示:

    @RequestMapping("/setsess")
    public String setsess(HttpServletRequest request) {
        // 获取 HttpSession 对象,参数设置为 true 表示如果没有 session 对象就创建⼀个 session
        HttpSession session = request.getSession(true);
        if(session!=null){
            session.setAttribute("username","java");
        }
        return "session 存储成功";
    }

获取 Session 可以使用 HttpServletRequest,如下代码所示:

    @RequestMapping("/sess1")
    public String sess1(HttpServletRequest request) {
        // 如果 session 不存在,不会⾃动创建
        HttpSession session = request.getSession(false);
        String username = "暂⽆";
        if(session!=null && session.getAttribute("username")!=null){
            username = (String) session.getAttribute("username");
        }
        return "username:"+username;
    }

获取 Session 更简洁的方式:

    @RequestMapping("/sess2")
    public String sess2(@SessionAttribute(value = "username",required = false)
                                String username) {
        return "username:"+username;
    }

required 参数 :(“是否必需”)

  • 不设置默认为 true:session 不存在的话就会报错;
  • 设置为 false:session 不存在也不会报错,而是返回 null ~

验证:
1)访问 http://localhost:8080/web/setsess:
在这里插入图片描述

此时多了一个名为 JSESSIONID 的 Cookie。会话建立了 ~

2)访问 http://localhost:8080/web/sess1:
在这里插入图片描述

3)访问 http://localhost:8080/web/sess2:
在这里插入图片描述

都能成功获取会话!

若我们在控制台修改了 JSESSIONID 的 value,是无法正确访问到会话的!:
在这里插入图片描述

3.3 扩充知识点

3.3.1 后端参数重命名 (后端参数映射)

某些情况下,前端传递的参数 key 和我们后端接收的 key 不⼀致,这样就会导致参数接收不到。如果出现了这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值。

后端代码示例:

    /**
     * 后端参数重命名
     *
     * @param time
     * @return
     */
    @RequestMapping("/gettime")
    public String getTime(@RequestParam(value = "t", required = false) String time) {
        return "time:" + time;
    }

访问 http://localhost:8080/web/gettime?t=2023:

在这里插入图片描述

required 参数起着同样的效果 ~
在这里插入图片描述
源码:
在这里插入图片描述

3.3.2 获取URL中参数 – @PathVariable

一些特殊场景可能需要直接在URL中传递参数 (不在query string中)!

例如想让网站在搜索引擎中展现的优先级高一些。

后端实现代码:

    /**
     * 从 url 中获取参数
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("/login4/{name}/{password}")
    public String login4(@PathVariable("name") String username,
                         @PathVariable String password) {
        return "username:" + username + " | password:" + password;
    }

@PathVariable 中设置参数也相当于重命名了。

访问 http://localhost:8080/web/login4/yyh/632:

在这里插入图片描述

成功获取到了URL中的参数 ~

四、返回数据

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

4.1 返回静态页面

创建前端页面 index.html:

在这里插入图片描述

创建控制器 controller:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/p")
public class PersonController {
    @RequestMapping("/index")
    public Object index(){
        // 执⾏业务...
        // 返回view -> index.html
        return "/index.html";
    }
}

访问 http://localhost:8080/p/index 返回 index.html 页面 ~

4.2 返回 text/html

    @RequestMapping("/m7")
    @ResponseBody
    public String method_7() {
        return "<h1>Hello,HTML~</h1>";
    }

访问 http://localhost:8080/p/m7:

在这里插入图片描述

Fiddler 抓包:(响应)
在这里插入图片描述

4.3 返回 JSON 对象

    @RequestMapping("/m8")
    @ResponseBody
    public HashMap<String, String> method_8() {
        HashMap<String, String> map = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }

访问 http://localhost:8080/p/m8:

在这里插入图片描述

Fiddler 抓包:(响应)
在这里插入图片描述

4.4 请求转发或请求重定向

现在很多场景的转发/重定向都由前端来完成了 ~

forward VS redirect

return 不但可以返回⼀个视图,还可以实现跳转,跳转的⽅式有两种:

  • forward:请求转发
  • redirect:请求重定向

请求转发和重定向的使⽤对比:

    // 请求转发
    @RequestMapping("/index2")
    public String index2(){
        return "forward:/index.html";
    }
    // 请求重定向
    @RequestMapping("/index")
    public String index(){
        return "redirect:/index.html";
    }

“转发” 和 “重定向” 理解:转发是服务器帮转的;而重定向是让浏览器重新请求另⼀个地址。

forward 和 redirect 具体区别如下:

  1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
  2. 请求重定向地址发生变化;请求转发地址不发生变化。
  3. 请求重定向与直接访问新地址效果⼀致,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。

4.5 @ResponseBody 补充说明

  • @ResponseBody 返回的值如果是字符串会转换成 text/html,如果返回的是对象会转换成 application/json 返回给前端。
  • @ResponseBody 可以⽤来修饰方法或者是修饰类,修饰类表示类中的所有方法都会返回 html 或者 json,而不是视图。
  • @RestController = @Controller + @ResponseBody

查看更多注解,官方API:
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping

SpringBoot Spring MVC
专注基础架构领域
03-17 5044
这个注释的意思是,当调用这个方法的时候,会从一个名叫accountCache的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。作用:@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据,需要注意的是,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
详解Spring MVCSpring Boot中使用Filter打印请求参数问题
08-19
主要介绍了详解Spring MVCSpring Boot中使用Filter打印请求参数问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
spring boot入门与理解MVC三层架构
qq_42514371的博客
08-03 6263
spring boot入门与理解MVC三层架构
JavaSpring Boot详解
03-12
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简单的来说 Spring Boot 这个项目整合目前很多的流行的第三方框架,并且做了一系列的默认配置,我们无需在进行手动配置,直接拿过来直接使用! 接下来我们比较一下Spring mvcSpring Boot的开发过程 Spring mvc (1)导入 spring mvc 的相关依赖包 (2)在 web.xml 文件中配置 Spring mvc 的前端控制器 (3)创建一个 spring mvc 的配置文件 (4)在 spring mvc 的配置文件中进行相关配置   1) 配置注解扫描路径   2)配置处理器映射器   3)配置处理器适配器   4)配置视图解析器 (5)开发 Controller
SpringBoot & SpringMVC (详解)
最新发布
qq_45559559的博客
03-24 1346
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分 为模型、视图和控制器三个基本部分。Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据, 控制⽤户输⼊,并向模型发送数据。
详解Spring MVC/Boot 统一异常处理最佳实践
08-26
在 Web 开发中, 我们经常会需要处理各种异常,这篇文章主要介绍了详解Spring MVC/Boot 统一异常处理最佳实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Spring Boot中扩展XML请求与响应的支持详解
08-26
主要给大家介绍了关于Spring Boot中扩展XML请求与响应的支持的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
springboot-mvc完整版教程(图文结合)
01-21
此教程包含、springmvc/spring/springboot/security/docker/springcloud,详细分析springboot原理,并由代码示例,适合作为学习参考资料。
SpringbootSpringboot下的MVC
shiyansama的博客
06-07 3823
3.3 Spring Boot 下的 Spring MVC Spring Boot 下的 Spring MVC 和之前的 Spring MVC 使用基本是一样的,主要有以下注解: 3.3.1 @Controller Spring MVC 的注解,表名该类用于处理 http 请求 3.3.2 @RestController Spring 4 后新增注解,是@Controller 注解功能的增强是 @Controller 与@ResponseBody 的组合注解 。如果一个 Controller 类添加了@Re
springmvc详解
ss810540895的博客
05-27 1万+
原文 目录 P1、前言 1、回顾MVC 1.1、什么是MVC 1.2、Model1时代 1.3、Model2时代 1.4、回顾Servlet 2、什么是SpringMVC 2.1、概述 2.2、中心控制器 2.3、SpringMVC执行原理 P2、第一个MVC程序 1、 配置版 2、 注解版 3、小结 P3、RestFul和控制器 1、控制器Controller 2、实现Controller接口 3、使用注解@Controller 4、RequestMapping 5、
【框架篇】Spring MVC 介绍及使用(详细教程)
小杨的博客
08-03 2万+
Spring MVCSpring框架提供的基于MVC架构并继承了Servlet API的Web开发框架。它遵循MVC模式的原则,提供了一套完整的开发流程和特性。通过Spring框架的支持,它能够实现灵活性、可配置性和可扩展性,帮助开发者构建高性能的Web应用程序。
SpringBootSpringMVC的关系(清晰,简单)
热门推荐
时光钟摆
11-29 4万+
spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvcspring mvc 只是spring 处理web层请求的一个模块。因此他们的关系大概就是这样:spring mvc  &lt; spring &lt;springboot。 理清SpringBootSpringMVC的关系 Spring 框架就像一个家族,有众...
详解快速搭建Spring Boot+Spring MVC
08-28
本篇文章主要介绍了详解快速搭建Spring Boot+Spring MVC,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring MVC框架看这篇就够了
weixin_46103589的博客
06-23 934
Spring MVC 全称 “Spring Web MVC” 是一个构建的原始 ,从一开始就包含在 Spring 框架中Web 框架在之前学习 Servlet 的时候就已经接触到 Web 。所谓的 Web 框架,就是当用户输入一个 URL 地址后,将 URL 地址和程序进行映射,然后通过程序获取到用户的请求,经过请求的处理后,服务器发送的响应能够返回到客户端,将结果展示给用户Servlet API有关 Servlet API 的介绍文章MVC 含义MVC 是一种软件工程中的一种软件架构模式,将软件系统分成了
SpringSpringMVCSpringBoot
又小雨的博客
08-22 4023
SpringSpringMVCSpringBoot 1.Spring是什么? Spring是一个轻量级的控制反转(Ioc)面向面切编程(AOP)容器的开源框架。降低了开发的难度、低入侵、解耦合、声明事务管理方便集成其他框架、容器 spring的大小和开销都是轻量级的 通过控制反转(Ioc)和依赖注入(DI)将对象的创建和属性赋值工作都交给spring处理,从而达到解耦合的目的 提供了 面向切面编程的功能,可以通过分离应用的业务逻辑与系统服务来进行内聚性的开发 因为包含管理对象的配置和生命
SpringMVC框架详解(学习总结)
swy2560666141的博客
03-20 1万+
MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,业务模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。MVC 属于架构模式的一种,所谓架构就是如何设计一个程序的结构。MVC 将程序结构划分为三层,每一层都对外提供了可供上层调用的接口,既能维系三层之间的联系,也能保持相对的独立性。这种将业务逻辑、数据和界面分离的代码组织形式,降低了模块间的耦合度,有利于日后的维护与扩展。
如何在Spring Boot中使用Spring MVC
Joker_ZJN的博客
04-11 3864
一文聊明白在Spring Boot中如何使用Spring MVC的功能。
SpringMVC详解
互联网底层民工的博客
07-14 8774
SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分。简化开发,减少出错,方便组内开发人员之间的配合。 他通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口。同时它还支持Restful编程风格的请求。
Spring MVC详解(转)
朱塔山的博客
06-26 1万+
1.1介绍Spring MVCSpring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能Java Web开发者必须要掌握的技术框架1.2MVC是什么MVC是一种软件架构思想,把软件按照模型,视图,控制器来划分Model:模型层,指工程中的JavaBean,用来处理数据JavaBean分成两类:一类称为实体类Bean:专门用来存储业务数据,比如Student,User。
springmvc spring security
08-13
回答: Spring Security是一个封装比较完整安全的认证授权框架,能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案。它使用Spring AOP技术来实现方法级别的保护。在Spring MVC项目中使用Spring Security需要进行一些配置。首先,在Spring配置文件中添加以下配置才能使Spring Security保护那些使用相关注解的方法: `<global-method-security secured-annotations="enabled" />`。其次,根据当前环境的不同,Spring Security的初始化也有两种情况。如果当前环境没有使用SpringSpring MVC,需要将WebSecurityConfig(Spring Security配置类)传入超类,以确保获取配置并创建Spring上下文。相反,如果当前环境已经使用Spring,我们应该在现有的Spring上下文中注册Spring Security。最后,Spring Security默认的请求路径可以在Spring Security的配置类中进行设置。在Spring Boot项目中引入Spring Security非常简单,使用Spring Security能够减少为企业系统安全控制编写大量重复代码的工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringMVC ——Spring Security 入门详解](https://blog.csdn.net/qq_40741855/article/details/89358947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springsecurity oauth2.0 spring mvc集成spring security 3](https://blog.csdn.net/u011066470/article/details/119280237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • SpringBoot 统一功能处理 9078
  • 表白墙 -- 前后端代码详解 7491
  • Spring AOP 详解 6156
  • 实现分页查询 5330
  • Tomcat基本用法 5227

分类专栏

  • 项目相关 3篇
  • Spring相关 19篇
  • 网络与Web开发 19篇
  • 操作系统与多线程 11篇
  • MySQL数据库基础 6篇
  • 数据结构 16篇
  • Java SE 12篇
  • 面试 7篇

最新评论

  • Spring MVC 详解 (Spring Boot)

    宾语补足语: spring boot中的mvc架构具体表现在哪里?

  • Spring MVC 详解 (Spring Boot)

    jahseh21: goooooood表情包

  • Spring MVC 详解 (Spring Boot)

    迷糊的路灯: 讲的不错,但是还有个注解是@ModelAttribute没讲到

  • Servlet基础教程 (保姆级教学)

    北北叮叮铛铛响: 谢谢你,yyh大佬表情包

  • 线程池 (通俗易懂)

    庄弯弯: 写的很好表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Appium自动化测试知识点
  • Java与Pyhton对比
  • 三次握手、四次挥手过程;TCP保证可靠传输
2023年33篇
2022年59篇

目录

目录

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyhgo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司河池关键词按天收费报价青岛外贸网站制作推荐珠海网站推广工具报价盘锦百搜标王报价重庆阿里店铺托管公司乌海推广网站推荐深圳网站设计模板价格抚州seo优化价格孝感关键词按天收费多少钱杭州百姓网标王哪家好南联网站制作多少钱东营百度竞价公司宝鸡模板制作推荐淄博关键词按天扣费价格和田建站多少钱张掖百度seo价格临猗网站推广公司韶关百姓网标王推广价格咸宁网站推广工具公司南联网站排名优化哪家好广元百搜标王爱联网站推广方案多少钱衢州建设网站价格湘潭网站设计模板推荐马鞍山英文网站建设公司乌海品牌网站设计贺州网站优化软件价格乐山模板制作公司自贡阿里店铺托管哪家好湘潭seo网站推广多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化