Spring MVC笔记
1、什么是Spring MVC?
SpringMVC是Spring的一个模块,基于MVC的一个框架。
2、Spring MVC的优点?
(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)与Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略。
3、Spring MVC的主要组件?
(1)前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
继承了java本身的servlet,是servlet的增强。Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
(2)处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
(3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler(需要程序员开发)
(5)视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
(6)视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
Spring MVC代理了前端控制器,处理器映射器,视图解析器,这些东西都不需要程序员去考虑,因此让Java web的开发变得更为简单。
4、Spring MVC的工作流程(描述一下 DispatcherServlet 的工作流程)?
(1)用户发送请求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到请求后,调用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响应用户。
其实就是
5、SpringMVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加"forward:"(什么都不写的话默认就是这个)
(2)重定向:在返回值前面加"redirect:"
6、SpringMvc的控制器是不是单例模式?如果是,有什么问题?怎么解决?
是单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。
7、Spring MVC 常用注解?
SpringMVC常用注解(前后端分离)
1、@Controller :声明该类为SpringMVC中的Controller
2、@RestController:@Controller+@ResponseBody
3、@ResponseBody:支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
4、@RequestMapping :用于映射Web请求,包括访问路径和参数(类或方法上)
@GetMapping(查)
@PostMapping(增)
@PutMapping(改)
@DeleteMapping(删)
5、@PathVariable:主要用来获取 URL 参数
6、@RequestParam:获取请求参数
@RequestParam 和 @PathVariable 的不同:
@PathValiable 是从 URL 模板中获取参数值, 即这种风格的 URL:{id}
@RequestParam 是从 Request 里获取参数值,即这种风格的 URL:?id=1