SpringMVC常见面试题总结

1. MVC设计模式
  • Model:系统涉及的数据,也就是 dao 和 bean。
  • View:展示模型中的数据,只是用来展示。
  • Controller:处理用户请求都发送给 ,返回数据给视图层并展示给用户。
2. 什么是SpringMVC
  • Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。
  • Spring MVC 下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。
3. @RestController和@Controller的区别
  • @Controller 返回一个页面,属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。
  • @RestController 返回JSON 或 XML 形式数据,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
  • @Controller +@ResponseBody= @RestController
4. 全局异常处理
  • @ControllerAdvice :注解定义全局异常处理类
  • @ExceptionHandler :注解声明异常处理方法

示例:

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

	// 抛出的MethodArgumentNotValidException会在该方法中被捕获
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
       ......
    }
}
5. 拦截器
  • Spring Interceptor是一个非常类似于Servlet Filter 的概念,在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors(0或更多)。
  • 自定义 Interceptor需实现HandlerInterceptor接口,并重写以下三个方法:
// 在方法执行前调用
// 返回true则继续执行,返回falsa则拒绝请求,不再执行其他拦截器
public boolean preHandle(HttpServletRequest request,
                         HttpServletResponse response,
                         Object handler)
 
 // 方法执行后,渲染视图前调用
 // 可对传参进行修改
public void postHandle(HttpServletRequest request,
                       HttpServletResponse response,
                       Object handler,
                       ModelAndView modelAndView)
 
 // 渲染视图时调用
public void afterCompletion(HttpServletRequest request,
                            HttpServletResponse response,
                            Object handler,
                            Exception ex)
  • 拦截器的配置:自定义一个注解类实现WebMvcConfigurer接口,向容器中注册拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // LogInterceptor apply to all URLs.
        registry.addInterceptor(new LogInterceptor());
    }
}
6. 拦截器的执行顺序

顺序进,倒序出

pre1——>pre2——>post2——>post1——>comp1——>comp2

¥7. SpringMVC工作原理
  1. 客户端发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet 根据请求信息调用处理器映射器HandlerMapping,解析请求获取对应的 Handler
  3. 处理器映射器HandlerMapping根据请求url找到具体处理器,生成处理器对象及拦截器返回给DispatcherServlet
  4. DispatcherServlet请求处理器适配器HandlerAdapter处理Handler
  5. 处理完成后返回一个 ModelAndView 对象给DispatcherServlet
  6. DispatcherServlet将ModelAndView传给ViewResolver进行解析
  7. 解析完成后返回实际的 View
  8. DispatcherServlet将View进行视图渲染后返回给用户
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,它通过将Model,View,Controller分离,将web层进行职责解耦,简化开发,减少出错,方便开发人员之间的配合。\[1\]关于Spring MVC的工作流程,用户发起Web请求后,请求会到达Web容器,然后服务器将请求对象交给前置控制器(DispatcherServlet)。前置控制器是Spring MVC的核心入口,它会拦截匹配的请求并将其分发给相应的控制器进行处理。控制器处理完请求后,会返回一个ModelAndView对象,其中包含了处理结果和要展示的视图页面。最后,前置控制器将ModelAndView对象交给视图解析器进行解析,最终将结果返回给用户。\[3\]关于Spring MVC的控制器是否是单例模式,是的,Spring MVC的控制器默认是单例模式。这可能会引发线程安全的问题,因为多个请求可能会同时访问同一个控制器实例。为了解决这个问题,可以在控制器类上添加@Scope("prototype")注解,将其设置为原型模式,这样每次请求都会创建一个新的控制器实例,从而避免线程安全问题。\[2\] #### 引用[.reference_title] - *1* *3* [SpringMVC常见面试题(5个最常见面试题,回答超详细)](https://blog.csdn.net/feng8403000/article/details/122280816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVC常见面试题总结(超详细回答)](https://blog.csdn.net/a745233700/article/details/80963758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值