【笔记】springmvc面试题总结

    科技2024-12-20  8

    简单介绍下你对Spring MVC的理解?

    Spring MVC是一个基于Java的MVC控制层框架。通过将web层进行职责上的解耦,简化开发。

    Spring MVC的主要组件?

    DispatcherServlet:前端控制器,就是一个大的servlet,所有用户发过来的请求都会首先经过它。HandlerMapping:处理器映射器,根据请求的URL来返回handler。只有一个方法getHandler(),返回一个handler(HandlerExecutionChain(里面包含URL对应的Controller对象、方法及参数,还有所有的拦截器))。

    HandlerAdapter:处理器适配器,用来执行HandlerMapping返回的handler。DispatcherServlet会调用所有注册的HandlerAdapter的supports方法对handler进行检测,判断当前HandlerAdapter是否能执行这个handler,最终找到合适的HandlerAdapter。handler方法来执行该handdler,并返回ModelAndView给DispatcherServlet。

    ViewResolver:视图解析器,接收HandlerAdapter返回的ModelAndView,根据ModelAndView中的view name来构造和返回具体的视图对象(View)。

    请描述Spring MVC(DispatcherServlet )的工作流程?

    用户发送请求到前端控制器(DispatcherServlet )。前端控制器调用处理器映射器(通常为RequestMappingHandlerMapping),根据请求的URL查找具体的handler(一般是自定义的控制器方法),同时获取所有的拦截器,统一打包到一个HandlerExecutionChain中并返回给前端控制器。

    前端控制器遍历所有注册的处理器适配器,调用supports()方法判断找出能处理当前handler的处理器适配器。调用处理器适配器执行这个handler,执行完返回一个ModelAndView(包括视图名称和模板参数)对象给前端控制器。前端控制器调用ViewResolver来解析ModelAndView,根据视图名称(viewName)返回一个视图对象(View)。前端控制器调用视图对象的render()将渲染后的视图返回给浏览器。render:第一步是将model对象(map)设置为request attributes,第二步是通过请求转发器转发到模板页面,在这过程中将模板参数填充至页面中。

    Spring MVC中拦截器执行时机?

    不管是spring自带的还是自己定义的拦截器(实现HandlerInterceptor即可),都是在容器启动时被添加到容器中。

    preHandle:在处理器映射器找到合适的handler(自定义的控制器方法)之后,在处理器适配器执行handler之前。 default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } postHandle:在处理器适配器执行handler之后,在前端控制器调用视图对象的render()渲染视图之前。 default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } afterCompletion:在前端控制器渲染视图之后执行,可以用来清理资源。 default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { }

     

    Processed: 0.014, SQL: 8