SpringMVC面试(记录学习笔记)
- 什么是SpringMVC?
SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级web框架,通过把模型-视图-控制器分离,将web层进行解耦,把复杂的Web应用分成逻辑清晰的几个部分,简化开发,减少出错。
2.SpringMVC的优点
可以支持各种视图技术,不仅仅局限于JSP;
与Spring框架直接集成,无需配置文件;清晰角色分配,前端控制器,处理器映射器,处理器适配器,视图解析器;支持各种请求资源的映射策略。
3.SpringMVC的主要组件
前端控制器:接受请求,相应结果,相当于转发器,有了DispatcherServlet就减少了其他组件之间的耦合度。
处理器映射器:根据URL来查找处理器。
处理器适配器:调用处理器。
处理器:就是Controller层的controller。
视图解析器:进行视图的解析,根据视图逻辑名解析成真正的视图view。
视图view:view是一个接口,它的实现类支持不同的视图类型。
4.SpringMVC的执行流程
1.用户发送请求到前端控制器;
2.前端控制器接收到请求,调用处理器映射器。
3.处理器映射器根据URL找到具体的处理器,生成处理对象和处理器拦截器,返回给前端控制器。
4.前端控制器调用处理器适配器执行处理器。
5.执行处理器Controller。
6.Controller执行完成返回ModelAndView。
7.处理器适配器将ModelAndView返回给前端控制器。
8.前端控制器将ModelAndView传给视图解析器 。
9.视图解析器解析成具体的view返回给前端控制器。
10.前端控制器对具体的view进行渲染。
11.前端控制器响应用户。
5.MVC是什么?MVC设计模式的好处是什么?
MVC是一种设计模式,模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。
MVC设计模式的好处:分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可拓展性,可维护性;有利于系统的并行开发,提升开发效率。
6.注解原理是什么?
注解的本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时产生的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法,该方法会从memberValues这个Map中索引出对应的值。memberValues的来源是Java常量池。
7.SpringMVC常用的注解有哪些?
@RequestMapping:用于处理请求URL映射的注解,可以用在类或者方法上,用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json数据转化为Java对象。
@ResponseBody:注解实现将Controller方法返回对象转化为就送对象相应给客户。
8.SpringMVC中控制器的注解一般用哪个?有没有其他注解可以替代?
一般使用@Controller注解,也可以使用@RestController注解,@RestController注解就相当于ResponseBody + @Controller。
9.@Controller注解的作用
在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,他把用户请求的数据经过业务层处理之后封装成一个Model,然后在把该model返回给对应的view进行展示。
10.@RequestMapping注解的作用
@RequestMapping是一个用来处理请求地址映射的注解,可以用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性:value:请求地址的实际地址;method:指定请求的method类型;consumes:指定处理请求的提交内容;produces:指定返回的内容类型;params:指定request中必须包含某些参数值,才让该方法执行。headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
11.@ResponseBody注解的作用
该注解用于将Controller的方法返回的对象,通过适当的HTTPMessageConverter转换为指定格式后,写入到Response对象的body数据区。
12.SpringMVC怎么设定重定向和转发的?
1.转发:在返回值前面加“forward”;
2.重定向:在返回值前面加“redirect”;
13.SpringMVC怎么和AJAX相互调用?
通过Jackson框架就可以把Java里面的对象直接转化成可以识别的JSON对象:加入Jackson.jar;在配置文件中配置json的映射;在接受AJAX方法里面可以直接返回Object,List等,但是方法前面要加上@ResponseBody注解。
14.如何解决中文乱码问题
post请求乱码:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;
get请求乱码:
修改Tomcat配置文件添加编码与工程编码一致;
对参数进行重新编码:
String userName = new String(request.getParmeter("userName").getBytes("ISO8859-1"),"utf-8");
15.SpringMVC里面拦截器是怎么写的
有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,在接口方法当中实现逻辑,然后在SpringMVC的配置文件中配置拦截器。