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