2019年SpringMVC常见面试题
一)Springmvc执行流程
1、 发起请求到前端控制器(disptcherServlet)
2、 前端控制器请求handlerMapper寻找handker
3、 处理器映射器(handlerMapper)向前端控制器返回handler
4、 前端控制器调用处理器适配器去执行handler
5、 处理器适配器执行handler
6、 Handler执行完成向适配器返回ModelAndView
7、 处理器适配器向前端控制器返回ModelAndview
8、 前端控制器请求视图解析器进行视图解析
9、 视图解析器向前端控制器返回view
10、前端控制器进行视图渲染
11、前端控制器向用户响应结果
二)SpringMVC常用注解
1、@component 创建类对象 相当于配置<bean>
2、@service 写在serviceimpl类上 作用和@component一样
3、@Repository 写在数据访问层上 作用和@component一样
4、@controller 写在控制器上 作用和@component一样
6、@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
7、@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
三)SpringMVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加"forward:",比如"forward:user.go?name=1"
(2)重定向:在返回值前面加"redirect:",比如"redirect:user.go"
四)SpringMvc怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。
五)Springmvc的优点:
(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)与Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略。
六)Spring MVC的主要组件?
(1)前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
(3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler(需要程序员开发)
(5)视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
(6)视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
七)、SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?
一般用@Conntroller注解,表示是表现层,不能用别的注解代替。
八)、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
可以在@RequestMapping注解里面加上method=RequestMethod.GET。
九)、怎样在方法里面得到Request,或者Session?
直接在方法的形参中声明request,SpringMvc就自动把request对象传入。
十)、如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。
十一)、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。
十二)、SpringMvc中函数的返回值是什么?
返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。
十三)、SpringMvc用什么对象从后台向前台传递数据的?
通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。