springmvc 面试题

  1. 基础
  2. Spring MVC的简介:
    1. Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。
    2. MVC(Model模型 View 视图 Controller 控制器):这是一种软件架构思想,是一种开发模式,将软件划分为三种不同类型的模块,分别是模型,视图,和控制器。
      1. 模型:用于封装业务逻辑处理(java类);
      2. 视图:用于数据展现和操作界面(Servlet);
      3. 控制器:用于协调视图和模型(jsp)
    3. 处理流程:视图将请求发送给控制器,由控制器选择对应的模型来处理;模型将处理结果交给控制器,控制器选择合适的视图来展现处理结果;
  3. Spring MVC的优点
    1. 和Spring框架的无缝集成,采用IOC便于测试
    2. 典型的纯MVC架构,Struts是不完全基于MVC框架的,Struts值栈与jsp关联密切。
  4. Spring MVC的五大组键 ?
    1. 前端控制器 (DispatcherServlet)
    2. 映射处理器(HandlerMapping)
    3. 处理器(Controller)
    4. 模型和视图(ModelAndView)
    5. 视图解析器(ViewResolver)
  5. springMVC的运行原理 
    1. 客户端请求提交到DispatcherServlet
    2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
    3. DispatcherServlet将请求提交到Controller
    4. Controller调用业务逻辑处理后,返回ModelAndView
    5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
    6. 视图负责将结果显示到客户
  6. 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?
    1. springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。
    2. springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)
      struts2是基于类开发,传递参数是通过类的属性,只能设计为多例
    3. Struts采用值栈存储请求和响应的数据,通过OGNL存取数据
      springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
  7. 讲下SpringMvc的核心入口类是什么Struts2的分别是什么
    SpringMvc的是DispatchServlet,Struts2的是StrutsPrepareAndExecuteFilter
  8. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
    是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段
  9. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代
    一般用@Controller注解,表示是表现层,不能用用别的注解代替.
  10. @RequestMapping注解用在类上面有什么作用(spring mvc中表单提交的action路径问题)
    注解 @RequestMapping 可以用在类定义处和方法定义处
    1. 定义处:规定初步的请求映射,表示类中的所有响应请求的方法都是以该地址作为父路径。
    2.  方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言
  11. @PathVariable 和 @RequestParam的区别及使用方法
    PathVariable:路径变量,顾名思义,就是要获取一个url 地址中的一部分值
    RequestParam是获取请求参数的 
  12. 怎么样把某个请求映射到特定的方法上面
    直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径
  13. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
    可以在@RequestMapping注解里面加上method=RequestMethod.GET
  14. 如果在拦截请求中,我想拦截提交参数中包含”type=test”字符串,怎么配置
    可以在@RequestMapping注解里面加上params=”type=test”
  15. 我想在拦截的方法里面得到从前台传入的参数,怎么得到
    直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样
  16. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
    直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面
  17. 怎么样在方法里面得到Request,或者Session
    直接在方法的形参中声明request,SpringMvc就自动把request对象传入
  18. SpringMVC中函数的返回值是什么.
    返回值可以有很多类型,有String, ModelAndView,当一般用String比较好
  19. SpringMvc怎么处理返回值的
    根据视图定位。SpringMvc根据配置文件中InternalResourceViewResolver的前缀和后缀,用前缀+返回值+后缀组成完整的返回值
  20. SpringMVC怎么样设定重定向和转发的
    在返回值前面加”forward:”就可以让结果转发,譬如”forward:user.do?name=method4”
    在返回值前面加”redirect:”就可以让返回值重定向,譬如”redirect:http://www.baidu.com”
  21. SpringMVC中有个类把视图和数据都合并的一起的,叫什么
    ModelAndView
  22. 怎么样把ModelMap里面的数据放入Session里面
    第一种:直接使用servlet原生API:request.getSession().setAttribute("test", "hello spring mvc!"); 
    第二种:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
  23. SpringMVC如何读取请求参数值 ?
    方式1:通过request
    方式2:通过@RequestParam
    方式3:通过Javabean
  24. Spring MVC如何向页面传值 ?
    方式1: 绑定数据到request
    方式2: 返回ModelandView
    方式3:绑定数据到ModelMap
    方式4:绑定数据到Session
  25. 扩展
  26. SpringMVC怎么和AJAX相互调用的
    通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象 
    具体步骤如下 
    1. 加入Jackson.jar 
    2. 在web.xml 配置文件中配置json的映射 
    3. 在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解(如果前后端分离开发,前后端之间的数据交互就应该全部是通过json,spring mvc中能够直接把前端传过来的json数据通过@requestBody注解转化成你需要的数据类型,同时@responseBody也能把你后端的数据类型转化成json数据传到前端)
  27. Spring MVC如何解决中文乱码问题 ?
    可以使用SpringMVC提供的过滤器(CharacterEncodingFilter)来解决;只需要配置该过滤器就可以,需要注意的是:
    过滤器的编码设置应该与jsp页面保存一致
    表单的提交方式设置为post
  28. SpringMVC如何写一个拦截器: 
    1.  写一个java类,实现HandlerInterceptor接口; 
    2. 在接口方法当中,实现处理逻辑。
    3. 配置拦截器
      <!-- 只针对部分请求拦截 -->
      <mvc:interceptor>
         <mvc:mapping path="/modelMap.do" />
         <bean class="com.et.action.MyHandlerInterceptorAdapter" />
      </mvc:interceptor>
    4. 拦截器还可以设置优先级:依据配置的顺序来执行
  29. spring mvc拦截器、过滤器
    1. 过滤器依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
    2. 拦截器依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
    3. 多个过滤器与拦截器的代码执行顺序
      1. 过滤器在系统启动的时候会实例化,仅此一次
      2. 拦截器主要看其在spring mvc配置文件中的先后顺序
  30. springmvc配置文件中是<url-pattern>/*</url-pattern>改成<url-pattern>/</url-pattern>的区别?
    通常配置过滤器的时候,使用<url-pattern>/*</url-pattern>,过滤所有的请求
    而配置<url-pattern>/</url-pattern>的时候,通常用来处理 HTTP 缓存请求、媒体 (音频/视频) 流和文件下载恢复等。
  31. 上传文件的步骤
    1. 步骤 1 : 配置web.xml允许访问*.jpg    
      步骤 2 : 配置springmvc-servlet.xml    
      步骤 3 : upload.jsp 上传页面    
      步骤 4 : 准备UploadedImageFile    
      步骤 5 : UploadController 上传控制器    
      步骤 6 : showUploadedFile.jsp 显示图片的页面​​​​​​​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值