简述 SpringMVC 工作原理 ?
SpringMVC 工作原理:
1:用户发送请求至前端控制器DispatcherServlet。
2:DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3:处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4:DispatcherServlet调用HandlerAdapter处理器适配器。
5:HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6:Controller执行完成返回ModelAndView。
7:HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8:DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9:ViewReslover解析后返回具体View。
10:DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11:DispatcherServlet响应用户。
请简述Spring MVC的五大组件
1.DispatcherServlet:前端控制器,接收请求,调用其他组件处理请求响应请求,相当于转发器,中央控制器,是整个控制流程的中心。
2.HandlerMapping: 处理器映射,主要功能是实现请求派发,找到请求和控制器之间的对应关系。
3.Controller:控制器,接收处理前端控制器分发的请求,将执行的结果(ModelAndView)返回给前端控制器。
4.ModelAndView:封装数据模型和视图信息。
5.ViewResolver:视图解析器,根据视图名称解析后返回一个真正的页面
请详细描述 DispatcherServlet 的工作流程 ?
DispatcherServlet 的工作流程
简述Spring MVC的前端控制器是什么
前端控制器是org.springframework.web.servlet包中存在的DispatcherServlet类
它将请求分派到适当的控制器并管理应用程序的流程。需要在web.xml文件中指定DispatcherServlet
简述用于处理不同类型的传入HTTP请求方法的注释 ?
@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping
简述Spring MVC中@PathVariable注释的作用
@PathVariable批注用于提取URI模板的值。它在处理程序方法的参数中传递。
简述@ResponseBody注释在Spring MVC中起什么作用?
@ResponseBody批注用于在JSON中自动序列化返回的对象, 并将其与Http响应主体绑定
SpringMVC 常用注解都有哪些?
requestMapping:用于请求 url 映射。
@RequestBody: 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody :注解实现将 controller 方法返回对象转化为 json 响应给客户。
@Conntroller:控制器的注解,表示是表现层,不能用用别的注解代替
简述SpringMVC和Struts2的区别有哪些?
简述@RestController 和 @Controller 有什么区别?
@RestController 注解,在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回 JSON 数据格式。
如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
可以在@RequestMapping 注解里面加上 method=RequestMethod.GET或直接使用@GetMapping
解释@RequestMapping 和 @GetMapping 注解有什么不同
@RequestMapping:可注解在类和方法上;@GetMapping 仅可注册在方法上
@RequestMapping:可进行 GET、POST、PUT、DELETE 等请求方法;@GetMapping 是 @RequestMapping 的 GET 请求方法的特例
简述@RequestParam 和 @PathVariable 两个注解的区别
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,都可接收参数
@RequestParam 是从request里取值
@PathVariable 是从一个URI模板里面来填充
简述@RequestBody和@RequestParam的区别
@RequestBody一般处理的是在ajax请求中声明contentType: "application/json; charset=utf-8"时候。也就是json数据或者xml数据。
@RequestParam一般就是在ajax里面没有声明contentType的时候,为默认的x-www-form-urlencoded格式时。.
简述SpringMvc的Controller是不是单例模式?
单例模式。在多线程访问的时候有线程安全问题,解决方案是在控制器里面不要写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal,为每个线程单独生成一份变量副本,独立操作,互不影响
简述SpringMvc怎么配置拦截器?
有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:
请简述Spring MVC 的拦截器和 Filter 过滤器有什么差别?
有以下几点:
功能相同:拦截器和 Filter 都能实现相应的功能
容器不同:拦截器构建在 Spring MVC 体系中;Filter 构建在 Servlet 容器之上
使用便利性不同:拦截器提供了三个方法,分别在不同的时机执行;过滤器仅提供一个方法
如何把ModelMap里面的数据放入Session里面?
可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。
SpringMVC如何读取请求参数值 ?
1、通过ServletAPI获取
将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请 求的请求报文的对象
2、@RequestParam
@RequestParam是将请求参数和控制器方法的形参创建映射关系
4、@RequestHeader
@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
5、@CookieValue
@CookieValue是将cookie数据和控制器方法的形参创建映射关系
@CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam
6、通过POJO获取请求参数
可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实 体类中的属性名一致,那么请求参数就会为此属性赋值
简述请求转发(forward)与重定向(redirect)的区别
请求转发在服务器端完成的;重定向是在客户端完成的。
请求转发的速度快;重定向速度慢。
请求转发的是同一次请求;重定向是两次不同请求。
请求转发不会执行转发后的代码;重定向会执行重定向之后的代码。
请求转发地址栏没有变化;重定向地址栏有变化。
请求转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成