第4章 SpringBoot与Web应用

news2024/11/15 19:34:23

文章目录

  • 第4章 SpringBoot与Web应用
      • 4.1 配置Tomcat运行
      • 4.2 https安全访问
      • 4.3 数据验证
      • 4.4 配置错误页
      • 4.5 全局异常处理
      • 4.6 文件上传
        • 4.6.1 基础上传
        • 4.6.2 上传文件限制
        • 4.6.3 上传多个文件
      • 4.7 拦截器
      • 4.8 AOP拦截器
      • 4.9 本章小结
      • 4.9 本章小结

第4章 SpringBoot与Web应用

通过本章学习,可以达到以下目标:

1.掌握SpringBoot项目war包的生成与Tomcat发布。

2.掌握SpringBoot基于https运行模式的配置。

3.掌握SpringBoot错误处理。

4.掌握SpringBoot与文件上传处理。

5.掌握SpringBoot与拦截器的使用。

SpringBoot虽然极大地简化了Web项目开发与部署环节的配置,但是其依然属于Web项目,因此在实际工作中需要考虑与Tomcat的整合,当需要安全访问时还应该提供https支持。在本章中将为读者讲解SpringBoot项目与Tomcat的结合处理、错误处理机制、文件上传处理以及拦截器的使用。

4.1 配置Tomcat运行

在SpringBoot中默认支持Tomcat容器,所以当一个SpringBoot项目打包生成*.jar文件并且直接执行的时候就会自动启动内部的Tomcat容器。除了此种模式之外,也可以将Web项目打包为*.war文件,采用部署的形式通过Tomcat进行发布处理。

提示:Tomcat部署时的配置。

在将SpringBoot打包为*.war文件的时候,如果想正常部署一定要注意以下两点:

1.取消项目中的Jetty容器的配置。

2.将所有的源文件夹目录设置输出资源,修改父pom.xml中的配置。

1.【mldnboot-web项目】修改pom.xml配置文件,将程序的打包类型定义为*.war。

     <packaging>war</packaging>      <!-- 项目打包类型 -->

2.【mldnboot-web项目】修改pom.xml配置文件,追加war文件打包插件。

image-20221202175536826

3.【mldnboot-web项目】更新Maven项目,随后会提醒开发者当前项目中缺少WEB-INF/web.xml配置文件,此时需要开发者手工创建。创建完成的目录结构如图4-1所示。

image-20221202175613968

图4-1 创建Web项目

4.【mldnboot-web项目】如果现在项目要以Tomcat的形式运行,那么需要修改SpringBoot程序启动类定义,该类必须要继承SpringBootServletInitializer父类,同时还需要覆写configure()方法。

image-20221202175847921

5.【mldnboot-web项目】对项目进行打包部署(clean package),成功之后会在target目录中形成mldn.war程序文件,随后可以将此文件直接复制到Tomcat所在目录之中,而后启动Tomcat进行项目发布。

4.2 https安全访问

SpringBoot启动时默认采用http进行通信协议定义,考虑到安全,往往会使用https进行访问。正常来讲,https的访问是需要证书的,并且为了保证这个证书的安全,一定要在项目中使用CA进行认证。下面只是在本机做一个简单的模拟,利用Java提供的keytool命令实现证书的生成。

1.【操作系统】利用keytool生成一个证书。

image-20221202175906937

该程序执行完成后会生成一个名称为keystore.p12的证书文件,该证书的别名为mytomcat,访问密码为mldnjava。

2.【mldnboot-web项目】将生成的keystore.p12复制到src/main/resources目录中,如图4-2所示。

image-20221202175916849

图4-2 配置安全访问

3.【mldnboot-web项目】修改application.yml文件,配置ssl安全访问。

image-20221202175933102

4.【mldnboot项目】资源目录中增加了*.p12文件,要想让其正常执行,还需要修改resource配置,追加输出文件类型配置。

image-20221202180035535

5.【mldnboot-web项目】虽然现在程序配置了https支持,但考虑到用户访问时可能会使用http访问,所以需要做一个Web配置,使得通过http的80端口访问的请求直接映射到https的443端口上。

image-20221202180046737

此时程序在通过80端口访问时,会自动跳转到https访问的443端口上。

4.3 数据验证

在进行Web开发过程中,用户提交数据的合法性是最基础的验证手段,在SpringBoot中可以直接使用hibernate-vidator组件包实现验证处理,而此组件包中支持的验证注解如表4-1所示。

表4-1 hibernate-vidator验证注解

image-20221202180211526

1.【mldnboot-web项目】在src/main/resources目录下创建ValidationMessages.properties(文件名称为默认设置,不可更改)文件,该文件中要保留所有的错误提示信息。

image-20221202182530634

2.【mldnboot-web项目】建立一个Member程序类,并且在该类上使用验证注解。同时,验证出错时的错误信息引用之前ValidationMessages.properties文件中的定义。

image-20221202182541890

3.【mldnboot-web项目】建立一个MemberController控制器程序类。

image-20221202182742925

本程序为了方便读者理解,除了将错误提示信息以Restful方式返回之外,还直接在后台进行了错误信息的打印。如果用户输入的内容全部正确,则会返回用户输入的信息。

4.【mldnboot-web项目】在src/main/view源文件夹中创建templates/member_add.html页面,定义用户信息增加表单。

image-20221202183721565

本程序由于存在Member数据验证逻辑,在用户信息输入正确时将返回如图4-3所示的界面。如果输入错误,则会返回如图4-4所示的界面。

image-20221202183745385

图4-3 信息输入正确时返回Member对象

image-20221202183756127

图4-4 信息输入错误时返回错误信息

4.4 配置错误页

在Web项目开发过程中,错误信息提示页是一个重要的组成部分。无论多么合理的项目,也很难保证不出现类似于404或500的错误问题,而让用户直接看见满是异常信息的页面明显不是一个好的选择。这时,就需要有一个错误信息提示页。

1.【mldnboot-web项目】错误页面一般都属于静态页面,这里在src/main/view/static目录下创建error-404.html和error-500.html两个页面,项目结构如图4-5所示。

image-20221202184051054

图4-5 错误页结构

image-20221202184102555

2.【mldnboot-web项目】建立错误页配置。

image-20221202184112649

配置完错误页之后,会根据用户请求时的http状态码跳转到不同的页面进行显示。

4.5 全局异常处理

全局异常处理指的是针对程序中产生的Exception进行的处理。产生了异常之后,可以统一跳转到一个页面进行错误提示,也可以通过Restful形式返回错误信息。

提示:关于全局错误与全局异常。

全局错误指的是对http状态码进行的错误跳转处理,全局异常指的是发生某些异常(如果处理的是Exception,则表示处理全部异常)之后的跳转页面。两者属于并行的概念,在项目开发中建议同时配置两者。

另外,如果想方便地观察本程序的执行结果,建议先将错误页的配置取消。

1.【mldnboot-web项目】建立一个全局异常处理,该类可以处理所有的Exception异常。

image-20221202184450037

2.【mldnboot-web项目】建立src/main/view/templates/error.html页面,进行错误信息显示。

image-20221202184512466

3.【mldnboot-web项目】建立一个控制器,主要功能是产生一个异常信息,以观察全局异常处理是否生效。

image-20221202185915736

在本程序中,只要访问/info路径,就会产生异常,而产生异常之后将统一跳转到error.html页面。本程序运行结果如图4-6所示。

image-20221202190034193

图4-6 错误页跳转

提示:基于Restful错误信息提示。

本程序在发生异常之后采用跳转的形式来处理,而SpringBoot最大的特点是支持Restful处理,因此为了描述异常,也可以直接采用Restful的形式回应异常信息,即不再跳转到HTML页面进行显示。

范例: 修改GlobalExceptionAdvice程序类,将其修改为Restful风格显示。

image-20221202190054761

本程序使用了@RestControllerAdvice注解,则此时的异常处理将使用Restful风格,程序发生异常之后的运行效果如图4-7所示。

image-20221202190204633

图4-7 使用Restful处理全局异常

4.6 文件上传

文件上传功能是Web开发的一项重要技术手段,SpringBoot本身也支持文件上传操作,并且其实现原理与SpringMVC相同,唯一的差异是配置相对减少了许多。

4.6.1 基础上传

SpringBoot采用FileUpload组件实现上传处理,在控制器中可以使用MultipartFile类进行接收。

1.【mldnboot-web项目】建立上传控制器UploadController,利用MultipartFile将上传文件保存在本地磁盘。

image-20221202190253868

2.【mldnboot-web项目】建立src/main/view/templates/upload.html页面。

image-20221202190527591

本程序通过表单传递了姓名(文本)和图片(二进制数据)两个数据信息。控制器接收到此请求信息后,如果有上传文件存在,则会直接返回上传信息(开发者也可以根据情况选择将文件保存),程序运行效果如图4-8所示。

image-20221202190539290

图4-8 文件上传

4.6.2 上传文件限制

在实际项目开发中,需要对用户上传文件的大小进行限制,这样才可以保证服务器的资源不被浪费。

1.【mldnboot-web项目】修改application.yml配置文件,增加上传限制。

image-20221202190601708

2.【mldnboot-web项目】对于上传限制,也可以利用Bean实现同样的效果。

image-20221202190657610

此时如果用户上传的内容超过了配置的限制,就会利用全局异常处理,上传出错后页面执行的效果,如图4-9所示。

image-20221202190710301

图4-9 上传限制

4.6.3 上传多个文件

如果要进行多个文件的上传,需要通过MultipartHttpServletRequest进行文件接收。

1.【mldnboot-web项目】修改upload.html页面,定义多个文件上传控件。

image-20221202190727861

2.【mldnboot-web项目】修改UploadController控制器,实现多个文件上传。

image-20221202200217542

本程序为了方便文件上传,在控制器类中定义了一个saveFile()方法,以进行文件的保存,同时利用此方法返回了上传文件的保存路径。

提示:上传图片应该保存在图片服务器中。

在本书所讲解的文件上传处理过程中,都是将图片保存到本地的Web服务端,但是从实际的开发来讲,这种操作是不可行的。在当今的项目开发中,最流行的设计理念是高可用、高并发、分布式设计,所以在实际项目中需要搭建专门的图片服务器进行上传资源的保存。如图4-10所示给读者简单地描述了一个Web集群与图片服务器集群的搭建关系。

image-20221202200252900

图4-10 简化的Web与图片服务器集群设计

在本书中,由于只涉及SpringBoot开发框架的使用,所以不会对此部分的内容进行讲解,有兴趣的读者可以登录www.mldn.cn自行学习。

4.7 拦截器

在Web请求处理的过程中,拦截器是服务器端进行数据处理的最后一道屏障,可以将所有用户请求的信息在拦截器中进行验证。在SpringBoot中可以继续使用SpringMVC所提供的拦截器进行处理。

1.【mldnboot-web项目】定义一个拦截器处理类。

image-20221202200449113

在拦截器中最需要用户处理的方法是preHandle(),此方法会在控制层的方法执行之前进行调用。

2.【mldnboot-web项目】如果要拦截器生效,则还需要定义一个拦截器的配置类。

image-20221202203105608

本程序将拦截器配置到了Web项目中,配置的访问路径为全部请求路径,这样不管用户如何访问都会先执行拦截器中的处理方法。

4.8 AOP拦截器

AOP(面向切面编程)是Spring提供的重要技术工具,其主要功能是对业务层的方法调用进行拦截处理。SpringBoot默认情况下并没有配置AOP拦截器,开发者需要在项目中手动引入spring-boot-starter-aop依赖库后才可以使用。

1.【mldnboot-web项目】修改pom.xml配置文件,配置spring-boot-starter-aop依赖库。

image-20221202203117536

2.【mldnboot-web项目】定义业务层接口。

image-20221202203126857

3.【mldnboot-web项目】定义业务层接口实现子类。

image-20221202203137549

4.【mldnboot-web项目】定义AOP程序类,对业务方法进行拦截,本例使用环绕通知处理。

image-20221202203646413

5.【mldnboot-web项目】编写测试类,测试ServiceAspect拦截是否生效。

image-20221202203657217

本程序由于将切入点设置在了所有的业务层上,所以在调用IMessageService接口方法时会自动执行AOP拦截。

4.9 本章小结

1.SpringBoot项目可以将程序打包为war文件,并且部署到Tomcat容器上执行。

2.SpringBoot可以像web.xml文件一样设置状态码的错误跳转页,也可以设置异常的错误跳转页。

3.SpringBoot与SpringMVC上传文件的处理形式相同,但是配置更加简化。

4.SpringBoot可以使用HandlerInterceptor拦截器对控制层的请求进行拦截。

10705)]

本程序由于将切入点设置在了所有的业务层上,所以在调用IMessageService接口方法时会自动执行AOP拦截。

4.9 本章小结

1.SpringBoot项目可以将程序打包为war文件,并且部署到Tomcat容器上执行。

2.SpringBoot可以像web.xml文件一样设置状态码的错误跳转页,也可以设置异常的错误跳转页。

3.SpringBoot与SpringMVC上传文件的处理形式相同,但是配置更加简化。

4.SpringBoot可以使用HandlerInterceptor拦截器对控制层的请求进行拦截。

5.SpringBoot可以直接导入spring-boot-starter-aop编写AOP拦截器,实现业务层拦截。

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

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

相关文章

[附源码]计算机毕业设计病人跟踪治疗信息管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux系统移植二:生成fsbl引导文件并制作BOOT.bin

前情提要 对于ZYNQ而言&#xff0c;在引导过程中&#xff0c;先运行FSBL来设置PS&#xff0c;然后运行U-Boot用于加载Linux内核映像并引导Linux Linux系统移植一&#xff1a;移植U-BOOT 添加自己的板子并编译&#xff08;非petalinux版&#xff09; 一文中已成功生成了u-boot…

基于MPPT的PV光伏发电simulink建模和仿真

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 MPPT控制器的全称是“最大功率点跟踪”&#xff08;Maximum Power Point Tracking&#xff09;太阳能控制器&#xff0c;是传统太阳能充放电控制器的升级换代产品。MPPT控制器能够实时侦测…

ManiSkill 2022机器学习顶会ICLR上的世界顶尖机械臂大赛赛题解读,演示轨迹转换,点云查看

1.赛事相关信息 点击查看 2.赛题分析 软体对GPU要求较高&#xff0c;环境配置复杂&#xff0c;选择刚体环境先以模仿学习/强化学习的刚体环境为基础&#xff0c;后期再考虑无限制刚体环境部分任务&#xff08;如将物块移动到指定位置&#xff09;&#xff0c;存在相机之外的…

Day818.电商系统的分布式事务调优 -Java 性能调优实战

电商系统的分布式事务调优 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于电商系统的分布式事务调优。 一个线上事故&#xff0c;在一次 DBA 完成单台数据库线上补丁后&#xff0c;系统偶尔会出现异常报警&#xff0c;开发工程师很快就定位到了数据库异常问题。 具…

SQL通用语法与DDL操作

学习笔记 sql通用语法 1 sql语句可以单行或多行书写&#xff0c;以分号结尾&#xff1b; 2 sql语句可以使用空格/缩进来增强语句的可读性&#xff1b; 3 mysql数据库的sql语句不区分大小写 4 单行注释&#xff1a;-- 内容 或 # 内容 多行注释&#xff1a; /* 内容 */ sql语句…

【地图之vue-baidu-map】点击获取坐标(点Marker)、坐标集(多边形polygon)

点击获取坐标&#xff08;点Marker&#xff09; 官网链接&#xff1a;Vue Baidu Map 需求 1.点击某点设置该点为中心点 2.获取点的经纬度 3.确定选取成功&#xff0c;取消就不赋值。 实现步骤 第一步&#xff1a;设置打开弹窗的地方 <el-button click"clickAdd…

c# .net 树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

c# .net 树莓派&#xff08;进口&#xff0c;贵&#xff09;/香橙派&#xff08;国产&#xff0c;功能相同&#xff0c;性价比高&#xff09;用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net 开发树莓派/香橙派都需要用到Iot.Device.bindings和System.Device.G…

阿里巴巴 Github 星标 57.9KJava 面试突击汇总(全彩版)首次公开

现在互联网大环境不好&#xff0c;互联网公司纷纷裁员并缩减 HC&#xff0c;更多程序员去竞争更少的就业岗位&#xff0c;整的 IT 行业越来越卷。身为 Java 程序员的我们就更不用说了&#xff0c;上班 8 小时需要做好本职工作&#xff0c;下班后还要不断提升技能、技术栈&#…

命令注入漏洞解析

漏洞简介 Atlassian Bitbucket Server 和 Data Center 是 Atlassian 推出的一款现代化代码协作平台&#xff0c;支持代码审查、分支权限管理、CICD 等功能。 受影响的Bitbucket Server 和 Data Center版本存在使用环境变量的命令注入漏洞&#xff0c;具有控制其用户名权限的攻…

代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

代码随想录刷题记录day34 动态规划理论基础斐波那契数爬楼梯使用最小花费爬楼梯 动态规划理论基础 解决的问题 由前一个状态决定了后一个的状态&#xff0c;可以用动态规划来解决。贪心是没有状态推导的。 解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的…

一键集成 SQL 审核到你的 GitLab 和 GitHub CI/CD

本文以 GitLab 为例&#xff0c;GitHub 方式类似。 操作步骤 事先准备 开启 Bytebase 团队版&#xff08;从 v1.8.0 开始&#xff0c;你可以直接开启 14 天的团队版免费试用&#xff09;。 为你的 Bytebase workspace 和项目开启 VCS 工作流&#xff1a;https://www.bytebas…

基于钉钉通讯录,同步构建本地LDAP服务

上一篇《利用飞书通讯录同步搭建本地LDAP》方案发出后&#xff0c;引起不少企业 IT 人员共鸣。本次&#xff0c;宁盾针对使用了钉钉社交应用的企业推出基于钉钉通讯录&#xff08;组织架构和用户信息&#xff09;同步搭建本地 LDAP的方案。 钉钉已经成为很多企业日常处理工作的…

基于FPGA的智能小车系统

目 录 前 言 1 第1章 系统总体方案设计 4 1.1 系统任务描述 4 1.2 控制系统要求 4 1.3 方案设计与论证 4 1.3.1 小车载体选择 4 1.3.2 主控制器选择 5 1.3.3 传感器选择 5 1.3.4 电机驱动选择 6 1.3.5 稳压电源选择 7 1.3.6 智能小车系统最终方案 7 1.4 系统总体设计 8 1.4.…

【Java开发】 Spring 07 :Spring AOP 实践详解(通过 AOP 打印数据访问层)

AOP 指是面向切面编程&#xff08;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术&#xff09;&#xff0c;利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提…

SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

http interface 从 Spring 6 和 Spring Boot 3 开始&#xff0c;Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库&#xff0c;如 OpenFeign 和 Retrofit 仍然可以使用&#xff0c;但 http interface 为 Spring 框架添加内置支持。 什么是…

RabbitMQ之集群方案原理

对于无状态应用&#xff08;如普通的微服务&#xff09;很容易实现负载均衡、高可用集群。而对于有状态的系统&#xff08;如数据库等&#xff09;就比较复杂。 1、业界实践 主备模式&#xff1a;单活&#xff0c;容量对等&#xff0c;可以实现故障转移。使用独立存储时需要借…

【Matplotlib绘制图像大全】(二十五):Matplotlib使用figure()添加画布

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

2022re:Invent:亚马逊云科技拥有超过15年的数据创新经验

在探索适合企业的数据战略的道路上&#xff0c;企业并不孤单。亚马逊云科技有着超过15年的数据领域创新经验。并一直在尝试通过创新的方法去改进数据存储和分析的过程&#xff1a;亚马逊云科技在云中提供了第一个可扩展存储服务S3、发布了云上第一个专门构建的数据库DynamoDB和…

easyrecovery2023免费版电脑数据恢复软件下载功能介绍

误删了重要文件&#xff1f;电脑中毒数据丢失&#xff1f;本想拷贝却手抖格式化了&#xff1f;那可以试试easyrecovery&#xff0c;这是一款十分强大的电脑数据恢复软件&#xff0c;界面简洁明了&#xff0c;操作也是十分的简单&#xff0c;只需要根据文字提示来进行操作即可进…