Spring MVC面试题总结

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 https://blog.csdn.net/weixin_43863007/article/details/89043591
1. 什么是SpringMVC?简单介绍下你对SpringMVC的理解?
  • Springmvc是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合
2. SpringMVC的流程?
  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Controller
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象以及处理器拦截器,一并返回给DispatcherServlet
  4. DispatcherServlet调用HandlerAdapter处理器适配器
  5. HandlerAdapter经过适配调用具体处理器Controller
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析
  9. ViewResolver解析后返回具体View
  10. DispatcherServlet对View进行渲染视图,即将模型数据填充至视图中
  11. DispatcherServlet响应用户
    在这里插入图片描述
3. Spring MVC的优点:
  1. 可以支持各种视图技术,而不仅仅局限于JSP;
  2. 与Spring框架几册很难过(IOC容器,AOP等);
  3. 清晰的角色分配:前端控制器(DispatcherServlet),请求到处理器映射(HandlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)
  4. 支持各种请求资源的映射策略
4. Spring MVC怎么和Ajax相互调用的?

通过jackson框架就可以把Java里面的对象直接转换成js可以识别的json对象,在配置文件中添加json映射,在接受ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

5. Spring MVC异常处理?
  • 可以将异常抛给Spring框架来处理,我们只需要配置简单的异常处理器,在异常处理器中添加视图页面即可
6. Spring MVC的控制器是不是单例模式,如果是有什么问题,怎么解决?
  • 是单例模式,所以在县城访问的时候有线程安全问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段
7. SpringMVC常用注解有哪些?
  • @RequestMapping:用于处理请求的url映射的注解,可用于类或方法上,用于类上,则表示类中的所有响应请求的方法都是以改地址作为父路径
  • @RequestBody:注解实现接收HTTP请求的json数据,将json转换为Java对象
  • @ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户
8. SpringMVC中的控制器的注解用那个,有没有别的注解可以替代?
  • 一般用@Controller注解,表示是表现层,不能用别的注解代替
9. 如何在拦截请求中,拦截get方式提交的方法,怎么配置?
  • 可以在@RequestMapping注解里面加上Method=requestMethod.GET
10. 怎么在方法里面得到Request或者Session?
  • 直接在方法的形参中声明Request,就会自动把Request对象传入
11. 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
  • 直接在形参里面声明这个参数就可以,但是name值和传过来的参数一样
12. SpringMVC中函数的返回值是是什么?
  • 返回值可以有很多类型,String,ModelAndView,ModelAndView类吧视图和数据都合并在一起的,用String比较好
13.SpringMVC用什么对象从后台向前台传递数据的?
  • 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台可以通过el表达式拿到
14. 注解原理:

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类,我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象,通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法,该方法会从memberValues这个Map中索引出对应的值,而memberValues得来源是Java常量池

猜你喜欢

转载自blog.csdn.net/weixin_43863007/article/details/89043591