Spring mvc 基础面试
Spring mvc 流程
为什么要用spring-mvc?
首先spring-mvc是基于Java设计的,实现了Web MVC设计模式,是基于请求驱动的轻量级web级框架。Spring-mvc就是要简化日常的web开发,让开发人员直接面向核心业务的开发。
参数的映射、文件的上传、支持各种视图解析器
servlet只有doGet和doPost,一个servlet类只能处理一个url-pattern
SpringMVC类里面可以通过RequestMapping处理很多请求,并且支持Rest风格的请求,如DELETE/PUT等
SpringMVC参数的映射可以直接封装成实体类
SpringMVC的
异常处理、
转换器(配合拦截器使用)、
拦截器(权限 日志 事务)可以让开发更便利。
MVC架构?
将应用按照model + view + controller 进行分离。
View : 主要负责与前端交互,进行请求的发送和响应的接收。
Mdel: 业务模型,根据不同的业务需求而设计不同的业务模型。
Controller:控制层,将view 与 model 匹配在一起。Controller 层并不会处理数据。
SpringMVC的特点:
清晰的角色划分:控制器(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。
1、角色划分清晰 :
Dispatcher调度器>HandlerMapping映射器>HandlerAdapter适配器>controller控制器>viewResolver视图控制器(model 模型对象、validator验证器、command object命令对象)。
2、springMVC Model ModelMap 和 ModelAndView的区别???
Model、map 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类,主要用来传递数据。
ModelAndView: 有2个作用:1、指定跳转页面 2、传递数据
3、Spring mvc的监听器、拦截器、过滤器???
1、过滤器:
依赖于servlet容器;
在实现上基于函数回调,可以对几乎所有请求进行过滤;
缺点是一个过滤器实例只能在容器初始化时调用一次;
使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改 HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
2、拦截器:
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架;
在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用;
缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理;
由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。
3、监听器
实现了javax.servlet.ServletContextListener 接口的服务器端程序;
随web应用的启动而启动;
只初始化一次;
随web应用的停止而销毁;
主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。如SpringMVC的监听器org.springframework.web.context.ContextLoaderListener,实现了SpringMVC容器的加载、Bean对象创建、DispatchServlet初始化等。
过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。
拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。
监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。
https://blog.csdn.net/a745233700/article/details/80963758
代理、动态代理、静态代理