灵魂三问:它是啥?它包含啥?他怎么用?
1,springmvc是啥?
它是一个轻量级的web框架,它将Mondl,view,Controller层分离,将web解耦,简化开发,提升开发效率。
它的重要组件:
前端控制器(DispatcherServlet):用于接收请求、响应结果,相当于转发器,通过DispatcherServlet 可以减少与其它组件之间的耦合度。
处理器映射器(HandlerMapping):根据请求的URL来查找Handler
处理器适配器(HandlerAdapter):按照HandlerAdapter要求的规则去编写Handler,适配器才可以正确的去执行。
处理器(Handler):主要负责处理前端请求,完成业务逻辑,生成ModelAndView对象返回给HandlerAdapter
视图解析器 (ViewResolver):进行视图的解析,根据视图逻辑名解析成真正的视图
视图(View):是一个接口, 它的实现类支持不同的视图类型,比如jsp,freemarker,pdf等等
2,springmvc的执行流程?
(1)用户发送请求至前端控制器DispatcherServlet;
(2)调用HandlerMapping处理器映射器,请求获取Handler;
(3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
(5)HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
3,springmvc的优点?
3.1 可以支持个种视图技术,不仅仅局限于jsp
3.2 和spring集成
3.3支持各种请求资源的映射
3.4清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)
4,springmvc如何设定转发和重定向的?
(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
5,springmvc是单列模式?多线程访问如何解决?
是单例模式。在用多线程访问是存在线程安全问题,不能用同步代码块的方式解决,会影响性能。可以在控制器不要写成员字段。
6,SpingMVC中的控制器的注解一般用哪个,有没有别的注解可以替代?
SpringMVC中的控制器一般使用@Controller注解表示,也可以使用@RestController注解。@RestController注解相当于@ResponseBody注解 + @Controller注解。除此之外,一般不用别的注解代替。
7,@Controller 在springmvc中的作用?
@Controller咋控制层的作用是处理由discatcherServlet分发的请求,把对应的求求分装成,Modle,在发个视图层进行展示。
‘8,@RequestMapping的作用?
处理请求地址映射,可以作用方法上,类上。
13. Spring MVC常用的注解有哪些?
@RequestMapping注解:用于处理请求地址的映射,可用于类或方法上
@RequestBody注解:接收Http请求的Json数据,将Json转换为java对象。
@ResponseBody注解:将Conreoller方法返回的对象,转化为Json对象响应给客户端。
14. @ResponseBody注解的作用
该注解用于将Conreoller方法返回的对象,转化为Json对象响应给客户端。
15. @PathVariable注解和@RequestParam注解的区别?
@PathVariable注解:用来获得请求的URL中的动态参数,从路径中获取变量。
@RequestParam注解:从请求里面获取参数
16. SpringMVC中如何解决POST请求中文乱码问题,GET请求的又如何处理呢?
解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,并设置编码为utf-8
get请求中文参数出现乱码解决方法:在tomcat配置文件添加与项目工程编码一致的编码类型