Notadmin
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

Spring简介
广义上来说,Spring不是一个单层的框架,而是类似一个平台或者生态体系。在这个平台或者生态体系中,可以将Struts、Hibernate等单层框架最佳的方式融合在一起,为企业级应用提供完美的解决方案。
狭义上说,Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。Spring就是一个开源的轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
控制反转(IOC):软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分模块的一个准则就是高内聚低耦合,Spring通过控制反转技术降低了耦合度。
面向切面(AOP):Spring支持面向切片的编程,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,应用对象只需实现业务逻辑,它们并不负责(甚至是意识)其他系统级关注点,例如日志或事务支持。
容器:容器就是用来装东西的。Spring容器包含并管理应用对象的配置和生命周期
框架:Spring可以将简单的组件配置、组合成为复杂的应用,相当于是一个脚手架,开发者要做的就是把组件放进去,实现业务逻辑。
spring技术栈
项目名称 | 描述 |
Spring Data | Spring 提供的数据访问模块,对 JDBC 和 ORM 提供了很好的支持。通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。 |
Spring Batch | 一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。 |
Spring Security | 前身为 Acegi,是 Spring 中较成熟的子模块之一。它是一款可以定制化的身份验证和访问控制框架。 |
Spring Mobile | 是对 Spring MVC 的扩展,用来简化移动端 Web 应用的开发。 |
Spring Boot | 是 Spring 团队提供的全新框架,它为 Spring 以及第三方库一些开箱即用的配置,可以简化 Spring 应用的搭建及开发过程。 |
Spring Cloud | 一款基于 Spring Boot 实现的微服务框架。它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。 |
Spring框架结构
Spring由20多个模块组成,可以分为:
核心容器(core container):包含spring-core、spring-beans、spring-context、spring-context-support和spring-expression(SpringExpression Language)这些模块。spring-core和spring-beans构成了框架最基础的部分,包括控制反转和依赖注入功能。spring-context是基于spring-core和spring-beans构建的,提供了一种以框架风格来访问对象的方式,类似于JNDI注册。ApplicationContext接口是spring-context的焦点。spring-context-support为集成第三方库(如定时器Quartz)提供支持。spring-expression提供了一种强大的表达式语言,可以在运行时查询和操作对象。
数据访问/集成(data access/Integration):数据访问/集成层包含JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和事务(spring-tx)模块。
web:Web层包含spring-web、spring-webmvc、spring-websocket和spring-webflux模块。其中,spring-web提供了面向Web集成的基本特性,比如文件上传功能。Spring-webmvc模块包含了Spring的MVC和REST Web Service实现。spring-webflux是一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好。
面向切面编程(AOP,AspectOriented Programming):spring-aop模块提供了一个AOP面向切面编程的实现。spring-aspects模块提供与AspectJ的集成。spring-instrument模块提供一些类级的工具支持和ClassLoader级的实现,用于服务器。spring-instrument-tomcat模块针对tomcat的instrument实现。
设备(Instrumentation)
消息发送(Messaging):从Spring 4开始包含了一个spring-messaging模块,对Spring集成项目Message、MessageChannel和MessageHandler进行了重要的抽象,是基于消息发送应用的基础。
测试(Test):Spring-test模块支持Spring组建JUnit和TestNG的单元测试和集成测试。
Spring MVC
javaEE体系结构包括4层,从上到下分别是应用层,web层,业务层,持久层。
Spring是业务层的框架
Mybatis是持久层的框架
spring MVC是web层的框架
MVC框架:MVC(Model View Controller)是模型(Model)-视图(View)-控制器(Controller)的缩写
MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Controller(控制器)。它们各自处理自己的任务:
(1)模型:模型持有所有的数据、状态和程序逻辑,独立于视图和控制器。
(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息,可以有多个不同的显示形式或视图。
(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。
Spring MVC的处理流程
将浏览器输入的url字符串转化成眼前看到的html页面 。
1)用户发送请求到前端控制器DispatcherServlet。在DispatcherServlet中维护着一个表,存放的是HandlerMapping对象list
2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3)处理器映射器找到具体的处理器Handler。handler其实指的就是Controller
4)DispatcherServlet调用HandlerAdapter处理器适配器
(5)HandlerAdapter经过适配调用具体的处理器Handler(Controller,也叫后端控制器)。
(6)Controller执行完成,返回ModelAndView。
(7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
(8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
(9)ViewReslover解析后返回具体View。
(10)DispatcherServlet根据View进行渲染视图(将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
spring中过滤器(filter),拦截器(interceptor)和切面(aop)执行顺序
过滤器:过滤器是服务端的一个组件,是基于servlet实现从客户端访问服务端web资源的一种拦截机制,对请求request和响应response都进行过滤,依赖于serverlet容器,使用时,实现Filter接口,在web.xml里配置对应的class还有mapping-url。
拦截器:拦截器,顾名思义,它的作用就是拦截,这个要和过滤器区分开,过滤器依赖serverlet容器,获取request和response处理,是基于函数回调(框架本身调用的,它会遍历所有注册的过滤器,并且一一调用doFilter()),简单说就是“去取你想取的”。拦截器是通过Java反射机制来拦截web请求,是“拒你想拒绝的”,它只拦截web请求,但不拦截静态资源。
切面:相比过滤器,拦截器能够知道用户发出的请求最终被哪个控制器处理,但是拦截器还有一个明显的不足,即不能够获取request的参数以及控制器处理之后的response。这时可以用切面。
spring框架从view层接收数据
从URL中传值到controller
1)常见的url中会是“?name=XXX&pwd=XXX”这种,如果想获取“name,pwd”,可以使用@RequestParam。假如是可选参数,可以设置required=false,默认是true,value也要与url的对应。
2)有的url的格式是url/param1/param2,这种获取值可以使用@PathVariable。
从view传递数据到controller(POST)
1)直接将请求参数名作为Controller中的方法的形参
2)使用Pojo对象
如果请求参数有好多个,都放在Controller方法的形参中时函数会很长,一般情况下会把参数封装成对象进行传递。SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性,如address.province、address.city等。
为了演示如何使用Pojo对象,首先在com.demo.model包中定义User对象,该对象中有两个属性—— name和pwd。
3)使用原生的servlet API 作为Controller 方法的参数
总结
上面是spring的一些基础知识,要学好java安全,这些知识也是必须要掌握的。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)