第三十六天 Java基础学习(三十)

news2024/11/16 11:56:07

一、Spring MVC

组件是将处理某类问题的代码进行封装的整体模块。一个大的问题可以拆分为不同的小问题,解决每个小问题的代码封装可以称之为组件,但是组件又是无法独立运行的,必须结合其他组件一起才能最终解决问题。就好比汽车,一辆汽车由发动机,轮胎,变速箱,底盘等等组成,每个组成部分可以独立的完成一部分功能,组合在一起就是一辆汽车了,但是每个部分不能独立的跑起来。

SpringMVC将Servlet访问的流程整体封装了起来,浏览器发起请求后调用单元方法来处理请求,这个整个过程从接收到请求,到找到单元方法并调用执行,再到响应结果给浏览器都是由不同的组件协同来实现的,

不同的组建在整个运行过程中的具体表现其实就是不同的对象,也就是不同对象之间的相互调用完成了请求的处理,组件的初始化应该在请求来之前就完成的,当服务器启动的时候会先完成对DispactherServlet的初始化创建,在DispatcherServlet被初始化的时候其底层内部也会完成第2到第10个组件的初始化,调用其initStrategies方法来完成

●常用组件说明

DispatcherServlet:前端控制器。Spring MVC的入口,也是整个流程控制中心。其他组件由DispatcherServlet统一调度,降低了组件和组件之间的耦合度。

MultipartResovler:多部分处理器。文件上传时需要使用。

LocaleResolver:解决客户端的区域和时区问题。

ThemeResolver:主题解析器。刻提供自定义布局。

HandlerMapping:映射处理器。主要负责处理URL,并找到对应的HandlerMethod。简单说就是找@RequestMapping注解中映射路径是否有和URL匹配的。

HandlerAdapter:适配器。负责调用具体的HandlerMethod。

HandlerExceptionResovler:异常处理器。异常处理,根据不同异常返回视图。

RequestToViewNameTranslator:从请求中获取到视图名称。

ViewResovler:视图解析器,负责解析字符串视图名和物理视图文件的。

FlashMapManager:主要用于存储属性的,本质是一个Map。多用在重定向时。FlashMap在重定向之前存储,重定向之后删除。ModelAndView:模型和视图。Spring MVC中提供的模型和视图接口。

HandlerInterceptor:拦截器。拦截控制露资源的。 

二、SpringMVC运行原理

SpringMVC的各个组件,一次请求的处理其实就是不同组件之间的协同操作完成的

使用mvc:annotation-driven 自动加载 RequestMappingHandlerMapping(处理映射器)和 RequestMappingHandlerAdapter (处理适配器),可用在SpringMVC.xml配置文件中使用mvc:annotation-driven替代注解处理器和适配器的配置。

•步骤

1.客户端向服务端发起请求,Spring MVC总体入口DispatcherServlet进行请求分发。

2.DispatcherServlet把URL交给映射处理器HandlerMapping进行解析URL。并寻找是否具有对应的控制单元。

3.如果存在控制单元,执行拦截器Interceptor的预处理方法preHandle进行处理。如果不存在对应控制单元,拦截器不执行。

4.如果拦截晶允许放行,返回给Servlet分发器DispatcherServlet,调用后续组件。

5.Servlet分发器DispatcherServlet使用适配处理器HandlerAdapter,调用具体的控制单元方法。

6.执行单元方法HandlerMethod。

7.控制单元HandlerMethod执行完成后产生模型和视图组件ModelAndView。

8.返回模型和视图组件给Servlet分发器DispatcherServlet。如果有拦截器Interceptor,执行postHandle

9.Servlet分发器DispatcherServlet调用视图解析器ViewResolver解析视图

10.产生视图View对象,执行了视图对应的资源。

11.把结果返回给Servlet分发器DispatcherServlet。如果有拦截器Interceptor,执行拦截器的afterCompletion

12.Servlet分发器把最终视图执行结果响应给客户端浏览器。

●springMVC实现方式

•基于配置

映射器:BeanNameUrlHandlerMapping

适配器:SimpleControllerHandlerAdapter

•基于注解

<mvc:annotation-driven></mvc:annotation-driven>底层创建映射器和适配器

处理映射器 RequestMappingHandlerMapping

处理适配器:RequestMappingHandlerAdapter

三、RBAC介绍

●权限管理

现在的项目是只要用户登录成功后就可以访问项目中的所有功能资源,这显然是不合理的。比如公司的管理系统,普通员工和ceo能操作的功能资源肯定是不能相同的,那是因为普通员工和CEO的权限是不同的,而现在是没有体现任何和权限相关的效果的,用户访问项目应当根据其权限的不同,可以操作的项目资源是不同的。

●项目的资源可以分为两大部分:前端页面资源和后台功能资源。

     那么不同的用户访问项目的权限管理效果也会有两个:

•前端页面资源(能不能看见):

前端页面资源可以分为公共资源部分和权限相关资源部分,对于公共资源部分任何用户都可以访问页面后都可以看到,对于权限相关部分,用户访问的时候应当 根据其权限的不同显示的不同,比如菜单资源,不同的用户访问项目后看到的菜单应该是不同的。

•后端功能资源(能不能访问):

后端功能资源主要实现的效果是用户在页面中触发了后端请求后是否对其进行处理,如果具有指定的权限则正常处理,没有权限则拒绝处理。后端资源的访问必须通过URL地址来完成,那么对后端资源的权限管理就可以转化对URL地址的管理,让URL地址和权限建立联系,当用户具备某个权限的时候自然具备对应的 URL地址的访问权限了。

●传统权限管理数据库方案

把和权限相关的资源存储到数据库中。前端资源主要是能不能看的问题,可以直接将和权限相关的页面资源存储都数据库的表中,比如菜单资源,创建一个菜单信息表将菜单信息存储起来。还可以创建一个页面资源表将页面中的按钮,超链接等等存储起来。注意不同的页面资源可以按照种类存储到不同的表中,不要存储到一个表中,直接存储页面代码就可以。

对于后端资源主要是URL地址的管理,可以创建一个URL地址信息表,将需要被管理的url地址存储到表中。使用数据存储好权限相关的资源后,根据权限的不同将资源和用户信息表中的用户信息进行关联,创建一个中间表来存储映射关系,这样当用户访问项目的时候不同的用户从数据库中查询到的页面资源不同,将查询的页面资源显示到页面的效果自然就下同了。

当用户发起后端请求的时候只需要根据从数据库中查询的URL地址资源来校验用户是否具备当前请求的url地址,根据校验结果来决定是否对此次请求处理。

传统的权限管理数据库设计方案中存在很大的局限性,用户和权限资源之间是多对多的关系,如果用户和权限资源之间直接使用中间表进行关联,会造成后期用户的权限信息很难维护。

●RBAC介绍

基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。一种数据库的设计思想,其核心是角色。

其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。

这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

●RBAC数据库设计

基于RBAC的数据库设计的核心是角色表,一个项目中需要被权限管理的资源是非常多的,项目越大,需要被管理的资源也就越多。但是核心设计流程是不变的,只是权限信息相关的表会越来越多,并且随着表的数量增多,各种中间表也会增多,只是看起来比较复杂。

541fe74864034c63af5ae84f2ea11916.jpg

 四、基于RBAC实现权限管理

对用RBAC的详细版中能够看到越大的项目权限管理的表就会越多,但是不管表的多少,其核心都是将权限和角色管理,角色再和用户关联。

五、Bootstrap

●前端框架

Java框架都是对Java SE技术或Java EE的技术进行封装,按照框架的要求进行搭建环境后可以简化开发流程。

前端框架是对CSS、JavaScript的封装。有的框架只封装了CSS,有的框架只封装了JavaScript,有的框架即封装了CSS也封装了JavaScript。

Bootstrap就是一个又封装了CSS,又封装了JavaScript的框架。

●Bootstrap

Bootstrap是受欢迎的 HTML、CSS和JS框架,用于开发响应式布局、移动设备优先的WEB项目。为所有开发者、所有应用场景而设计,Bootstrap 让前端开发更快速、简单。所有开发者都能快速上手、所有设备都可以适配、所有项目都适用。

●使用 Bootstrap

•移动设备优先:自Bootstrap3起,框架包含了贯穿于整个库的移动设备优先的样式。

•浏览器支持:所有的主流浏览器都支持Bootstrap。

•容易上手

•响应式设计:Bootstrap的响应式CSS能够自适应于台式机、平板电脑和手机。

•它为开发人员创建接口提供了一个简洁统一的解决方案。

•它包含了功能强大的内置组件,易于定制。

• 它还提供了基于Web的定制。

•它是开源的。

●Bootstrap的内容

•基本结构:Bootstrap提供了一个带有网格系统、链接样式、背景的基本结构。

•CSS:Bootstrap自带以下特性:全局的CSS设置、定义基本的HTML元素样式、可扩展的class,以及一个先进的网格系统。

•组件:Bootstrap包含了十几个可重用的组件,用于创建图像、下拉菜单、导航、警告框、弹出框等等。这将在布局组件部分详讲解。

•JavaScript插件:Bootstrap包含了十几个自定义的jQuery插件。您可以直接包含所有的插件,也可以逐个包含这些插件。

●组件

Bootstarp提供了丰富的组件,我们在进行页面开发的时候可以选取其提供的组件灵活的组装成一个完整的页面效果来使用。使用组件可以极大的提升前端页面的开发效率I组件的使用只是给出了一种大体上的显示效果,使用者需要在组件的基础上自己来完善最终的显示效果。常用的组件有:

•布局组件:用来实现页面的快速布局。支持多种布局方案。

•表单组件:用来显示比较友好的表单数据收集框。

•按钮组件:用来实现不同的按钮效果。

•导航组件:用来实现页面中的导航栏效果。

•表格组件:用来实现表格数据的显示,提供了多种显示方式。

•分页组件:用来实现分页效果。

•面板组件:用来以整体的形式显示数据。

•其他组件:其他组件有徽章,警告框等等。

组件的使用可以从Bootstrap的官网中查看使用方式,并且官网中组件的代码已经能够满足大部分的页面需求。

六、Bootstrap

●基本使用

•创建war项目

使用maven创建war类型项目,并完成SSM相关的配置。

•导入Bootstrap资源

在webapp目录下创建js目录,在js目录下创建bootstrap目录,将下载的Bootstrap压缩包解压后的js,css,fonts目录复制到bootstrap目录下。

Bootstrap的运行需要依赖jquery文件,将jquery.js文件放入到js目录中。注意jquery.js和bootstrap是属于同一级目录。

•创建demo.jsp

在webapp目录下直接创建demo.jsp文件,并引入Bootstrap的资源,jquery文件的引入必须先于Bootstrap.js文件的引入。

●Bootstrap CSS

Bootstrap中提供了非常强大的css样式效果,使用也非常的简单,只需要声明好对应的HTML标签,并按照文档说明在标签上添加class样式即可实现效果。

•网格系统

Bootstrap提供了一套响应式、移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。简单来说就是将屏幕使用表格的形式进行了划分,行的数量可以根据需求进行设定,列的数量为12列。网格系统是非常强大的布局系统,使用的时候只需要使用div标签结合css样式即可实现布局,非常灵活简单。

•基本使用

使用container或者container-fluid样式声明网格布局容器,container剧中显示,container-fluid占据100%屏幕宽度。使用row样式声明行,可以声明多行。使用col-md-*来声明列以及列占据的单元格数量,每行有12个单元格。但是注意设置列占据的单元格数据量的时候,每列占据的单元格数量的总数加起来为12。

•表单

Bootstrap通过一些简单的 HTML标签和扩展的类即可创建出不同样式的表单。Bootstrap提供了下列类型的表单布局:

•垂直表单(默认)

•内联表单

•水平表单 

      以水平表单为例,创建步骤:

   ①给<form>标签添加属性role="form”,样式class="form-horizontal”。

   ②在<form标签下创建子标签<div>,需要多少个表单域标签就创建多少个。给<div>标签添加class="form-group”样式,这是获取最佳间距所必需的.

   ③将<1abel>标签和控件标签声明在<div>中,并给<1abel>标签添加class="control-label”样式

   ④向所有的文本元素<input>、<textarea>和<select>添加class="form-control”。

●按钮

•基本使用

任何带有class.btn的元素都会继承圆角灰色按钮的默认外观。但是Bootstrap提供了一些选项来定义按钮的样式,以下样式可用于<a>,<button>,或<input>元素上:

.btn                   为按钮添加基本样式

.btn-default         默认/标准按钮

.btn-primary        原始按钮样式(未被操作)

.btn-success         表示成功的动作

.btn-info             该样式可用于要弹出信息的按钮

.btn-warning         表示需要谨慎操作的按钮

.btn-danger          表示一个危险动作的按钮操作

.btn-link              让按钮看起来像个链接(仍然保留按钮行为)

.btn-lg                 制作一个大按钮 

.btn-sm                制作一个小按钮

.btn-xs                 制作一个超小按钮

.btn-block             块级按钮(拉伸至父元素100%的宽度)

.active                   按钮被点击

.disabled                禁用按钮

 

 

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

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

相关文章

同步任务和异步任务的执行过程

同步任务和异步任务的执行过程 1、执行过程描述2、EventLoop的概念 1、执行过程描述 同步任务 是由JS主线程按次序执行异步任务委托给宿主环境执行已完成的异步任务对应的回调函数&#xff0c;会被加入到任务队列中等待执行JS的主线程的执行栈被清空后&#xff0c;会读取任务队…

Java026——System 类和Scanner 类

一、System 类 1.1、System 类提供的常用方法 方法 功能描述 ----------------------------------------------------------------------------------------------------------------------- currentTimeMillis() 返回当前计算机时间 和 格林威治时间&#xff…

mysql查询练习

1.创建表 CREATE TABLE worker( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10) NOT NULL DEFAULT 群众 , 姓名 varchar(20) NOT NULL,出生日期 date NOT NULL,PRIMARY KEY (职工号))ENGINE…

4.3Java EE——一对多查询

用户与订单关联关系图​​​​​​​ 与一对一的关联关系相比&#xff0c;接触更多的关联关系是一对多&#xff08;或多对一&#xff09;。例如一个用户可以有多个订单&#xff0c;多个订单也可以归一个用户所有。用户和订单的关联关系如图。 一、<collection>元素 在MyB…

前端技术学习第九讲:VUE基础语法---VUE常用指令

VUE常用指令 在VUE学习中&#xff0c;通常使用相关指令使VUE对象中的内容与网页进行挂载绑定&#xff0c;是我们的数据与视图之间产生关联&#xff0c;完成渐进式动态效果。VUE指令都会以“v-”开头。 指令名描述v-text将文本内容挂载到页面元素中v-html将html代码展示到页面…

更开放、更高性能、更具规模,闪马智能布局AGI时代

7月6日&#xff0c;2023世界人工智能大会&#xff08;WAIC 2023&#xff09;在上海盛大开幕。本届大会以“智联世界 生成未来”为主题&#xff0c;聚焦通用人工智能发展&#xff0c;共话产业新未来。 8日上午&#xff0c;由上海闪马智能科技有限公司&#xff08;下称“闪马智能…

ZGC垃圾收集器(-XX:+UseZGC)

ZGC在jdk11只支持Linux版本&#xff0c;4TB的内存&#xff0c;STW时间控制在10ms内&#xff1b;jdk16已经支持16TB的内存&#xff0c;STW时间不超过1ms&#xff0c;下面主要针对jdk11版本的详解 一、堆内存结构 ZGC堆内存分为三种类型的页面即小页面&#xff08;空间大小2M&a…

CYCLO (L-ALA-L-ALA),5845-61-4,环(丙氨酰-丙氨酰),氨基酸中间体

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 cyclo(Ala-Ala)氨基酸中间体&#xff0c;主要由丙氨酰组成 【中文名称】环(丙氨酰-丙氨酰) 【英文名称】 cyclo(Ala-Ala)&#xff0c;CYCLO (L-ALA-L-ALA) 【结 构 式】 【CAS】5845-61-4 【分子式】C6H10N2O…

C#制作打包安装程序,安装程序类使用

这里写目录标题 安装Microsoft Visual Studio Installer Projects创建安装项目设置安装程序文件设置程序桌面图标给程序设置安装程序名称安装程序类怎么使用Installer1.cs自定义安装步骤自定义设置安装程序路径&#xff0c;让用户安装时不能选择安装路径生成安装包 安装Microso…

实例011 在状态栏中显示检查框

实例说明 在设计程序界面时&#xff0c;为了规范界面&#xff0c;可以将一些控件放置在状态栏中&#xff0c;这样既能起到控制程序的作用&#xff0c;又能使界面和谐、美观。运行程序&#xff0c;在窗体的状态栏中加入了显示时间检查框。效果如图1.11所示。 技术要点 在状态…

对Linux系统对Spark开发环境配置

单机版本 上传对应文件&#xff0c;解压文件&#xff0c;并查看 unzip scala-2.12.12.zip tar -xzf spark-3.2.0-bin-hadoop2.7.tgz 移动scala及spark安装包到指定目录下 在opt目录下移动该文件到/usr目录下 mv scala-2.12.12 /usr/scala/ mv spark-3.2.0-bin-hadoop2.7 /…

Django_使用redis缓存数据

目录 一、配置redis 二、缓存Django的默认session 三、使用django的缓存机制缓存数据 四、自定义缓存数据 源码等资料获取方法 一、配置redis 在settings中添加配置参数 # Django的缓存配置 CACHES {"default": {"BACKEND": "django_redis.ca…

【企业微信多选的星期数据生成如“周一、周三至周六“】

目标效果如下图 实现这个过程首先是要找到逻辑&#xff0c;这个看似简单的操作却属实让我想了很久。 首先要了解需求 根据拿到的数据得到生成符合要求的字符串。中间有连续的星期大于三天的&#xff0c;开始和结束星期中间要有"至"。 分析逻辑 一、判断开始日期和…

RabbitMQ系列(19)--实现在RabbitMQ宕机的情况下对消息进行处理

前言&#xff1a;在生产环境中由于一些不明原因&#xff0c;导致RabbitMQ重启的情况下&#xff0c;在RabbitMQ重启期间生产者投递消息失败&#xff0c;生产者发送的消息会丢失&#xff0c;那这时候就需要去想在极端的情况下&#xff0c;RabbitMQ集群不可用的时候&#xff0c;如…

创造一款安卓自定义控件_裁剪原理介绍

1、新增功能&#xff0c;旋转&#xff1a; 效果如图&#xff0c;点击旋转&#xff0c;可以将控件画面本身进行90度倍数的旋转&#xff0c;并进行宽高比例适配&#xff0c;旋转之后裁剪依然正常。 功能实现原理&#xff1a; 1、通过调用view的setRotation功能进行以View为中心…

Stable Diffusion - 超分辨率插件 StableSR v2 (768x768) 配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131582734 论文&#xff1a;Exploiting Diffusion Prior for Real-World Image Super-Resolution StableSR 算法提出了一种新颖的方法&#xff0…

【JAVA】JAVA与C++的区别与联系

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言两方介绍CJAVA 不同|Java不支持指针、模板、指针重载、联合等||支持析构函数||条件编译和包含||螺纹支架||默认参数||转到语句||多重继承||异常处理||方法重载和操作符重载|…

对表中的数据操作

目录标题 创建一个工作者的表 &#xff0c;对表中数据进行相关操作worker表要求表中的数据内容 对数据的操作1.显示所有职工的基本信息2.查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号3.求出所有职工的人数4.列出最高工和最低工资5.列出职工的平均工资和总工资6…

卷积神经网络CNN进阶与搭建

目录 Pooling&#xff08;池化&#xff09;ReluResNetGradient VanishingFeature scalingImage NormalizationBatch Normalization Pooling&#xff08;池化&#xff09; 在降采样(Subsampling)中起作用&#xff0c;在不改变feature map的基础上&#xff0c;在卷积出来的基础上…

【LeetCode】217. 存在重复元素

217. 存在重复元素&#xff08;简单&#xff09; 方法一&#xff1a;哈希表长度比较 思路 针对重复元素&#xff0c;很容易就想到 set。我们可以先将 nums 中的所有元素存入set&#xff0c;然后比较两个数据结构的长度&#xff0c;如果相等则说明不存在重复元素&#xff0c;反…