java框架面試高頻問題(SpringMVC)

1.SpringMVC是什麼? 請說出你對它的理解?

SpringMVC是Spring將Web層基於MVC封裝後的框架.

在沒有SpringMVC之前,Web層的Servlet負責的事情很多,很雜.
  例如:接收請求,調用service層處理請求,封裝返回結果,響應信息給瀏覽器.
SpringMVC將Servlet負責的事情分門別類,進行具體的劃分.
  M-model: 封裝數據
  V-View: 封裝視圖
  C-Controller: 處理器方法,用於接收請求

 

 

2.SpringMVC的加載流程是什麼?

加載流程,即服務器啟動時,加載SpringMVC的環境:
        1.服務器啟動時從web.xml文件開始加載
    2.初始總控制器 DispatcherServlet
    3.在總控制器的初始化方法中(initStrategies:初始化策略),完成核心組件的加載
        處理器映射器:HandlerMapping
         建立綁定路徑與方法全限定名的對應關係
      處理器適配器:HandlerAdapter
         適配處理器的實現方式,調用指定的類反射執行處理器方法
      視圖解析器:ViewResolver
         根據邏輯視圖生成對應的物理視圖,並將物理視圖返回

 

3.SpringMVC的執行流程是什麼?

執行流程,即瀏覽器發起請求後,框架內部的執行鏈路:
        1.瀏覽器發起請求給服務器
    2.DispatcherServlet攔截來自瀏覽器的請求
    3.總控制器調用處理器映射器,根據請求路徑找到對應的方法全限定名,並返回給總控制器
    4.總控制器調用處理器適配器,找到對應的方法適配實現方式,調用指定的實現類反射執行方法
    5.總控制器調用視圖解析器,根據邏輯視圖找到對應的物理視圖
    6.生成響應

4.SpringMVC的核心組件有哪些?作用是什麼?  

    DispatcherServlet: 總控制器/前端控制器
      接收請求,調度
    HandlerMapping: 處理器映射器
      SpringMVC框架加載時,存放請求路徑與處理器方法之間的映射關係
    HandlerAdapter: 處理器適配器
      適配處理器的實現方式,實現方式不同調用的適配器類不同.不同的適配器類,可以處理不同的處理器方法.
    ViewResolver: 視圖解析器
      根據邏輯視圖,生成對應的物理視圖,並將物理視圖返回給總控制器
    Handler: 處理器
      我們自己編寫的用於處理器業務的方法

5.SpringMVC常用註解有哪些?

@RequestMapping
    為處理器綁定瀏覽器訪問的路徑
@RequestBody
    解析請求攜帶的json數據,封裝到對應的javaBean中
@ResponseBody
    將響應結果裝換成json並響應給瀏覽器
@Controller
    用於創建Controller層類對象,並將類對象存放到SpringMVC的IOC容器中
@ControllerAdvice
    全局異常處理
  全局數據綁定
  全局數據預處理

6.@Controller註解的作用

用於創建Controller層類對象,並將類對象存放到SpringMVC的IOC容器中

7.@RequestMapping註解的作用

 註解書寫位置:
    類上: 用於窄化請求路徑,訪問此類中的方法時,方法路徑前都要加上此路徑
    方法上: 為處理器方法綁定瀏覽器訪問的路徑

8.SpringMVC如何設置轉發和重定向?

請求轉發:
    邏輯視圖字符串 + 視圖解析器
    響應標記 + 物理視圖字符串
重定向:
    響應標記 + 物理視圖字符

9.SpringMVC中攔截器編寫方式?

SpringMVC中的攔截器實現方式有兩種:
    1.編寫一個類實現HandlerInterceptor接口,重寫抽象方法
  2.編寫一個類繼承HandlerInterceptorAdapter,選擇性的重寫方法
以上兩種方式需要在核心配置文件中配置攔截的路徑

10.SpringMvc的處理器是不是單例模式?如果是,有什麼問題?怎麼解決?

是單例模式,在多線程訪問的時候有線程安全問題.
解決方案: 在控制器裏面不能寫可變狀態量,如果需要使用這些可變的量,可以使用ThreadLocal解決,為每個線程單獨生成一個變量,獨立操作,互不影響.

11.Springmvc的優點   

1.可以支持各種視圖技術,而不僅僅局限於JSP.

2.與Spring框架集成(如IoC容器、AOP等)

3.清晰的角色分配:總控制器(dispatcherServlet),請求到處理器映射(handlerMapping),處理器適配器(HandlerAdapter),視圖解析器(ViewResolver).

4.支持各種請求資源的映射策略。

 

其他小白零碎問題整理:

1、SpingMvc中的控制器的註解一般用那個,有沒有別的註解可以替代

一般用@Conntroller註解,表示是表現層,不能用用別的註解代替.

2、@RequestMapping註解用在類上面有什麼作用

用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

3、怎麼樣把某個請求映射到特定的方法上面

直接在方法上面加上註解@RequestMapping,並且在這個註解裏面寫上要攔截的路徑

4、如果在攔截請求中,我想攔截get方式提交的方法,怎麼配置

可以在@RequestMapping註解裏面加上method=RequestMethod.GET

5、如果在攔截請求中,我想攔截提交參數中包含」type=test」字符串,怎麼配置

可以在@RequestMapping註解裏面加上params=」type=test」

6、我想在攔截的方法裏面得到從前台傳入的參數,怎麼得到

直接在形參裏面聲明這個參數就可以,但必須名字和傳過來的參數一樣

7、如果前台有很多個參數傳入,並且這些參數都是一個對象的,那麼怎麼樣快速得到這個對象

直接在方法中聲明這個對象,SpringMvc就自動會把屬性賦值到這個對象裏面

8、怎麼樣在方法裏面得到Request,或者Session

直接在方法的形參中聲明request,SpringMvc就自動把request對象傳入

9、SpringMvc中函數的返回值是什麼.

返回值可以有很多類型,有String, ModelAndView,當一般用String比較好

10、SpringMvc怎麼處理返回值的

SpringMvc根據配置文件中InternalResourceViewResolver的前綴和後綴,用前綴+返回值+後綴組成完整的返回值

11、SpringMVC怎麼樣設定重定向和轉發的

在返回值前面加」forward:」就可以讓結果轉發,譬如」forward:user.do?name=method4」 在返回值前面加」redirect:」就可以讓返回值重定向,譬如」redirect:http://www.baidu.com」

12、 SpringMvc用什麼對象從後台向前台傳遞數據的

通過ModelMap對象,可以在這個對象裏面用put方法,把對象加到裏面,前台就可以通過el表達式拿到

13、SpringMvc中有個類把視圖和數據都合併的一起的,叫什麼

叫ModelAndView

14、怎麼樣把ModelMap裏面的數據放入Session裏面

可以在類上面加上@SessionAttributes註解,裏面包含的字符串就是要放入session裏面的key

15、SpringMvc怎麼和AJAX相互調用的

通過Jackson框架就可以把Java裏面的對象直接轉化成Js可以識別的Json對象 
具體步驟如下 
1.加入Jackson.jar 
2.在配置文件中配置json的映射 
3.在接受Ajax方法裏面可以直接返回Object,List等,但方法前面要加上@ResponseBody註解

16、當一個方法向AJAX返回特殊對象,譬如Object,List等,需要做什麼處理

要加上@ResponseBody註解

17、SpringMvc裏面攔截器是怎麼寫的

有兩種寫法,一種是實現接口,另外一種是繼承適配器類,然後在SpringMvc的配置文件中配置攔截器即可: 

1 <!-- 只針對部分請求攔截 -->
2 <mvc:interceptor>
3    <mvc:mapping path="/modelMap.do" />
4    <bean class="com.et.action.MyHandlerInterceptorAdapter" />
5 </mvc:interceptor>