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

news2024/12/23 22:15:11

文章目录

  • 零、学习目标
  • 一、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
     */
    @Override
    public 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 {
    @Override
    public 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等方式把用户保存到数据库中,使用数据库查询用户信息后进行登录判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老胡的周刊(第094期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 qrbtf[2] 艺术二维码生成器: qrb…

某学院校园网站的设计与实现(论文+源码)_kaic

摘 要 使用旧方法对冀中工程技师学院网站的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在冀中工程技师学院网站的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次…

ajax--XML、AJAX简介、express框架使用、AJAX操作的基本步骤

一、XML(可扩展标记语言) XML与HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。 比如有一个学生数据:name“孙悟空”;age18;gender“男”&a…

数字图像处理期末复习习题 SCUEC part3 形态学图像处理专项

1.关于膨胀,腐蚀,开操作,闭操作的证明题 2.腐蚀和膨胀的定义 3.开操作与闭操作的定义 4.击中击不中变换

ubuntu驱动重装

卸载 进入命令行模式 sudo NVIDIA-Linux-x86_64-495.46.run --uninstall安装 进入命令行模式 sudo ./NVIDIA-Linux-x86_64-460.67.run –no-opengl-files –no-x-check –no-nouveau-check选continue installation。 ② 选 NO。 选NO。

源氏木语获得多少个奖项?答案 2023年天猫618淘宝大赢家今日答案与618天猫超级红包怎么领取?

2023年6月12日天猫618淘宝大赢家今日答案 问题:源氏木语获得多少个奖项? 答案:15 2023年淘宝天猫618超级红包怎么领取? 从2023年5月29日开始持续到6月20日,每天都可以打开手机淘宝或天猫,在首页搜索框内…

Open Inventor 2023.1.1 Crack 2022-06-08

Open Inventor 是一组高性能的三维软件开发包(SDK),用于医学、计算机辅助设计与工程、石油、天然气和采矿业这些领域中的专业应用。 其面向对象的应用程序编程接口、可拓展架构以及一整套先进庞大的组件为软件开发者提供一个完美的高级平台&…

教育系统和功能设计

慧享教育系统和功能设计 要求: 1. 在需求分析的基础上,确定项目详细功能; 2. 确定每个功能模块的子功能及详细内容并描述; 3. 完成事务设计和应用设计。 操作步骤: 1.系统结构设计及子系统划分 划分系…

基于html+css的图展示123

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【软考程序员学习笔记】——计算机组成与体系结构

目录 🍊一、进制之间的转换 🍊二、原码、反码、补码和移码 原码 反码 补码 移码 🍊三、浮点数表示法 (1)浮点数表示 (2)两浮点数进行运算的过程 🍊四、校验码 &#xff08…

Spring Boot + Vue3前后端分离实战wiki知识库系统八--分类管理功能开发二

接着上一次https://www.cnblogs.com/webor2006/p/17291405.html的分类功能继续完善。 分类编辑功能优化: 概述: 现在分类编辑时的界面长这样: 很明显目前的父分类的展现形式不太人性,这里需要指定父分类的id才可以,对于…

规范即治理函数:LLM 赋能的软件架构治理与架构设计

在我们设计架构治理平台 ArchGuard 2.0 的架构时,一直在强调的点是:基于规范 模式的工具化。简单来说,规范是架构设计的共时,也是架构知识的显性化。所以,在让 AI 设计架构时,规范是我们要考虑的第一要素&…

0 基础学脚本:给同事做一个排班表并每日通知「02」

Hello 小伙伴们早上、中午、下午、晚上、深夜好! 我是爱折腾的 jsliang~ 本系列文章和配套直播视频,面向金山文档的「轻维表」「表单」用户。 希望通过【自动化】和【脚本】等能力,让里面数据相互流转起来,从而提升工作效率。 序 …

企业级信息系统开发讲课笔记4.10 配置国际化页面

文章目录 零、学习目标一、使用Thymeleaf配置国际化页面(一)创建Spring Boot项目 - ThymeleafI18N(二)编写多语言国际化配置文件1、在resources下创建i18n目录2、在i18n目录里创建login.properties3、在i18n目录里创建login_zh_CN…

Prompt 用法大全!让 ChatGPT 更智能的六种策略(下)

上两篇介绍了 Pormpt 用法大全中前四种策略,本篇继续讲解后两种策略。‍‍‍‍‍ 点燃创作灵感:Prompt 实践指南揭秘!让 ChatGPT 更智能的六种策略(上) Prompt 用法大全!让 ChatGPT 更智能的六种策略&#…

基于html+css的图展示122

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

docker 的网络模式

一、docker网络概述 1、docker网络实现的原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP, 同时Docker网桥是 每个容器的…

ISO21434 操作和维护(十)

目录 一、概述 二、目标 三、网络安全事件响应 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、更新 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 一、概述 本条款描述了对文件中的项目…

Mysql中explain的用法详解

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

企业级信息系统开发讲课笔记4.8 Spring Boot整合Redis

文章目录 零、学习目标一、Redis概述1、Redis简介2、Redis优点(1)存取速度快(2)数据类型丰富(3)操作具有原子性(4)提供多种功能 3、Redis官网与在线教程 二、使用Spring Boot 整合 R…