SpringMVC面试题

● 请谈一下Spring MVC的工作原理是怎样的? 

①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求。
② DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)。
③在这个地方Spring会通过HandlerAdapter对该处理器进行封装。
④ HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用。
⑤ Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet,ModelAndView顾名思义,包含了数据模型以及相应的视图的信息。
⑥ ModelAndView的视图是逻辑视图,DispatcherServlet还要借助ViewResolver完成从逻辑视图到真实视图对象的解析工作。
⑦ 当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染。
⑧ 客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件。

● 请简述一下SpringMVC的运行机制?以及运行机制的流程是什么?

1、用户发送请求时会先从DispathcherServler的doService方法开始,在该方法中会将ApplicationContext、localeResolver、themeResolver等对象添加到request中,紧接着就是调用doDispatch方法。

2、进入该方法后首先会检查该请求是否是文件上传的请求(校验的规则是是否是post并且contenttType是否为multipart/为前缀)即调用的是checkMultipart方法;如果是的将request包装成MultipartHttpServletRequest。

3、然后调用getHandler方法来匹配每个HandlerMapping对象,如果匹配成功会返回这个Handle的处理链HandlerExecutionChain对象,在获取该对象的内部其实也获取我们自定定义的拦截器,并执行了其中的方法。

4、执行拦截器的preHandle方法,如果返回false执行afterCompletion方法并理解返回

5、通过上述获取到了HandlerExecutionChain对象,通过该对象的getHandler()方法获得一个object通过HandlerAdapter进行封装得到HandlerAdapter对象。

6、该对象调用handle方法来执行Controller中的方法,该对象如果返回一个ModelAndView给DispatcherServlet。

7、DispatcherServlet借助ViewResolver完成逻辑试图名到真实视图对象的解析,得到View后DispatcherServlet使用这个View对ModelAndView中的模型数据进行视图渲染。

● 请说明一下springmvc和spring-boot区别是什么?

总的来说,Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性地推出了Spring Boot,它遵循约定优于配置,极大降低了Spring使用门槛,但又不失Spring原本灵活强大的功能。

● 请说明一下Spring MVC注解的优点是什么?

1、XML配置起来有时候冗长,此时注解可能是更好的选择,如jpa的实体映射;注解在处理一些不变的元数据时有时候比XML方便的多,比如springmvc的数据绑定,如果用xml写的代码会多的多;

2、注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,所以在一些中小项目中使用注解反而提供了开发效率,所以没必要一头走到黑;

3、注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。

### 关于Spring MVC的常见面试题 以下是关于Spring MVC的一些高频面试问题及其解答: #### 1. **什么是Spring MVC?** Spring MVC 是一种基于Java的轻量级Web开发框架,它是Spring Framework的一部分。它遵循MVC(模型-视图-控制器)设计模式,用于构建清晰分离的应用程序结构[^1]。 #### 2. **Spring MVC中的DispatcherServlet是什么?** `DispatcherServlet` 是Spring MVC的核心组件之一,作为前端控制器负责接收所有的HTTP求并将其分发到相应的处理器(Handler)。通过配置文件或注解方式定义映射规则来实现这一过程[^1]。 #### 3. **Spring MVC如何处理求流程?** 当客户端发起一个求时,该求会被转发给 `DispatcherServlet` 。随后按照如下顺序执行: - 调用合适的 HandlerMapping 来找到对应的 Controller; - 执行目标方法并将结果交给适配器进行解析; - 将最终的数据与逻辑视图名称返回至 DispatcherServlet ,再由其渲染实际页面后响应用户[^1]。 #### 4. **Spring Bean默认作用范围是什么?如果存在状态怎么办?** 在Spring容器中,默认情况下所有Bean都是以Singleton形式创建出来的。然而对于那些具有内部状态的对象来说可能会引发线程安全性方面的问题。因此建议要么让此类对象无状态化;要么考虑改变它们的作用域为Prototype从而每次注入新实例[^2]。 #### 5. **Spring MVC支持哪些类型的返回值?哪种更推荐使用?为什么?** 返回值可以是多种类型,包括但不限于String、ModelAndView等。其中较为常用的是String表示跳转路径名或者视图名字串。而 ModelAndView 则允许我们同时指定模型(Model)以及试图(View),不过通常为了简化代码书写习惯上还是倾向于采用字符串形式更好一些[^3]。 #### 6. **怎样向Session存储数据并通过Spring MVC管理生命周期?** 可以通过@SessionAttributes 注解读取特定属性保存进HttpSession 中直到超时期间结束为止。例如下面例子展示了如何利用Map接口参数自动绑定request scope内的键值对,并且还能把这些信息存入session里供后续访问[^4]: ```java @Controller @SessionAttributes(names={"key"}) // 或者 types={SomeType.class} public class ExampleController { @RequestMapping("/example") public String exampleMethod(@RequestParam String param, Map<String,Object> model){ model.put("attributeName","valueToBeStoredInSession"); return "viewName"; } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值