关于Spring MVC的问题
一、SpringMVC的流程是什么?
1 2 3 4 5 6 7 8 9 10 11 12 | 1 . 用户发送请求至前端控制器DispatcherServlet; 2 . DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle; 3 . 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有)一并返回给DispatcherServlet; 4 . DispatcherServlet 调用 HandlerAdapter处理器适配器; 5 . HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器); 6 . Handler执行完成返回ModelAndView; 7 . HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet; 8 . DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析; 9 . ViewResolver解析后返回具体View; 10 . DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中) 11 . DispatcherServlet响应用户。 |

@ResponseBody响应数据出去,调用RequestResponseBodyMethodProcessor 处理
Processor 处理方法返回值,通过MessageConverter处理
所有的MessageConverter 合起来可以支持各种媒体类型数据的操作(读 写)
内容协商找到最终的MessageConverter
二、如何在Spring MVC中校验参数?
1 | Spring MVC 默认支持JSR- 303 校验规范 。并在Spring-Boot-starter-web中提供了JSR- 303 规范实现Hibernate Validator。我们可以使用它来进行参数校验。 |
三、Spring MVC 拦截器有什么用怎么用?
1 2 3 4 5 | Spring MVC拦截器允许我们拦截客户端请求并在三个地方处理它 - 在处理之前,处理之后或完成之后(在呈现视图时)。拦截器切面处理一些公共逻辑而避免重复处理程序代码(如日志记录),也可以用来更改Spring模型中全局使用的参数。通过以下方式: org.springframework.web.servlet.handler.HandlerInterceptorAdapter —继承该类 org.springframework.web.servlet.HandlerInterceptor—实现该接口 |
四、如何全局处理控制器异常?
1 2 3 4 5 6 7 8 9 10 11 12 13 | 通过 @ControllerAdvice 或者 @RestControllerAdvice 和 @ExceptionHandler 注解组合,通过在方法入参中捕获异常进行处理,举例如下: @Slf4j @RestControllerAdvice ( "cn.felord.manage.api" ) public class GlobalExceptionControllerAdvice { @ExceptionHandler (NullPointerException. class ) public Rest nullPointHandler(HttpServletRequest request, NullPointerException e) { log.error( "空指针啦" , e); return RestBody.failure(- 1 , "null point exception" ); } } |
五、如何处理Spring MVC 中的跨域问题?
1 2 3 4 5 6 7 8 9 | Spring MVC 解决跨域问题主要有以下几种办法: 通过Spring MVC 拦截器来处理,同理servlet中的filter也可以处理。 通过在控制层方法使用 @CrossOrigin 注解。 请注意该方案需要在Spring MVC 4 .x 以上。 通过在Spring MVC xml配置文件中的<mvc:cors>标签中配置。 通过`WebMvcConfigurer#addCorsMappings(CorsRegistry)`来配置。 |
六、简述一下注解@ModelAttribute 。
1 | @ModelAttribute 注解是Spring MVC中最重要的注解之一。它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。如果我们在方法级别使用它,则表明该方法的目的是添加一个或多个模型属性。另一方面,当用作方法参数时,它表示应从模型中检索参数。如果不存在,我们应该首先实例化它,然后将其添加到Model中。一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段。 |
七、@Autowired 注解的规则是什么?
1 | @Autowired 注解可以使用在成员属性上或方法上,按类型注入Spring bean。这个注解允许Spring解析协作的bean并注入到你业务需要的bean中。 |
八、为什么选择Spring MVC ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Spring MVC 实现了一些明确而且相对低耦合的概念,可以让开发者很容易开发和测试他们的Web应用。这些概念有: Dispatcher Servlet ——核心Servlet前置控制器,配置在web.xml文件中的。 拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理 Controllers ——具体的业务控制器,处理具体请求的业务并响应 View Resolvers ——视图解析器,用于将响应的逻辑视图解析为真正的视图View对象 Views, Models ——Views的主要作用是用于处理响应视图,然后返回给客户端,Models主要用于传递控制方法处理数据到响应视图页面 ModelAndView ——Model 和 View 的复合体 Model and Session Attributes ——对模型属性和会话属性的处理 这些概念都是完全独立而且职责单一。因此Spring MVC给了我们很大的灵活性。它基于接口(提供的实现类),我们可以使用自定义接口配置框架的每个部分。另一个重要的事情是我们不再依赖于特定的视图技术(例如,JSP),可以选择我们最复合业务的视图技术。此外,我们不仅仅在Web应用程序开发中使用Spring MVC,也可以用它创建RESTful Web服务。 |
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了