关于Spring MVC的问题
一、SpringMVC的流程是什么?
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响应用户。
二、如何在Spring MVC中校验参数?
Spring MVC 默认支持JSR-303校验规范 。并在Spring-Boot-starter-web中提供了JSR-303规范实现Hibernate Validator。我们可以使用它来进行参数校验。
三、Spring MVC 拦截器有什么用怎么用?
Spring MVC拦截器允许我们拦截客户端请求并在三个地方处理它 - 在处理之前,处理之后或完成之后(在呈现视图时)。拦截器切面处理一些公共逻辑而避免重复处理程序代码(如日志记录),也可以用来更改Spring模型中全局使用的参数。通过以下方式: org.springframework.web.servlet.handler.HandlerInterceptorAdapter —继承该类 org.springframework.web.servlet.HandlerInterceptor—实现该接口
四、如何全局处理控制器异常?
通过@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 中的跨域问题?
Spring MVC 解决跨域问题主要有以下几种办法: 通过Spring MVC 拦截器来处理,同理servlet中的filter也可以处理。 通过在控制层方法使用@CrossOrigin注解。 请注意该方案需要在Spring MVC 4.x 以上。 通过在Spring MVC xml配置文件中的<mvc:cors>标签中配置。 通过`WebMvcConfigurer#addCorsMappings(CorsRegistry)`来配置。
六、简述一下注解@ModelAttribute 。
@ModelAttribute注解是Spring MVC中最重要的注解之一。它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。如果我们在方法级别使用它,则表明该方法的目的是添加一个或多个模型属性。另一方面,当用作方法参数时,它表示应从模型中检索参数。如果不存在,我们应该首先实例化它,然后将其添加到Model中。一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段。
七、@Autowired 注解的规则是什么?
@Autowired注解可以使用在成员属性上或方法上,按类型注入Spring bean。这个注解允许Spring解析协作的bean并注入到你业务需要的bean中。
八、为什么选择Spring MVC ?
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服务。
关于Spring MVC的问题的更多相关文章
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...
- Spring MVC重定向和转发以及异常处理
SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...
- Spring MVC入门
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- Spring7:基于注解的Spring MVC(下篇)
Model 上一篇文章<Spring6:基于注解的Spring MVC(上篇)>,讲了Spring MVC环境搭建.@RequestMapping以及参数绑定,这是Spring MVC中最 ...
- Spring6:基于注解的Spring MVC(上篇)
什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...
- 高性能的关键:Spring MVC的异步模式
我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚. 什 ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- spring mvc DispatcherServlet详解之前传---FrameworkServlet
做项目时碰到Controller不能使用aop进行拦截,从网上搜索得知:使用spring mvc 启动了两个context:applicationContext 和WebapplicationCont ...
- 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的
感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...
随机推荐
- CSP-S2021 挂分记
赛前 数了数,这是我第五次来南航,不知道以后还有机会了(2018 NOIP, 2019CSP, 2020CSP, 2020NOIP). 上午一觉睡到 10 点,学了一下感觉很有用的 BIT 倍增,顺手 ...
- char *p、char p[]、字符串的几个题目
总结一下遇到的关于char *p.char p[]和字符串的题目: 例一:(指针的指针) 1 void getmemory(char **p) 2 { 3 p = (char *)malloc(100 ...
- 如何利用官方SDK文件来辅助开发
如何利用官方SDK文件来辅助开发 1.首先要先知道什么是SDK? SDK或者SDK包指的是,半导体厂商针对自己研发的芯片,同步推出的一个软件开发工具包. 它可以简单的为某个程序设计语言提供应用程序接口 ...
- RocketMQ这样做,压测后性能提高30%
从官方这边获悉,RocketMQ在4.9.1版本中对消息发送进行了大量的优化,性能提升十分显著,接下来请跟着我一起来欣赏大神们的杰作. 根据RocketMQ4.9.1的更新日志,我们从中提取到关于消息 ...
- OpenStack——云平台部署
一.配置网络 准备:安装两台最小化的CentOS7.2的虚拟机,分别添加两张网卡,分别为仅主机模式和NAT模式,并且计算节点设置为4G运行内存,50G硬盘 1.控制节点--配置网络 控制节点第一个网卡 ...
- SSH服务及通过SSH方式登录linux
SSH服务及通过SSH方式登录linux 1.检查SSH服务转自:[1]Linux之sshd服务https://www.cnblogs.com/uthnb/p/9367875.html[2]Linux ...
- oracle 日期语言格式化
TO_DATE ('17-JUN-87', 'dd-mm-yy', 'NLS_DATE_LANGUAGE = American')
- 【Java 泛型】之 <? super T> 和<? extends T> 中 super ,extends如何理解?有何异同?
Java 泛型 <? super T> 和<? extendsT>中 super ,extends怎么 理解?有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型 ...
- Android 基础UI组件(二)
1.Spinner 提供一个快速的方法来从一组值中选择一个值.在默认状态Spinner显示当前选择的值.触摸Spinner与所有其他可用值显示一个下拉菜单,可以选择一个新的值. /** * 写死内容: ...
- binlog2sql 解析日志失败 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 0: invalid start byte
python35 ./binlog2sql.py -h... -P... -u... -p... -B --start-file="mysql-bin.091940" --star ...