java后台传一个对象到前台_前台判断对象中的一个布尔值_springMVC面试题
1:springMVC工作原理
springMVC架構(gòu).png
【用戶發(fā)送請(qǐng)求到前端控制器dispatcherservlet,前端控制器接收到請(qǐng)求之后調(diào)用處理器映射器,根據(jù)請(qǐng)求url找到具體的處理器,生成處理器對(duì)象返回給前端控制器,前端控制器通過(guò)處理器適配器調(diào)用處理器,執(zhí)行處理器返回ModelAndView,處理器適配器將ModelAndView返回給前端控制器,前端控制器將ModelAndView傳遞給視圖解析器,視圖解析器解析后返回具體的view,前端控制器對(duì)view進(jìn)行渲染視圖后響應(yīng)給用戶】
1、用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet
2、DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器。
3、處理器映射器根據(jù)請(qǐng)求url找到具體的處理器,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。【此時(shí)處理器映射器返回的處理器對(duì)象包含:包名+類名+方法名】
4、DispatcherServlet通過(guò)HandlerAdapter處理器適配器調(diào)用處理器
5、執(zhí)行處理器(Controller,也叫后端控制器)。
6、Controller執(zhí)行完成返回ModelAndView
7、HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器【ModelAndView內(nèi)部其實(shí)就是一個(gè)jsp文件的路徑】
9、ViewReslover解析(讀取jsp文件到內(nèi)存中)后返回具體View
10、DispatcherServlet對(duì)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11、DispatcherServlet響應(yīng)用戶
2:什么是springMVC框架【簡(jiǎn)單介紹一下spring框架的答題思路】
springMVC框架屬于表現(xiàn)層框架,使用了MVC架構(gòu)模式的思想,是spring框架的一部分。
MVC是web開發(fā)中的設(shè)計(jì)模式
3:springmvc與struts2不同
1、springmvc的入口是一個(gè)servlet即前端控制器,而struts2入口是一個(gè)filter過(guò)濾器。
2、springmvc是基于方法開發(fā)(一個(gè)url對(duì)應(yīng)一個(gè)方法),傳遞參數(shù)是通過(guò)方法的形參,一般設(shè)計(jì)為單例模式(可以設(shè)計(jì)為單例或多例(建議單例));
struts2是基于類開發(fā),傳遞參數(shù)是通過(guò)類的屬性,只能設(shè)計(jì)為多例。
【綁定參數(shù)springMVC是綁定在形參上,而struts2是綁定在成員變量上。】
多例是以類為單位,每一個(gè)請(qǐng)求創(chuàng)建一個(gè)類
單例是以方法為單位,每一個(gè)請(qǐng)求創(chuàng)建【復(fù)制】一個(gè)方法
3、Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù),
springmvc采用request域存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù)
Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù),通過(guò)OGNL存取數(shù)據(jù), springmvc通過(guò)參數(shù)解析器是將request請(qǐng)求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對(duì)象,最后又將ModelAndView中的模型數(shù)據(jù)通過(guò)request域傳輸?shù)巾?yè)面。Jsp視圖解析器默認(rèn)使用jstl。【springmvc存數(shù)據(jù)只是放在request域中,Struts采用值棧存儲(chǔ)請(qǐng)求和響應(yīng)的數(shù)據(jù)】
Springmvc的controller是單例的,而struts2是多例的
4:講下SpringMvc的核心入口類是什么,Struts1,Struts2的分別是什么
SpringMvc的是DispatchServlet,
Struts2的是StrutsPrepareAndExecuteFilter
5:SpringMvc的控制器是不是單例模式,如果是,有什么問(wèn)題,怎么解決
是單例模式,所以在多線程訪問(wèn)的時(shí)候有線程安全問(wèn)題,不要用同步,會(huì)影響性能的,解決方案是在控制器里面不能寫字段
6:SpringMVC的優(yōu)點(diǎn)
1.是基于組件技術(shù)的.全部的應(yīng)用對(duì)象,無(wú)論控制器和視圖,還是業(yè)務(wù)對(duì)象之類的都是 java組件.并且和Spring提供的其他基礎(chǔ)結(jié)構(gòu)緊密集成
【說(shuō)明:在springmvc的各個(gè)組件中,處理器映射器、處理器適配器、視圖解析器稱為springmvc的三大組件。需要用戶開發(fā)的組件有controller、view】
2.與Spring框架天生整合,無(wú)框架兼容問(wèn)題 與Struts2相比安全性高 配置量小、開發(fā)效率高
7:怎么樣把某個(gè)請(qǐng)求映射到特定的方法上面【注解@RequestMapping】
直接在方法上面加上注解@RequestMapping,并且在這個(gè)注解里面寫上要攔截的路徑
8:@RequestMapping注解用在類上面有什么作用
在class上添加@RequestMapping(url)指定通用請(qǐng)求前綴, 限制此類下的所有方法請(qǐng)求url必須以請(qǐng)求前綴開頭
可以使用此方法對(duì)url進(jìn)行分類管理
9:SpingMvc中的控制器的注解一般用那個(gè),有沒有別的注解可以替代
一般用@Conntroller注解,表示是表現(xiàn)層,不能用用別的注解代替.
10:當(dāng)一個(gè)方法向AJAX返回特殊對(duì)象,譬如Object,List等,需要做什么處理
要加上@ResponseBody注解
11:如果在攔截請(qǐng)求中,我想攔截get方式提交的方法,怎么配置
可以在@RequestMapping注解里面加上method=RequestMethod.GET
12:如果在攔截請(qǐng)求中,我想攔截提交參數(shù)中包含"type=test"字符串,怎么配置
可以在@RequestMapping注解里面加上params="type=test"
13:我想在攔截的方法里面得到從前臺(tái)傳入的參數(shù),怎么得到
直接在形參里面聲明這個(gè)參數(shù)就可以,但必須名字和傳過(guò)來(lái)的參數(shù)一樣
14:如果前臺(tái)有很多個(gè)參數(shù)傳入,并且這些參數(shù)都是一個(gè)對(duì)象的,那么怎么樣快速得到這個(gè)對(duì)象
直接在方法中聲明這個(gè)對(duì)象,SpringMvc就自動(dòng)會(huì)把屬性賦值到這個(gè)對(duì)象里面
15:怎么樣在方法里面得到Request,或者Session
直接在方法的形參中聲明request,SpringMvc就自動(dòng)把request對(duì)象傳入
16:SpringMvc中函數(shù)的返回值是什么.【controller返回值】
返回三種類型:
1、ModelAndView 無(wú)敵的 帶著數(shù)據(jù) 返回視圖路徑(返回視圖時(shí)帶著數(shù)據(jù),一塊返回) 不建議使用
2、String 返回視圖路徑 model帶數(shù)據(jù)(返回視圖就是返回視圖,數(shù)據(jù)是由model帶回,視圖和數(shù)據(jù)解耦) 官方推薦此種方式,解耦,數(shù)據(jù)和視圖分離MVC 建議使用
3、void ajax不需要跳轉(zhuǎn)視圖只需要返回?cái)?shù)據(jù) json格式數(shù)據(jù) 請(qǐng)求如果是ajax用次返回方式就比較合適 異步請(qǐng)求時(shí)使用
17:SpringMVC怎么樣設(shè)定重定向和轉(zhuǎn)發(fā)的
在返回值前面加"forward:"就可以讓結(jié)果轉(zhuǎn)發(fā),
譬如"forward:user.do?name=method4"
在返回值前面加"redirect:"就可以讓返回值重定向,
譬如"redirect:http://www.baidu.com"
18:SpringMvc用什么對(duì)象從后臺(tái)向前臺(tái)傳遞數(shù)據(jù)的
通過(guò)ModelMap對(duì)象,可以在這個(gè)對(duì)象里面用put方法,把對(duì)象加到里面,前臺(tái)就可以通過(guò)el表達(dá)式拿到
19:怎么樣把ModelMap里面的數(shù)據(jù)放入Session里面
可以在類上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
20:SpringMvc怎么和AJAX相互調(diào)用的
通過(guò)Jackson框架就可以把Java里面的對(duì)象直接轉(zhuǎn)化成Js可以識(shí)別的Json對(duì)象
具體步驟如下
1.加入Jackson.jar
2.在配置文件中配置json的映射
3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
21:json數(shù)據(jù)交互
@RequestBody
作用:
@RequestBody注解用于讀取http請(qǐng)求的內(nèi)容(字符串),通過(guò)springmvc提供的HttpMessageConverter接口將讀到的內(nèi)容(json數(shù)據(jù))轉(zhuǎn)換為java對(duì)象并綁定到Controller方法的參數(shù)上。
@ResponseBody
作用:
@ResponseBody注解用于將Controller的方法返回的對(duì)象,通過(guò)springmvc提供的HttpMessageConverter接口轉(zhuǎn)換為指定格式的數(shù)據(jù)如:json,xml等,通過(guò)Response響應(yīng)給客戶端
22:異常處理器
springmvc在處理請(qǐng)求過(guò)程中出現(xiàn)異常信息交由異常處理器進(jìn)行處理,自定義異常處理器可以實(shí)現(xiàn)一個(gè)系統(tǒng)的異常處理邏輯。
異常處理器幫助我們捕獲異常,然后交由我們自己寫的異常處理類進(jìn)行處理了
異常處理思路
系統(tǒng)中異常包括兩類:預(yù)期異常【可以預(yù)料的】和運(yùn)行時(shí)異常【運(yùn)行前不知道的】RuntimeException,前者通過(guò)捕獲異常從而獲取異常信息,后者主要通過(guò)規(guī)范代碼開發(fā)、測(cè)試通過(guò)手段減少運(yùn)行時(shí)異常的發(fā)生。
系統(tǒng)的dao、service、controller出現(xiàn)都通過(guò)throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進(jìn)行異常處理,如下圖:
圖片.png
【需要我們干兩件事:
1、第一,寫一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)HandlerExceptionResolver接口
2、第二,將寫好的實(shí)現(xiàn)類放到spring中進(jìn)行實(shí)例化】
instanceof
java 中的instanceof 運(yùn)算符是用來(lái)在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過(guò)返回一個(gè)布爾值來(lái)指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。
23:攔截器
【Spring Web MVC 的處理器攔截器類似于Servlet 開發(fā)中的過(guò)濾器Filter,用于對(duì)處理器進(jìn)行預(yù)處理和后處理。
實(shí)現(xiàn)攔截效果有兩步:
1、攔截器定義:實(shí)現(xiàn)HandlerInterceptor接口
2、攔截器配置:在springmvc.xml中配置攔截器】
Spring Web MVC 的處理器攔截器類似于Servlet 開發(fā)中的過(guò)濾器Filter,用于對(duì)處理器進(jìn)行預(yù)處理和后處理。【在進(jìn)入action or controller之前先判斷一下用戶登沒登陸】
1、攔截器定義:實(shí)現(xiàn)HandlerInterceptor接口
2、攔截器配置:在springmvc.xml中配置攔截器
1、攔截器定義:實(shí)現(xiàn)HandlerInterceptor接口
在preHandle方法中會(huì)選擇放行不放行【返回true是放行,false是不放行】
正常情況下都放行的話執(zhí)行順序是:preHandle執(zhí)行順序與定義的順序相同
postHandle和afterCompletion都是按照攔截器定義逆序調(diào)用
如果中間有的攔截器沒有放行那么:所有的postHandle都不會(huì)被調(diào)用,afterCompletion只有在放行的時(shí)候才會(huì)調(diào)用
2、攔截器配置:在springmvc.xml中配置攔截器!
interceptors:中可以配置多個(gè)攔截器
mapping:配置攔截規(guī)則【攔截所有:/**】
bean:自定義攔截器類
實(shí)例:判斷用戶是否登錄
如果沒有登錄,重定向到登錄頁(yè)面,不放行。
如果登錄則放行
從路徑中取數(shù)據(jù)@PathVariable
總結(jié)
以上是生活随笔為你收集整理的java后台传一个对象到前台_前台判断对象中的一个布尔值_springMVC面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java aop execution_S
- 下一篇: java aspose重叠_Aspose