当前位置: 首页 > news >正文

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录

  • 零、学习目标
  • 一、Spring MVC 自动配置
    • (一)自动配置概述
    • (二)Spring Boot整合Spring MVC 的自动化配置功能特性
  • 二、Spring MVC 功能拓展实现
    • (一)创建Spring Boot项目 - SpringMvcDemo2021
    • (二)改造当前项目 - 移植上一讲项目的内容
    • (三)写MVC配置文件,定义视图跳转
      • 1、注释掉登录控制器toLoginPage()方法上的注解
      • 2、创建自定义MVC配置类 - MyMvcConfig
      • 3、修改登录页面,注释掉显示年份的代码
      • 3、启动应用,测试效果
    • (四)编写拦截器,让登录页面显示年份
      • 1、创建自定义拦截器 - MyInterceptor
      • 2、在自定义MVC配置类里加载自定义拦截器
      • 3、修改登录页面,取消显示年份的注释
      • 4、启动应用,测试效果
    • (五)编写登录拦截器,防止非登录用户查看全部用户信息
      • 1、还原登录控制器中的toLoginPage方法的注解
      • 2、在自定义MVC配置中注释掉相应的视图控制器
      • 3、在登录控制里修改login()方法
      • 4、在自定义拦截器里重写preHandle()方法
      • 5、在自定义MVC配置文件里排除不能拦截的路径
      • 6、启动应用,测试效果
  • 三、课后拓展练习
    • 1、改造用户实体类,添加password字段
    • 2、把session中保存的user字符串改造成user对象
    • 3、使用JPA等方式把用户保存到数据库中,使用数据库查询用户信息后进行登录判断

零、学习目标

  1. 了解Spring Boot中Spring MVC自动配置
  2. 掌握Spring Boot中Spring MVC功能扩展和定制

在Web开发中,会涉及到静态资源的访问支持、视图解析器的配置、转换器和格式化器的定制、文件上传下载等功能,甚至还需要考虑到与Web服务器关联的Servlet相关组件的定制,Spring Boot框架支持整合一些常用Web框架从而实现Web开发,并默认支持Web开发中的一些通用功能。

一、Spring MVC 自动配置

(一)自动配置概述

在Spring Boot项目中,一旦引入了Web依赖启动器spring-boot-starter-web,那么Spring Boot整合Spring MVC框架默认实现的一些XxxAutoConfiguration自动配置类就会自动生效,几乎可以在无任何额外配置的情况下进行Web开发。

(二)Spring Boot整合Spring MVC 的自动化配置功能特性

  1. 内置了两个视图解析器:ContentNegotiatingViewResolverBeanNameViewResolver
  2. 支持静态资源以及WebJars
  3. 自动注册了转换器和格式化器;
  4. 支持Http消息转换器;
  5. 自动注册了消息代码解析器;
  6. 支持静态项目首页index.html
  7. 支持定制应用图标favicon.ico
  8. 自动初始化Web数据绑定器ConfigurableWebBindingInitializer

二、Spring MVC 功能拓展实现

在这里插入图片描述

(一)创建Spring Boot项目 - SpringMvcDemo2021

  • 使用Spring Initializr方式创建Spring Boot项目,并在Dependencies依赖选择中选择Web依赖启动器和Thymeleaf依赖启动器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(二)改造当前项目 - 移植上一讲项目的内容

  • 复制第10讲案例【Thymeleaf18N】的html模板文件,国际化配置文件,全局配置文件和相关Java文件(除入口文件)到当前项目的相应位置
    在这里插入图片描述

  • 启动应用,查看是否成功
    在这里插入图片描述

  • 访问登录页面 - http://localhost:8080/toLoginPage
    在这里插入图片描述

  • 访问显示全部用户页面 - http://localhost:8080/allUsers
    在这里插入图片描述

(三)写MVC配置文件,定义视图跳转

1、注释掉登录控制器toLoginPage()方法上的注解

在这里插入图片描述

2、创建自定义MVC配置类 - MyMvcConfig

  • 实现接口WebMvcConfigurer,并重写addViewControllers方法
    在这里插入图片描述
    在这里插入图片描述
package net.hw.lesson11.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 功能:自定义MVC配置类* 作者:华卫* 日期:2021年05月26日*/
@Configuration // 配置类
public class MyMvcConfig implements WebMvcConfigurer {/*** 添加视图控制器* * @param registry*/@Overridepublic void addViewControllers(ViewControllerRegistry registry) {// 通过login.html访问时,直接跳转到login逻辑视图对应的页面,即login.html页面registry.addViewController("login.html").setViewName("login");// 通过toLoginPage访问时,也直接跳转到login逻辑视图对应的页面,即login.html页面registry.addViewController("toLoginPage").setViewName("login");}
}
  • 注意:自定义MVC配置类一定要添加注解@Configuration
  • 说明:toLoginPage()方法里通过model设置了属性currentYear,会在跳转到登录页面传递给前端,但是直接通过刚才定义的视图控制器来跳转,就没有数据的传递,因此,得修改登录页面代码,暂时不要显示年份,以免程序报错。

3、修改登录页面,注释掉显示年份的代码

在这里插入图片描述

3、启动应用,测试效果

  • 访问http://localhost:8080/toLoginPage
    在这里插入图片描述

  • 访问http://localhost:8080/login.html
    在这里插入图片描述

  • 两种方式都可跳转到login.html页面,当然此时都没有显示年份。

(四)编写拦截器,让登录页面显示年份

拦截器作用,就是在访问请求前或后进行相关的处理,比如访问资源前判断用户是否登录,如果登录则可以访问,否则不能进行访问。本案例是在访问请求后获取当年年份数据,带到登录页面去显示出来。

1、创建自定义拦截器 - MyInterceptor

  • 实现接口HandlerInterceptor,并实现postHandle()方法
    在这里插入图片描述
    在这里插入图片描述
  • 说明:请求前要处理就得重写preHandle()方法,请求后要处理就得重写postHandle()方法,请求完成之后要处理就得重写afterCompletion()方法
package net.hw.lesson11.interceptor;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;/*** 功能:自定义拦截器* 作者:华卫* 日期:2021年05月26日*/
@Component
public class MyInterceptor implements HandlerInterceptor {@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {request.setAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));        }
}

2、在自定义MVC配置类里加载自定义拦截器

  • 在MyMvcConfig重写addInterceptors()方法,加载自定义拦截器
    在这里插入图片描述

3、修改登录页面,取消显示年份的注释

在这里插入图片描述

  • 编译会报错,说无法解析currentYear,不用管它,因为数据不是来自控制器,而是来自拦截器,要运行时请求后才能获取数据,因此编译会报错。

4、启动应用,测试效果

  • 访问http://localhost:8080/toLoginPage
    在这里插入图片描述
  • 访问http://localhost:8080/login.html
    在这里插入图片描述
  • 两种方式都可以显示出年份,说明自定义拦截器中的postHandle()生效了。

(五)编写登录拦截器,防止非登录用户查看全部用户信息

  • 要求未登录用户不能查看用户信息,但是定义拦截器前,通过路径http://localhost:8080/allUsers是可以看到所有用户信息的。
    在这里插入图片描述

1、还原登录控制器中的toLoginPage方法的注解

在这里插入图片描述

2、在自定义MVC配置中注释掉相应的视图控制器

在这里插入图片描述

3、在登录控制里修改login()方法

在这里插入图片描述

4、在自定义拦截器里重写preHandle()方法

在这里插入图片描述

  • 拦截非登录用户,直接重定向到登录页面,强制其登录

5、在自定义MVC配置文件里排除不能拦截的路径

在这里插入图片描述

6、启动应用,测试效果

在这里插入图片描述

  • 未登录前,访问http://localhost:8080/allUsers,直接跳转到登录页面。登录成功后,才可以查看全部用户信息。

三、课后拓展练习

1、改造用户实体类,添加password字段

2、把session中保存的user字符串改造成user对象

3、使用JPA等方式把用户保存到数据库中,使用数据库查询用户信息后进行登录判断

相关文章:

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录 零、学习目标一、Spring MVC 自动配置(一)自动配置概述(二)Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现(一)创建Spring Boot项目 - SpringMvcDemo2021&#xff…...

chatgpt赋能python:Python安装EGG——一个简单的指南

Python安装EGG——一个简单的指南 如果你使用Python有一段时间了,你可能会遇到需要安装扩展包(Package)的情况。在Python中,这些扩展包的文件格式通常是.egg(Easy Installable GZip)。在本文中&#xff0c…...

Web前端-React学习

React基础 React 概述 React 是一个用于构建用户界面的JavaScript库。 用户界面: HTML页面(前端) React主要用来写HTML页面, 或构建Web应用 如果从MVC的角度来看,React仅仅是视图层(V),也就…...

【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

github仓库:https://github.com/open-rust-initiative/sensleak-rs Rust是一门神奇的编程语言,它提供了内存安全、零成本抽象、并发安全等特性,使开发人员能够编写高性能、高抽象和安全的代码。 这是我用rust开发的第一个工作,希望…...

搭建一个定制版New Bing吧

项目介绍 项目地址:https://github.com/adams549659584/go-proxy-bingai 引用项目简介:用 Vue3 和 Go 搭建的微软 New Bing 演示站点,拥有一致的 UI 体验,支持 ChatGPT 提示词,国内可用,国内可用&#xff…...

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻,上周Quest 3发布之后,本周苹果MR头显Vision Pro正式发布,也是本周AR/VR新闻的重头戏。 ​AR方面,苹果发布VST头显Vision Pro(虽然本质是台VR,但以AR场景为核心)以及visionOS&…...

在Spring Boot微服务使用JedisCluster操作Redis集群String字符串

记录&#xff1a;449 场景&#xff1a;在Spring Boot微服务使用JedisCluster操作Redis集群的String字符串数据类型。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。 1.微服务中配置Redis信息 1.1在pom.xml添加依赖 pom.xml文件&#xff1a; <…...

5.1 合并数据

5.1 合并数据 5.1.1 堆叠合并数据1、横向堆叠 concat()2、纵向堆叠 concat()和append() 5.1.2 主键合并数据 merge()和join()5.1.3 重叠合并数据 combine_first() 5.1.1 堆叠合并数据 堆叠就是简单地把两个表拼在一起&#xff0c;也被称作轴向连接、绑定或连接。依照连接轴的方…...

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…...

初探BERTPre-trainSelf-supervise

初探Bert 因为一次偶然的原因&#xff0c;自己有再次对Bert有了一个更深层地了解&#xff0c;特别是对预训练这个概念&#xff0c;首先说明&#xff0c;自己是看了李宏毅老师的讲解&#xff0c;这里只是尝试进行简单的总结复述并加一些自己的看法。 说Bert之前不得不说现在的…...

Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!

大家好&#xff0c;我们是 ggG 团队&#xff0c;我们开发的 markdown 笔记管理软件 Ficus Beta 版本正式发布了。详情可以见我们官网&#xff0c;也可以来我们仓库查看。 相对于 Alpha 版本&#xff08;可以在我们之前的博客中查看&#xff09;&#xff0c;主要有 3 点明显的提…...

基于Springboot+vue+协同过滤+前后端分离+鲜花商城推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离鲜花商城推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载: 链接&#xff1a;https://pan.baidu.com/s/1mf2rsB_g1DutFEXH0bPCdA 提取码&#xff1a;8888 【运行环境】Idea JDK1.8 Maven MySQL…...

MixQuery系列(一):多数据源混合查询引擎调研

背景 存储情况 当前的存储引擎可谓百花齐放,层出不穷。为什么会这样了?因为不存在One for all的存储,不同的存储总有不同的存储的优劣和适用场景。因此,在实际的业务场景中,不同特点的数据会存储到不同的存储引擎里。 业务挑战 然而异构的存储和数据源,却给分析查询带…...

d2l学习——第一章Introduction

x.0 环境配置 使用d2l库&#xff0c;安装如下&#xff1a; conda create --name d2l python3.9 -y conda activate d2lpip install torch1.12.0 torchvision0.13.0 pip install d2l1.0.0b0mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en.zip -o d2l-en.zip u…...

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题&#xff1a; 数字.数字. 文字 三级标题&#xff1a;数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序&#xff0c;逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…...

Matlab实现光伏仿真(附上完整仿真源码)

光伏发电电池模型是描述光伏电池在不同条件下产生电能的数学模型。该模型可以用于预测光伏电池的输出功率&#xff0c;并为优化光伏电池系统设计和控制提供基础。本文将介绍如何使用Matlab实现光伏发电电池模型。 文章目录 1、光伏发电电池模型2、使用Matlab实现光伏发电电池模…...

JVM零基础到高级实战之Java内存区域方法区

JVM零基础到高级实战之Java内存区域方法区 JVM零基础到高级实战之Java内存区域方法区 文章目录 JVM零基础到高级实战之Java内存区域方法区前言JVM内存模型之JAVA方法区总结 前言 JVM零基础到高级实战之Java内存区域方法区 JVM内存模型之JAVA方法区 JAVA方法区是什么&#xf…...

SpringCloud-stream一体化MQ解决方案-消费者组

参考资料: 参考demo 参考视频1 参考视频2 官方文档(推荐) 官方文档中文版 关于Kafka和rabbitMQ的安装教程,见本人之前的博客 rocketMq的安装教程 rocketMq仪表盘安装教程 重!!!...

HNU计算机图形学-作业二

HNU计算机图形学-作业二 作业二&#xff1a;纹理和照明前言介绍实施详细信息任务1&#xff1a;加载复杂对象任务2&#xff1a;纹理映射和照明任务3&#xff1a;互动活动和动画额外任务&#xff1a;增强场景的视觉效果&#xff08;最高20%&#xff09; 最终实现效果 作业二&…...

湖南大学OS-2020期末考试解析

【特别注意】 答案来源于@wolf以及网络 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张卷子有点老了,部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选择题(15%) 1.下列关于进程状态转换,不正确的是:C A. …...

【用户认证】密码加密,用户状态保存,cookie,session,token

相关概念 认证与授权 认证&#xff08;authentication &#xff09;是验证你的身份的过程&#xff0c;而授权&#xff08;authorization&#xff09;是验证你有权访问的过程 用户认证的逻辑 获取用户提交的用户名和密码根据用户名&#xff0c;查询数据库&#xff0c;获得完…...

LVS+Keepalivedd

Keepalived 一、Keepalived及其工作原理二、实验非抢占模式的设置 三、脑裂现象四、Nginx高可用模式 一、Keepalived及其工作原理 keepalived是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可用解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器…...

WPF开发txt阅读器7:自定义文字和背景颜色

文章目录 添加控件具体实现代码说明 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定书籍管理系统&#x1f48e;用树形图管理书籍 添加控件 除了字体、字体大小之外&#xff0c;文字和背景颜色也会影响阅读观感&#xff0c…...

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …...

chatgpt赋能python:如何安装pyecharts

如何安装pyecharts Pyecharts是一个基于echarts的数据可视化工具&#xff0c;它是Python语言的一个库&#xff0c;可以通过Python编程语言进行数据可视化&#xff0c;并且能通过交互式的方式展示出来。 在本文中&#xff0c;我们将介绍如何安装pyecharts&#xff0c;如果您是…...

cmake 添加一个库

目录 项目格式 cmake基本语法 设置编译器 添加库 链接库 添加库的头文件 cmake打印字符串 库的cmake文件 cmake生辰库 mian函数中使用 让库成为可选的 cmake基本语法 设置option变量 cmake设置条件链接库 链接库 添加头文件 修改cmake配置文件 修改引用的源码…...

代码随想录二刷 226 翻转二叉树 102 二叉树的层序遍历 101 对称二叉树

226 翻转二叉树 代码如下 func invertTree(root *TreeNode) *TreeNode { if root nil { 采用前序遍历&#xff0c;如果当前节点为空&#xff0c;就返回空 return nil } root.Left,root.Right root.Right, root.Left 交换该节点的…...

【深入浅出C#】章节 3: 控制流和循环:条件语句

条件语句是编程中一种常用的控制结构&#xff0c;用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径&#xff0c;使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为&#xff0c;使程序能够根据不同的情况…...

Java框架学习--Spring

1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的&#xff08;基本&#xff09;装置。--来自百度百科 之前常见的容器有&#xff1a; List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...

如何做网站怎么赚钱/google关键词搜索量

前言 关于流式调用&#xff0c;熟悉Java的小伙伴可能第一时间都会想到Java8关于stream相关的API&#xff0c;类似这种的代码list.stream().map(item->item1).colletion(Collector::toList)&#xff0c;流式调用带给我们的直接感受是代码量的减少。但是由于Java的特性导致一…...

发布程序后网站有很多/软文营销的定义

目录 LOW&#xff1a; Medium&#xff1a; High Impossible LOW&#xff1a; 源代码&#xff1a; <?php // The page we wish to display $file $_GET[ page ]; ?> 可以看到&#xff0c;low级别的代码对包含的文件没有进行任何的过滤&#xff01;这导致我们可…...

程序外包价格/杭州seo排名优化外包

sem_init: int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));   功能&#xff1a;初始化信号量 返回值&#xff1a;创建成功返回0&#xff0c;失败返回-1 参数sem&#xff1a;指向信号量结构的一个指针 参数pshared&#xff1a;不为&#xff10;时此…...

网络建设与维护是什么工作/湖南百度seo排名点击软件

附件的为SCCM 2012 应用程序管理的相关文档&#xff0c;主要是为了跟大家共享知识&#xff0c;共同进步。网络上也有很多&#xff0c;因为本人公司的生产环境中正在计划部署实施&#xff0c;所以会把部署过程中的实际情况记录下来&#xff0c;跟大家共享学习。 本节主要介绍&am…...

id导入不了wordpress/接广告的网站

1.Tomcat的结构概述Tomcat服务器是由一系列可配置的组件构成&#xff0c;其核心组件是Catalina Servlet容器&#xff0c;它是所有其他Tomcat组件的顶层容器。Tomcat的组件可以在<CATALINA_HOME>/conf/server.xml文件中进行配置,每个Tomcat的组件在server.xml文件中对应一…...

哪个网站能看到学做标书/农业推广

Windows Ps菜单&#xff1a;编辑/首选项macOS Ps菜单&#xff1a;Photoshop/首选项快捷键&#xff1a;Ctrl/Cmd K对 Ps 的首选项 Preferences进行设置&#xff0c;可以提高修图与设计效率。下面是一些首选项设置的建议&#xff0c;供参考。常规GeneralHUD 拾色器 HUD Picker建…...