SpringMVC的高频面试题
1. SpringMVC的优点
- SpringMVC是基于组件技术的,无论控制器和视图,还是业务对象之类的都是Java组件,并且和Spring提供的其他基础结构紧密集成
- 不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)
- 可以使用多种视图技术,而不仅仅局限于 JSP
- 支持各种请求资源的映射策略
- 它应是易于扩展的
2. SpringMVC的执行流程是什么?
-
在彻底理解SpringMVC的执行流程之前,先要知道与SpringMVC相关的各个重要组件
前端控制器(DispatcherServlet)
- DispatcherServlet是整个流程控制的中心,用于接收请求,响应结果,相当于转发器,中央处理器。DispatcherServlet的存在降低了组件之间的耦合性。
处理器映射器(HandlerMapping)
- HandlerMapping负责根据用户请求的URL找到Handler处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:xml配置文件的方式,注解的方式,实现接口的方式等。
处理器适配器(HandlerAdapter)
- 按照特定规则(HandlerAdapter要求的规则)去执行Handler,这是适配器模式的应用,通过扩展适配器可以对更多类型的
处理器进行执行 。
- 按照特定规则(HandlerAdapter要求的规则)去执行Handler,这是适配器模式的应用,通过扩展适配器可以对更多类型的
处理器(Handler)
- Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
视图解析器(ViewResolver)
- ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
- springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
视图View
- View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf等)
在这六个组件中,DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver都是由框架提供的,不需要我们自己去开发。但是由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。 (编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler ) 。视图View也需要我们自己去开发,如写JSP页面等。
-
SpringMVC的执行流程图
-
Spring的执行步骤
- 用户发起请求到DispatcherServlet
- DispatcherServlet调用HandlerMapping,根据xml或者注解的方式去查找handler
- 找到handler后HandlerMapping向DispatcherServlet返回一个执行链HandlerExecutionChain
- DispatcherServlet调用HandlerAdapter
- HandlerAdapter去执行Handler
- Handler执行完毕后向HandlerAdapter返回一个ModelAndView对象
- HandlerAdapter将ModelAndView对象返回到DispatcherServlet
- DispatcherServlet请求ViewResolver进行视图解析
- ViewResolver向DispatcherServlet返回View
- DispatcherServlet对视图进行渲染
- DispatcherServlet向用户返回响应结果
3. SpringMVC怎么样设定重定向和转发的?
- 转发:在返回值前面加"forward:“,譬如"forward:login.do?name=method1”
- 重定向:在返回值前面加"redirect:“,譬如"redirect:https://blog.csdn/qq_52248567?type=blog”
4. SpringMVC常用的注解有哪些?
- @Controller:用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类的方法。(
SpringMVC中的控制器的注解只能用@Controller,不能用其他注解代替
) - @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
- @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
5. SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
- SpringMVC是单例模式,所以在多线程访问的时候有线程安全问题,使用同步,也会影响性能的。
- 解决方案是在控制器里面不能写字段。
6. 简单介绍下SpringMVC和struts2的区别有哪些?
- 入口不同
- SpringMVC的入口是一个前端控制器DispatcherServlet
- struts2入口是一个Filter过虑器
- 配置映射不同
- SpringMVC是基于方法开发),传递参数是通过方法的形参,可以设计为单例或多例(建议单例)
- struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例。
- 视图不同
- Struts采用值栈存储请求和响应的数据,通过 OGNL 存取数据
- SpringMVC通过参数解析器是将request 请求内容解析,并给方法形参赋值,将数据和视图封装成 ModelAndView 对象,最后又将ModelAndView 中的模型数据通过 reques 域传输到页面。Jsp 视图解析器默认使用 jstl
7. 怎么样把某个请求映射到特定的方法上面?
- 直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径
8. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
- 可以在@RequestMapping 注解里面加上 method=RequestMethod.GET
9. 怎么样在方法里面得到Request或者Session?
- 直接在方法的形参中声明request和session,SpringMVC就自动把request对象和session对象传入
10. SpringMVC中函数的返回值是什么?
- 返回值可以有很多类型,有 String、ModelAndView,一般用 String 比较好。
11. SpringMVC怎么和 AJAX 相互调用的?
- 通过Jackson框架就可以把Java里面的对象直接转化成JS可以识别的 json对象。
具体步骤如下 :- 加入 Jackson.jar
- 在配置文件中配置 json 的映射
- 在接受 Ajax 方法里面可以直接返回 Object、List 等,但方法前面要加上@ResponseBody 注解
更多推荐
SpringMVC的高频面试题
发布评论