1. 程式人生 > >springmvc(4)--註解的處理器對映器和介面卡

springmvc(4)--註解的處理器對映器和介面卡

1.我們在springmvc.xml中配置的介面卡和對映器,如果不配置,那麼將會載入預設的對映器和介面卡。

這裡寫圖片描述
如圖
但是上面兩種註解方式的介面卡和對映器,是已經過時的,是spring2.5的。

ps:

在spring3.1之前使用的註解對映器是:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
在spring3.1之後使用的註解對映器是:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

在spring3.1之前使用的註解介面卡是:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
在spring3.1之後使用的註解介面卡是:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

在springmvc.xml中我們配置一下

<!--註解對映器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"
/>
<!--註解介面卡 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

而且可以使用mvc的直接驅動代替上面的controller的bean註冊,而且提供了很多引數繫結方法。

<!-- 使用 mvc:annotation-driven代替上邊註解對映器和註解介面卡配置
    mvc:annotation-driven預設載入很多的引數繫結方法,
    比如json轉換解析器就預設載入了,如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
    實際開發時使用mvc:annotation-driven
     -->
<!-- <mvc:annotation-driven></mvc:annotation-driven> -->

2.開發handler
開發註解的handler必須使用註解的介面卡和對映器,不能使用非註解的

package com.ddd.ssm.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.ddd.ssm.pojo.Items;

/**
 * 使用註解開發handler
 * 
 * @author Dan
 *
 */

// 標識它是一個控制器
@Controller
public class ItemsController3 implements HttpRequestHandler {
    // 查詢商品列表
    //@RequestMapping("/queryItems")實現了對queryItems()方法和url進行對映,一個方法對應一個url
    //一般方法和url一樣便於維護
    @RequestMapping("/queryItems33")
    public ModelAndView queryItems() {
        // 呼叫service查詢資料庫,查詢商品列表,這裡使用靜態資料模擬
        List<Items> itemsList = new ArrayList<>();
        // 填充靜態資料
        Items items_1 = new Items();
        items_1.setName("皮鞋");
        items_1.setPrice(698f);
        items_1.setDetail("稻草人皮鞋!");

        Items items_2 = new Items();
        items_2.setName("水杯");
        items_2.setPrice(5000f);
        items_2.setDetail("特百惠水杯!");

        itemsList.add(items_1);
        itemsList.add(items_2);
        // 返回modelAndView
        ModelAndView modelAndView = new ModelAndView();
        // 相當於request.setAttribute(..,..),就是在jsp頁面中通過itemsList取資料
        modelAndView.addObject("itemsList", itemsList);
        // 指定檢視
        modelAndView.setViewName("/items/itemsList");
        return modelAndView;

    }

}

3.配置handler

使用元件掃描的方式

<!-- 對於註解的Handler可以單個配置實際開發中建議使用元件掃描 -->
<!-- <bean class="com.ddd.ssm.controller.ItemsController3"/> -->
<!-- 可以掃描controller、service、...這裡讓掃描controller,指定controller的包 -->
<context:component-scan base-package="com.ddd.ssm.controller">
</context:component-scan>

4.測試
這裡寫圖片描述
測試成功!

5.原始碼分析
通過前端控制器原始碼分析springmvc的執行過程:
第一步:執行這個方法:
這裡寫圖片描述
第二步:找到handler

這裡寫圖片描述

第三步:執行handler,得到執行的結果modelAndView
這裡寫圖片描述
第四步:呼叫檢視解析器,進行檢視渲染,將modelAndView填充

得到view:

這裡寫圖片描述

填充資料model到request域

這裡寫圖片描述

渲染:

這裡寫圖片描述

6.小結
使用註解的對映器不用在xml中配置url和handler的對映關係
使用註解的對映器和註解的介面卡配對使用,也就是說不能使用非註解的對映器和註解的介面卡使用。