重生之学java的第七天

一、springmvc的工作流程

引入:什么是springmvc?

springmvc是一种基于Java实现MVC模型的 请求驱动类型的 轻量级web框架,和spring一样,又是个框架。

不过这个框架只用在web层,就是之前spring经典三层架构的控制层,也叫表现层。Spring MVC的本质就是一个servlet,是对原生的servlet进行了封装,有了更多功能。

Spring框架最初是没有打算构建一个自己的Web-MVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。

Spring MVC是一种基于Java的Web应用程序开发框架,它提供了一种模型-视图-控制器

(Model-View-Controller)的设计模式来组织和管理Web应用程序的工作流程。

视图(View):代表用户交互界面,对于Web应用来说,可以是HTML,也可能是jsp、XML和Applet等。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。

模型(Model):是业务的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性。

控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。

下面是Spring MVC的基本工作流程:

客户端发送请求:

  • 当用户在浏览器中输入URL或进行其他操作时,他们发送一个HTTP请求到服务器。
  • 这个请求可以是GET、POST或其他HTTP方法。

前端控制器接收请求:

  • 请求到达服务器后,前端控制器(Front Controller)负责接收并处理该请求。
  • 在Spring MVC中,DispatcherServlet充当了前端控制器的角色。

处理器映射器选择处理器:

  • 前端控制器将请求发送给处理器映射器(Handler Mapper)。
  • 处理器映射器根据请求的URL找到合适的处理器(即控制器)来处理请求。

处理器执行业务逻辑:

  • 选定的处理器(控制器)接收请求并执行相应的业务逻辑。
  • 处理器可能会访问数据库、调用服务层或执行其他必要的操作。

处理器返回模型和视图:

  • 处理器执行完成后,会将产生的数据模型传递给视图解析器(View Resolver)。

引出下个问题:什么是servlet?

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般是指实现类(有时也叫Action)。在比如springMVC中DispatcherServlet()方法实现了Servlet接口。所以说SpringMVC的核心组件DispacterServlet其实本质是一个Servlet。

Servlet这个类中没有main()方法,所以不能独立运行,其运行主要靠servlet容器--Tomcat服务器 执行。因此在实际配置中一定先要把servlet配置到服务器中。在springmvc中Tomcat负责加载和调用DispatcherServlet。

紧跟着:什么是tomcat?

Tomcat 是一个免费的开放源代码的Web 应用服务器。 Web服务器的所做的工作本质上是:将某个主机上的资源映射为一个URL供外界访问。

它负责给servlet提供一个运行的环境,所以也叫servlet容器。像servlet实现类中的HttpServletRequest对象等就是Tomcat提供的。servlet相当于Tomcat中的一个小应用程序,不直接面向用户,而是靠Tomcat和用户交互。

总结

清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(formobject)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。每一个角色都可以由一个专门的对象来实现。

强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。

可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。

可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。

可定制的handlermapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些webMVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。

可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。

简单而强大的JSP标签库(SpringTag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。

JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。

Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。

二、ArrayList底层是如何实现扩容的

ArrayList

ArrayList是Java中的一种动态数组实现类,它继承自AbstractList类并实现了List接口。ArrayList可以根据需要自动调整大小以容纳任意数量的元素。

ArrayList的主要特点

  1. 动态大小:ArrayList的大小是可变的,可以根据需要动态增加或减少存储的元素数量。

  2. 有序集合:ArrayList中的元素按照插入顺序进行存储,并且每个元素都有一个索引来访问。

  3. 允许重复元素:ArrayList允许存储重复的元素,即相同的对象可以多次添加到列表中。

  4. 快速随机访问:由于ArrayList在内部使用基于数组的数据结构,因此它支持通过索引快速访问元素,具有常数时间复杂度(O(1))的特性。

  5. 支持泛型:ArrayList可以使用泛型来指定存储的元素类型,从而提供类型安全的操作。

  6. 提供高效的插入和删除:ArrayList提供了高效的插入和删除操作,当从列表中间插入或删除元素时,会涉及到元素的移动,这可能导致较低的性能。

  7. 不是线程安全的:ArrayList不是线程安全的,如果涉及到多个线程同时修改ArrayList,需要采取适当的同步措施。

总结

ArrayList是Java中常用的集合类之一,适用于需要频繁访问和修改元素的场景。在编程过程中,可以利用ArrayList的各种方法来对集合进行添加、删除、遍历和查询等操作。通过动态扩容机制,ArrayList能够根据需要自动调整容量,提供灵活性和高效性能。然而,频繁的扩容操作可能会导致一定的性能开销,因此在预知数据规模较大的情况下,建议在创建ArrayList时指定一个适当的初始容量,以避免多次扩容操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值