SpringMVC 阶段总结

介绍

讲一下你对SpringMVC的认识。

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

SpringMVC的流程

  1. 张三进店,说我要只叫化鸡!(发送请求RequestMapping)。
    老板 前端控制器DispatcherServlet接到后,将请求转到后厨打杂的小工处理器映射器HandlerMapping,说你去冰箱拿只肉鸡 Handler 过来,小工很快就带着肉鸡回来了。
  2. 老板得到Handler后,就将它给了厨子处理器适配器HandlerAdapter,厨子就找了个合适的烤炉处理器Handler进行加工处理。加工完毕后,厨子将黄泥包着的烤鸡ModelAndView重新交给了老板。
  3. 烤鸡一到老板手上,老板心说这不行,这么一坨,顾客也不会拆啊,还得再加工!于是就把包裹送到了摆盘师傅视图解析器ViewResolver,说你给他拾掇好了再给我端过来。摆盘师傅迅速把鸡和荷叶黄泥壳之类的分开,并把鸡美美地拆成一冷盘(解析视图),端给了老板。
  4. 老板看了看很满意,但是感觉缺少一点灵魂,现场表演撒盐哥招牌动作(渲染视图),终于大功告成!于是把这一盘叫化鸡端给了张三(响应请求)。

说人话版:

  1. 用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。
  2. DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理(并未调用Controller,只是得知)。
  3. DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller。
  4. HandlerAdapter处理器适配器去执行Controller并得到ModelAndView(数据和视图),并层层返回给DispatcherServlet。
  5. DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图。
  6. DispatcherServlet将模型数据填充到视图中。
  7. DispatcherServlet将结果响应给用户。

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

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表达式拿到。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring MVC的生命周期可以理解为请求从进入到离开的整个过程。在Spring MVC中,主要有以下几个生命周期阶段: 1. DispatcherServlet初始化:当应用启动时,DispatcherServlet将会被初始化,它是整个Spring MVC框架的前端控制器。 2. HandlerMapping查找处理器:DispatcherServlet接收到请求后,会通过HandlerMapping来查找对应的处理器(Controller)。 3. HandlerAdapter执行处理器:找到处理器后,DispatcherServlet会将请求交给HandlerAdapter来执行处理器方法,并获取处理结果。 4. HandlerInterceptor拦截处理器:在处理器执行之前或之后,可以通过HandlerInterceptor来进行一些预处理或后处理的操作。 5. HandlerExceptionResolver处理异常:如果在处理器的执行过程中出现异常,会通过HandlerExceptionResolver来处理异常,并返回给客户端相应的错误信息。 6. ViewResolver解析视图:处理器方法执行成功后,会返回一个逻辑视图名,ViewResolver会将逻辑视图名解析为具体的视图对象。 7. View渲染视图:解析到视图对象后,View会负责将模型数据填充到视图模板中,并最终生成响应内容。 8. HandlerExecutionChain执行链:在整个处理过程中,通过HandlerExecutionChain可以插入一些处理器拦截器、异常处理器等来对请求进行处理。 总结起来,Spring MVC的生命周期包括了DispatcherServlet初始化、HandlerMapping查找处理器、HandlerAdapter执行处理器、HandlerInterceptor拦截处理器、HandlerExceptionResolver处理异常、ViewResolver解析视图、View渲染视图以及HandlerExecutionChain执行链等多个阶段。通过这些阶段的协作,实现了请求的处理和响应的生成。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringMVC 生命周期](https://blog.csdn.net/lvhaoguang0/article/details/84570827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [springMVC的生命周期详解](https://download.csdn.net/download/weixin_38520437/12784264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值