1. SpringMVC 执行流程
Spring MVC 的执行流程如下:
1. 客户端发送请求至前端控制器(DispatcherServlet)
2. 前端控制器根据请求路径,进入对应的处理器
3. 处理器调用相应的业务方法
4. 处理器获取到相应的业务数据
5. 处理器把组装好的数据交还给前端控制器
6. 前端控制器将获取的 ModelAndView 对象传给视图解析器(ViewResolver)
7. 前端控制器获取到解析好的页面数据
8. 前端控制器将解析好的页面返回给客户端
流程如下图所示:
2. 什么是Spring MVC?简单介绍下你对Spring MVC的理解?
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开 发,减少出错,方便组内开发人员之间的配合。
3. Spring MVC的优点
- 可以支持各种视图技术,而不仅仅局限于JSP;
- 与Spring框架集成(如Ioc容器,AOP等)
- 清晰的角色分配:前端控制器(dispatcherServlet),请求到处理器映射(HandlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)
- 支持各种请求资源的映射策略。
2. 常用注解
2.1 SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替 代?
一般用@Controller注解,也可以使用@RestController,@RestController注解相当于 @ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。2.2 Spring、springmvc、springboot 中的常用注解
2.2.1 Spring的常用注解
- @Component 任何类都可以标注(万能注解),标注后会被Spring IOC容器托管
- @Controller 在控制层(MVC层)标注,标注后会被Spring IOC容器托管
- @Service 在业务逻辑层(Service层)标注,标注后会被Spring IOC容器托管
- @Repository 在数据访问层(Dao层)标注,标注后会被Spring IOC容器托管
- @Autowired 注解和 Resource 注解都用于注入bean, 前者按照类型装配, 后者按照名称装配。
- @Configuration 标注当前类是配置类
- @ComponentScan 用于对Component进行扫描。
- @Bean(“重命名”) 在方法上标注,给容器中添加组件相当于xml中的
- @Aspect 声明一个切面;PointCut 注解,声明切点
- @After 表示在方法执行之后执行;
- @Before 表示在方法执行之前执行;
- @Around 表示在方法执行之前和之后执行。
@value 将配置文件中的数据注入到我们所需要的属性字段中。
2.2.2 SpringMVC的注解
@RequestMapping 用于映射Web请求,包括访问路径和参数。
- @ResponseBody 支持将返回值放在response内。
- @RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。
- @PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)中申明的路径。
- @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合。
@RequestParam 将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
2.2.3 SpringBoot中的注解
@SpringBootApplicatoin 启动
- @SpringBootTest 测试类注解
- @Import({User.class, DB.class}) 给容器中自动创建出这两个类型的组件,默认组件的名字就是全类名
- @ImportResource(“classpath:beans.xml”) 导入Spring的配置文件,让其配置的文件生效
- @ConditionalOnBean(name = “pet”) 如果有pet这个组件,我就注册本组件
- @ConfigurationProperties(prefix = “mycar”) 获取properties文件中的内容
- @EnableConfigurationProperties(Car.class) 开启Car配置绑定,把Car这个组件自动注册到容器中
3. 其他
3.1 Spring MVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加”forward:”,比如”forward:user.do?name=method4”
(2)重定向:在返回值前面加”redirect:”,比如如”redirect:www.baidu.com”
3.2 Spring MVC的异常处理?
可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异 常处理器中添视图页面即可。
3.3 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。
3.4 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么 怎么样快速得到这个对象?
直接在方法中声明这个对象,Spring MVC就自动会把属性赋值到这个对象里面。
3.5 Spring MVC中函数的返回值是什么?
返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的 一起的,但一般用String比较好。
3.6 Spring MVC用什么对象从后台向前台传递数据的?
通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表 达式拿到。
3.7 HTTP 请求类型为 DELETE 时通过 RequestBody 传参
GET
一般用于获取数据
POST
一般用于创建数据(全量覆盖数据内容)
PUT
一般用于更新数据(部分覆盖数据内容)
DELETE
一般用于删除数据
需要注意的是,在某些协议版本下,使用 RequestBody 传入的参数会被请求直接忽略。因此,当必须使用 RequestBody 时(例如,需要传入的为复杂类型对象),可以替换为 POST 请求,同时将对应请求的 url 加上 /delete 路径,以继续保证通过路径能够获知接口目的的结果
example:
url: /api/user/delete
方法:POST