SpringMVC 阶段总结

介绍

讲一下你对SpringMVC的认识。

SpringMVC是一个基于请求驱动的web框架,主要是实现了MVC设计模式。MVC设计模式就是把整个项目分成 Model层View层Controller层,让整体的逻辑清晰,层次分明。
Model层:写一些JavaBean在里面,主要是包含整个项目的数据对象。
View层:页面的视图配置
Controller层:接收前端的请求,返回响应

SpringMVC的流程

(1) 用户发送请求至前端控制器 DispatcherServlet;
(2) DispatcherServlet 收到请求后,调用 HandlerMapping 处理器映 射器,请求获取 Handler;
(3) 处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处 理器拦截器(如果有则生成)一并返回给 DispatcherServlet;
(4) DispatcherServlet 调用 HandlerAdapter 处理器适配器;
(5) HandlerAdapter 经过适配调用 具体处理器(HandlerAdapter,也叫后端控 制器);
(6) Handler 执行完成返回 ModelAndView;
(7) HandlerAdapter 将 Handler 执行结果 ModelAndView 返回给 DispatcherServlet;
(8) DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解 析器进行解析;
(9) ViewResolver 解析后返回具体 View;
(10) DispatcherServlet 对 View 进行渲染视图

图文版:
在这里插入图片描述
在这里插入图片描述

SpringMVC和Strus2的区别?

  1. 入口不同
    SpringMVC入口是servlet,Struts2入口是filter
  2. 生命周期不同
    SpringMVC Controller是单例的,所以效率更高,但是不能使用成员变量获取参数。
    Struts2 Action是多例的,可以使用成员变量获取参数,导致效率比较低。

SpringMVC的控制器是什么设计模式?有什么问题?如何解决?

是单例模式,所以在多线程访问的时候有线程安全问题,所以不要用同步,会影响性能。

解决方案是不要在controller中定义成员变量,也就是不要在controller中定义比如private String name; 这类操作。如果非要用,这个时候就可以用Spring的注解@Scope来实现,设置成员变量的范围。

比如把这个bean 的范围设置成session,表示这bean是会话级别的:@Scope(“session”),当我们首次访问这个Controller的时候,他会根据判断这个会话是不是处于同一个session中,如果是一个新的,容器会执行init方法,如果一样就不会。

为什么设计成单例设计模式?

因为单例模式可以提高程序运行效率,节省内存空间,不需要每次访问都创建新的对象,所以,不需要花费额外的性能去创建对象,销毁对象,管理对象等等。

SpringMVC的常用注解有哪些。

Controller:标注该类是控制器。
@RequestMapping:后面跟个具体的url路径,用在方法上是该方法的具体路径,用在类上表示是所有方法的父路径。
@RequestBody:接收体,将客户端请求过来的Json转成Java对象
@ResponseBody:响应体,将Java对象转成Json,并且发送给客户端。
@PathVariable:用于获取URI中的参数,比如 xxx.com/user/{id} ,中id的值
@RestController:RESTful 风格的新API,还有@GetMapping,@DeleteMapping,@PostMapping,@PutMapping等。
@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射。

注解的原理

注解的本质是一个继承了Annotation类的接口,注解接口的实现类实际上是Java通过反射在运行时生成的动态代理类。

@Component@Bean的区别是什么?

区别@Bean@Component
作用对象方法
使用位置在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。
自定义性比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。\

SpringMvc用什么对象从后台向前台传递数据的?

通过Model对象或Map对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏路加

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值