![SpringMVC面试题(知识点详解)_第1页](http://file4.renrendoc.com/view/ca4b5f355ec6b71f03289fc4f8fc3aaa/ca4b5f355ec6b71f03289fc4f8fc3aaa1.gif)
![SpringMVC面试题(知识点详解)_第2页](http://file4.renrendoc.com/view/ca4b5f355ec6b71f03289fc4f8fc3aaa/ca4b5f355ec6b71f03289fc4f8fc3aaa2.gif)
![SpringMVC面试题(知识点详解)_第3页](http://file4.renrendoc.com/view/ca4b5f355ec6b71f03289fc4f8fc3aaa/ca4b5f355ec6b71f03289fc4f8fc3aaa3.gif)
![SpringMVC面试题(知识点详解)_第4页](http://file4.renrendoc.com/view/ca4b5f355ec6b71f03289fc4f8fc3aaa/ca4b5f355ec6b71f03289fc4f8fc3aaa4.gif)
![SpringMVC面试题(知识点详解)_第5页](http://file4.renrendoc.com/view/ca4b5f355ec6b71f03289fc4f8fc3aaa/ca4b5f355ec6b71f03289fc4f8fc3aaa5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC⾯试题(知识点详解)SpringMVC⾯试题总结⼀、谈谈你对SpringMVC的理解?SpringMVC是⼀个WEB层、控制层框架,主要⽤来负责与客户端交互,业务逻辑的调⽤。MVC是⼀种模型(model)-视图(view)-控制器(controller),三层架构的设计模式。⽤于实现前端页⾯的展现与后端业务数据处理的分离。分层设计,实现了业务系统各个组件之间的解耦,有利于系统的并⾏开发,提升开发效率。a.SpringMVC有哪些优点?1.清晰的⾓⾊划分:前端控制器(dispatcherServlet),请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver),每⼀个⾓⾊都可以由⼀个专门的对象来实现。2.SpringMVC是视图不可知的,可以⽀持各种视图技术。3.SpringMVC可以和Spring框架实现⽆缝连接。b.SpringMVC的异常处理?可以将异常抛给Spring框架,由Spring框架来处理,我们只需要配置简单的异常处理器,在异常处理器中添视图页⾯即可。⼆、SpringMVC有哪些组件?a.前端控制器(DispatcherServlet)本质上是⼀个Servlet,相当于⼀个中转站,所有的访问都会⾛到这个Servlet中,再根据配置进⾏中转到相应的Handler中进⾏处理,获取到数据和视图后,在使⽤相应视图做出响应。b.处理器映射器(HandlerMapping)本质上就是⼀段映射关系,将访问路径和对应的Handler存储为映射关系,在需要时供前端控制器查阅。c.处理器适配器(HandlerAdapter)本质上是⼀个适配器,可以根据要求找到对应的Handler来运⾏。前端控制器通过处理器映射器找到对应的Handler信息之后,将请求响应和对应的Handler信息交由处理器适配器处理,处理器适配器找到真正handler执⾏后,将结果即model和view返回给前端控制器d.视图解析器(ViewResolver)本质上也是⼀种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调⽤处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的viewe.视图(View)将handler处理器中返回的model数据嵌⼊到视图解析器解析后得到的jsp页⾯中,向客户端做出响应三、SpringMVC的流程?
(1)⽤户发送请求⾄前端控制器DispatcherServlet;(2)DispatcherServlet收到请求后,调⽤HandlerMapping处理器映射器,请求获取Handler;(3)处理器映射器根据请求url找到具体的处理器Handler,⽣成处理器对象及处理器拦截器(如果有则⽣成),⼀并返回给DispatcherServlet;(4)DispatcherServlet调⽤HandlerAdapter处理器适配器,请求执⾏Handler;(5)HandlerAdapter经过适配调⽤具体处理器进⾏处理业务逻辑;(6)Handler执⾏完成返回ModelAndView;(7)HandlerAdapter将Handler执⾏结果ModelAndView返回给DispatcherServlet;(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进⾏解析;(9)ViewResolver解析后返回具体View;(10)DispatcherServlet对View进⾏渲染视图(即将模型数据填充⾄视图中)(11)DispatcherServlet响应⽤户。四、SpringMVC有哪些组件?1.常⽤注解@RequestMappinga.基本使⽤通过注解⽅式实现路径到处理器⽅法的映射⽤在类上⽤在类上则配置的路径会作为这个类中所有处理器的路径的⽗路径使⽤⽤在⽅法上⽤在⽅法上表⽰将该⽅法变为⼀个处理器,且和指定路径做映射b.注解属性i.String[]value()default{};指定要将当前处理器绑定到哪个访问路径上多个路径。路径中也*号作为通配符匹配部分路径ii.RequestMethod[]method()default{};指定当前处理器处理哪种提交⽅式提交的请求。不指定则接收任意请求⽅式的请求iii.String[]params()default{};⽤来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理通过params属性指定只处理请求参数符合指定要求的请求/***params()*限定请求参数*格式1:只指定名称*格式2:(!名称)*格式3:(名称=值)或(名称!=值)*/@RequestMapping(value="/test04.action",params={"uname","!uage","ucity=bj","ugender!=male"})publicvoidtest04(){System.out.println("my01..test04...");}iv.String[]headers()default{};⽤来限定当前请求中必须包含指定名称的请求头才会被当前处理器处理/***headers()default()*限定请求头的要求,符合要求才能进来*格式1:只指定名称*格式2:(!名称)*格式3:(名称=值)或(名称!=值)*/@RequestMapping(value="/test05.action",headers={"Host=localhost"})publicvoidtest05(){System.out.println("my01..test05...");}@RequestBody
注解实现接收http请求的json数据,将json转换为java对象:/***控制⽅法可以接受的参数:请求实体内容*@RequestBody直接获取请求体内容*/@RequestMapping("/test06.action")publicvoidtest06(@RequestBody()Stringbody){System.out.println(body);}@ResponseBodya.返回字符串数据i.通过response返回ii.直接获取PrintWriter返回iii.通过@ResponseBody返回b.返回json数据i.⼿动拼接jsonii.通过配置@ResponseBody利⽤内置的jackson将对象处理为json返回2.获取请求参数web开发相关的对象:requestresponsesessionwebrequesta.通过request对象获取在SpringMVC的注解开发中可以选择性的接收Request和Response对象来使⽤可以⽤request对象来获取请求参数web开发相关的流对象:ReaderWriterInputStreamOutputStream模型对象:ModelMapModelMap请求参数直接获取请求参数⼿动映射获取请求参数@RequestParam封装请求参数到bean中⽂乱码解决<!--配置SpringMVC乱码解决过滤器--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>域属性@RequestAttribute@SessionAttribute
/***控制器⽅法可以接收的参数:域属性*@RequestAttributerequest从域中获取数据*@SessionAttributesession从域中获取数据*/@RequestMapping("/test02_1.action")publicStringtest02_1(HttpServletRequestrequest,HttpSessionsession){request.setAttribute("k1","v1");request.setAttribute("k2","v2");session.setAttribute("k3","v3");session.setAttribute("k4","v4");return"forward:/my01/test02_2.action";}@RequestMapping("/test02_2.action")publicvoidtest02_2(@RequestAttribute("k1")Stringk1,@RequestAttribute("k2")Stringk2,@SessionAttribute("k3")Stringk3,@SessionAttribute("k4")Stringk4){System.out.println(k1);System.out.println(k2);System.out.println(k3);System.out.println(k4);}其他注解@CookieValue/***控制器⽅法可以接受的参数:cookie的值*@CookieValue获取指定名称cookie的值*/@RequestMapping("/test03.action")publicvoidtest03(@CookieValue("JSESSIONID")StringJSESSIONID){System.out.println(JSESSIONID);}@RequestHeader/***控制器⽅法可以接受的参数:请求头的值*@RequestHeader获取指定名称请求头的值*/@RequestMapping("/test04.action")publicvoidtest04(@RequestHeader("host")Stringhost){System.out.println(host);}@RequestBody/***控制⽅法可以接受的参数:请求实体内容*@RequestBody直接获取请求体内容*/@RequestMapping("/test06.action")publicvoidtest06(@RequestBody()Stringbody){System.out.println(body);}@PathVariable通过@PathVariable可以将URL中占位符参数绑定到控制器处理⽅法的参数中//@PathVariable可以⽤来映射URL中的占位符到⽬标⽅法的参数中@RequestMapping("/testPathVariable/{id}")publicStringtestPathVariable(@PathVariable("id")Integerid){System.out.println("testPathVariable:"+id);returnSUCCESS;}
五、SpringMVC中资源的跳转a.三种资源跳转⽅式的区别:1.转发请求转发是服务器内部的跳转地址栏不发⽣变化只有⼀个请求响应可以通过request域传递数据2.重定向请求重定向是浏览器⾃动发起对跳转⽬标的请求地址栏会发⽣变化两次请求响应⽆法通过request域传递对象3.定时刷新定时刷新是浏览器⾃动发起对跳转⽬标的请求地址栏会发⽣变化两次请求响应⽆法通过request域传递对象可以在资源跳转期间提⽰额外信息a.SpringMVC中的请求转发可以通过返回forward:/xxxx.xxx格式的字符串表明要转发到指定地址b.SpringMVC中的请求重定向i.传统⽅式实现请求重定向ii.SpringMVC⽅式实现请求重定向可以通过返回redirect:/xxxx.xxx格式的字符串表明要重定向到指定地址通过这种⽅式实现请求重定向时不⽤在路径前写应⽤名,SpringMVC会⾃动拼接应⽤名c.SpringMVC中的定时刷新SpringMVC中没有提供实现定时刷新的便捷⽅式,只能⽤传统⽅式实现定时刷新六、SpringMVC中域的使⽤a.request域的使⽤i.传统⽅式向request域中写⼊数据ii.向model中写⼊数据,默认就是写⼊request域b.session域的使⽤i.传统⽅式向session域中写⼊数据
@RequestMapping("/test01.action")publicStringtest01(HttpServletRequestrequest){request.setAttribute("k1","v1");request.setAttribute("k2","v2");return"forward:/my01/test02.action";}@RequestMapping("/test02.action")publicvoidtest02(HttpServletRequestrequest){Stringk1=(String)request.getAttribute("k1");Stringk2=(String)request.getAttribute("k2");System.out.println(k1);System.out.println(k2);}ii.通过model+@SessionAttributes实现将数据写⼊session/***SpringMVC作⽤域--request--MVC域⽅式*向模型中写⼊的数据本质上就是将数据写⼊了request域*/@RequestMapping("/test03.action")publicStringtest03(Modelmodel){model.addAttribute("k1","v1");model.addAttribute("k2","v2");return"forward:/my01/test04.action";}@RequestMapping("/tet04.action")publicvoidtest04(@RequestAttribute("k1")Stringk1,@RequestAttribute("k2")Stringk2){System.out.println(k1);System.out.println(k2);}c.ServeletContext域中的使⽤只能通过传统⽅式写⼊/***SpringMVC作⽤域--SessionContext--域传统⽅式*/@RequestMapping("/test01.action")publicvoidtest01(HttpServletRequestrequest){ServletContextsc=request.getServletContext();sc.setAttribute("sck1","scv1");sc.setAttribute("sck2","scv2");}@RequestMapping("/test02.action")publicvoidtest02(HttpServletRequestrequest){ServletContextsc=request.getServletContext();Stringsck1=(String)sc.getAttribute("sck1");Stringsck2=(String)sc.getAttribute("sck2");System.out.println(sck1);System.out.println(sck2);}d.@RequestAttribute⽤在控制器⽅法参数上⽤来从Request域中获取指定名称的属性的属性值e.@SessionAttrribute⽤在控制器⽅法参数上⽤来从Session域中获取指定名称的属性的属性值f.@ModelAttribute
i.使⽤在⽅法上则被修饰的⽅法将会在当前类的任意handler⽅法执⾏之前执⾏,该⽅法返回的返回值会⾃动存⼊model供后续使⽤ii.使⽤在⽅法参数之前会从model中获取属性值赋值到被修饰的⽅法参数上七、处理器⽅法⽀持的参数类型和返回值类型a.⽀持的⽅法参数类型HttpServletRequest代表当前请求的对象HttpServletResponse代表当前响应的对象HttpSession代表当前会话的对象WebRequestSpringMVC提供的对象相当于是request和session的合体,可以操作这两个域中的属性InputStreamOutputStreamReaderWriter代表request中获取的输⼊流和response中获取的输出流通过@PathVariable@RequestParam声明的⽅法参数@PathVariable可以将请求路径的指定部分获取赋值给指定⽅法参数@RequestParam可以将指定请求参数赋值给指定⽅法参数如果不写此注解,则默认会将同名的请求参数赋值给⽅法参数通过@RequestAttribute、@SessionAttribute和@ModelAttribute声明的⽅法参数@RequestAttribute从request域中获取数据@SessionAttribute从Session域中获取数据@ModelAttribute从Model中获取数据通过@CookieValue和@RequestHeader声明的⽅法参数@CookieValue可以将请求中的指定名称的cookie赋值给指定⽅法参数@RequestHeader可以将请求参数中的指定名称的头赋值给指定⽅法参数Model和ModelMap和java.util.Map向这些ModelModelMapMap中存⼊属性,相当于向模型中存⼊数据Bean类SpringMVC⾃动将请求参数封装到beanMultipartFile实现⽂件上传功能时,接收上传的⽂件对象ErrorsBindingResult实现数据验证的参数b.控制器⽅法⽀持的返回值类型ModelAndView:可以返回⼀个ModelAndView对象,在其中封装Model和View信息*View:可以直接返回⼀个代表视图的View对象字符串类型有以下三种:1.redirect/***控制器⽅法可以返回的返回值类型:redirect:开头的字符串*返回redirect:开头的字符串可以实现请求重定向*/@RequestMapping("/test04_1.action")publicvoidtest04_01(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{response.sendRedirect(request.getContextPath()+"/index.jsp");}@RequestMapping("/test04_2.action")publicStringtest04_2(){return"redirect:/index.jsp";}2.forward
/***控制器⽅法可以返回的返回值类型:forward:开头的字符串*返回forward:开头的字符串可以实现请求转发*/@RequestMapping("/test03_1.action")publicvoidtest03_1(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.getRequestDispatcher("/index.jsp").forward(request,response);}//@RequestMapping("/test03_2.action")publicStringtest03_2(){return"forward:/index.jsp";}3.普通字符/***控制⽅法可以返回的返回值类型:普通字符型*返回的普通字符串会作为试图名称来使⽤*/@RequestMapping("/test02.action")publicStringtest02(Modelmodel){model.addAttribute("k1","v1");model.addAttribute("k2","v2");return"my01test02";}void:如果返回值类型是void,则会⾃动返回和当前处理器路径名相同的视图名/***控制⽅法返回可以返回的返回值类型:void*将使⽤默认视图名作为视图名称来使⽤*所谓默认视图名=当前控制器⽅法访问路径去除前后缀*/@RequestMapping("/test05.action")publicvoidtest05(Modelmodel){model.addAttribute("k1","v1");model.addAttribute("k2","v2");}⽅法被@ResponseBody修饰当⽅法被@ResponseBody修饰时,默认将返回的对象转为json写⼊输出/***控制器可以返回的返回值类型:@ResponseBody修饰的⽅法*如果控制器⽅法被@ResponseBody修饰,则⽆论返回值是什么,都会作为相应发送给浏览器*如果是基本数据类型、String类型,则直接发送给浏览器*如果是对象类型,则转换为json格式字符串发送给浏览器*/@ResponseBody@RequestMapping("/test06_2.action")publicUsertest06_2(){returnnewUser(3,"xxx",Arrays.asList("bj","sh","gz"));}//直接打给浏览器@ResponseBody@RequestMapping("/test06_1.action")publicStringtest06_1(){return"abc";}除以上之外返回的任何内容都会被当做模型中的数据来处理,值为返回的数据,键为返回类型名⾸字母转⼩写,⽽返回的视图名等同于返回值为void的时的视图名。⼋、SpringMVC⽂件上传
a.准备⽂件上传表单⽂件上传表单必须满⾜如下三个条件a.⽂件上传项必须有name属性b.表单必须是post提交c.表单必须是enctype=“multipart/form-date”<!--配置⽂件上传⼯具类--><beanid="mltipartResolver"class="mons.CommonsMultipartResolver"><propertyname="defaultEncoding"value="utf-8"/></bean>b.在配置⽂件中配置⽂件上传⼯具必须是这个id必是这个类<!--配置⽂件上传⼯具类--><beanid="mltipartResolver"class="mons.CommonsMultipartResolver"><propertyname="defaultEncoding"value="utf-8"/></bean>c.在Controller中实现⽂件上传/***⽂件上传*/@RequestMapping("/test01.action")publicvoidtest01(MultipartFilefx)throwsIOException{fx.transferTo(newFile("D://"+fx.getOriginalFilename()));}九、异常处理为当前Controller配置错误处理@ExceptionHandlerpublicModelAndViewexceptionHandl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代小区火灾应急救援队伍的实战化训练探讨
- 现代企业员工激励机制设计与实践
- 班级环境卫生与校园文化建设的结合
- 4《机械摆钟》说课稿-2023-2024学年科学五年级上册教科版
- 2023七年级数学上册 第3章 一次方程与方程组3.2 一元一次方程的应用第1课时 等积变形和行程问题说课稿 (新版)沪科版
- Unit 4 Plants around us Part A Let's learn(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024-2025学年新教材高中英语 Unit 3 The world meets China预习 新知早知道1(教用文档)说课稿 外研版选择性必修第四册
- 2025日本食品业A公司特许合同样本
- 2025年银行担保借款合同范本
- 1小蝌蚪找妈妈 说课稿-2024-2025学年语文二年级上册统编版
- 家庭燃气和煤气防火安全
- 第十一章《功和机械能》达标测试卷(含答案)2024-2025学年度人教版物理八年级下册
- 2025年销售部年度工作计划
- 2024年苏州工业园区服务外包职业学院高职单招职业适应性测试历年参考题库含答案解析
- ESG表现对企业财务绩效的影响研究
- DB3713T 340-2024 实景三维数据接口及服务发布技术规范
- 八年级生物开学摸底考(长沙专用)(考试版)
- (工作规范)公路预防性养护工作手册
- 车间空调岗位送风方案
- 使用错误评估报告(可用性工程)模版
- 初一年级班主任上学期工作总结
评论
0/150
提交评论