SpringMVC
1、什么是SpringMVC
Spring MVC是一个MVC的开源框架,Spring MVC = Struts2+spring,Spring MVC就相当于是Struts2加上Spring的整合,但是这里有一疑惑是Spring MVC和Spring是什么样的关系呢。Spring MVC是Spring的一个后续产品,其实就是Spring在原有基础上,又提供了Web应用的MVC模块,可以简单的把Spring MVC理解为是Spring的一个模块(类似于AOP、IOC这样的模块)。
2、MVC模式
MVC:MVC是一种设计模式
MVC的原理图:
M-Model 模型(完成业务逻辑:有JavaBean构成,service+dao+entity)
V-View 视图(做界面的展示:jsp、html)
C-Controller (接收请求——>调用模型——>根据结果派发页面(servlet))
3、SpringMVC的优点
- 它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java组件.并且和Spring提供的其他基础结构紧密集成.
- 不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
- 可以任意使用各种视图技术,而不仅仅局限于JSP
- 支持各种请求资源的映射策略
- 它应是易于扩展的
4、SpringMVC的工作原理
- 客户端发送请求到DispatcherServlet
- DispatcherServlet查询handlerMapping找到处理请求的Controller
- Controller调用业务逻辑后,返回ModelAndView
- DispatcherServlet查询ModelAndView,找到指定视图
- 视图将结果返回到客户端
5、各个组件的说明
- 前端控制器DispatcherServlet(不需要工程师开发,由框架提供)
作用:接收请求,响应结果,相当于转发器,中央处理器。可以降低与其他组件之间的耦合度
- 处理器映射器HandllerMapping(不需要工程师开发),由框架提供
作用:根据请求的URL查找Handller,HandllerMapping负责根据用户的请求找到Handller即处理器,Soring MVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
- 处理适配器HandllerAdapter
作用:按照特定规则(HandllerAdapter要求的规则)去执行Handler,通过HandllerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多烈性的处理器进行执行。
- 处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去开发,这样适配器才可以去正确执行Handller,Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对据图的用户请求进行处理,由于Handller涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler
- 视图解析器ViewResolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(View),ViewResolver负责将处理结果生成View视图,ViewResovler首先根据逻辑实体名解析成物理实体名成物理视图名即具体的页面地址,在生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。Spring MVC框架提供了很多的View视图类型,包括jstView、pdfView
- 视图View(需要工程师开发)
View是一个接口,实现类支持不同的View类型(JSP、pdf)
6、SpringMVC 工作流程
- 用户发起请求到前端控制器(DispatcherServlet)
- 前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handle):通过XML配置或者注解进行查找
- 找到以后处理器映射器(HandlerMapping)像前端控制器返回执行链
- 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去处理器(Handler)
- 处理器适配器去执行Handler
- Handler执行完给处理适配器返回ModelAndView
- 处理器适配器向前端控制器返回ModelAndView
- 前端控制器请求视图解析器(ViewResolver)去执行视图解析
- 视图解析器像前端控制器返回View
- 前端控制器对视图进行渲染
- 前端控制器向用户响应结果
7、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
8、简单介绍SpringMVC和Struts2的区别有哪些?
- springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
- springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
- Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
9、SpringMvc怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。 具体步骤如下:
- 加入Jackson.jar
- 在配置文件中配置json的映射
- 在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
10、 @RequestMapping注解用在类上面有什么作用?
是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
本人会陆续整理出大数据和Java的高频面试题,请持续关注大数据健身侠: