一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是面试题,也是你 Java 知识点的扫盲贴。
回答SpringMVC提供了三种方式来进行统一异常处理:使用@ExceptionHandler:使用@ExceptionHandler标注在Controller的方法上面,当Controller中的方法抛出指定异常时,Spring会自动调用标记了@ExceptionHandler的方法进行处理。但是该方式只对特定Controller有效。实现HandlerExceptionResolver接口:HandlerExceptionResolver是SpringMVC提供的一个异常处理接口,它允许我们再应用层处理所有异常,当一个Controller抛出异常时,Spring会通过HandlerExceptionResolver来决定如何处理该异常,我们可以实现该接口来定制全局的异常处理逻辑。使用@ControllerAdvice+@ExceptionHandler:目前最主流的处理方式。@Cont
回答SpringMVC的工作流程主要通过DispatcherServlet进行请求分发和处理,核心流程主要包括如下几个步骤:DispatcherServlet接收请求:DispatcherServlet作为SpringMVC的前端控制器,它接收所有的请求,负责请求的处理流程。请求映射:DispatcherServlet将请求传递给HandlerMapping,HandlerMapping根据请求的request信息找到对应的Handler。解析得到Handler后,DispatcherServlet调用HandlerAdapter处理器适配器。执行业务逻辑:HandlerAdapter处理器适配器会根据Handler调用真正的处理器处理请求,去执行Controller中的方法。当然,如果有拦截器会先执行拦截器的方法,当所有拦截器方法返回为true,再执行Controller的方法。处理请求
回答以注解为例。Spring容器在启动时会扫描@Controller或@RestController,然后解析类和方法上面的注解,将路径和处理器方法(handlermethod)之间的映射关系存储起来。当请求到达时,我们只需要根据request从注册表中匹配对应的handlermethod即可。详解原理很简单,其实内部实现并不简单。我们直接看源码。在面试题SpringMVC有哪些核心组件?中讲到,DispatcherServlet中的doDispatch()是处理请求的核心逻辑,其中的getHandler()就是根据request获取对应的Handler:protectedHandlerExecutionChaingetHandler(HttpServletRequestrequest)throwsException{if(this.handlerMappings!=null){for(H
回答SpringMVC是一个用于构建基于MVC(Model-View-Controller)设计模式的Web应用,它的核心组件包括如下几个:DispatcherServlet:前端控制器,复杂接收所有HTTP请求并将其分发到具体的处理器。HandlerMapping:根据请求URL找到对应的处理器Handler。HandlerAdapter:适配具体的处理器,负责调用对应的处理方法。Controller:Handler,具体的业务逻辑处理器,处理用户的请求并返回数据获视图。ViewResolver:视图解析器,负责解析视图名称并返回具体的视图实现。ModelAndView:用于在Controller与View之间传递数据和逻辑视图名称的对象。HttpMessageConverter:用于在请求和响应中处理JSON、XML等消息体的转换。ExceptionResolver:处理请求过程中抛出