3.SpringMVC中非註解方式下的映射器和適配器總結

昨天已經帶領大家走進了SpringMVC的世界了,今天老師主要跟大家分享一下如何使用非註解的方式來定義映射器和適配器。

1. 處理器適配器

昨天使用的處理器適配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter。即:
在這裏插入圖片描述
SimpleControllerHandlerAdapter適配器能執行實現了Controller接口的Handler,所以我們所寫的Handler需要實現Controller接口。

除了這個適配器外,還有另一個適配器,叫org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter。即可以配置:
在這裏插入圖片描述
HttpRequestHandlerAdapter適配器能執行實現了HttpRequestHandler接口的Handler,所以我們所寫的Handler需要實現HttpRequestHandler接口,這跟實現Controller接口稍微有點不同,比如我們寫一個Handler。

public class ItemsController1 implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

        //實際中是調用service查找數據庫,查詢商品列表,這裏直接使用靜態數據來模擬了
        List<Items> itemsList = new ArrayList<Items>();
        //向list中填充靜態數據
        Items items_1 = new Items();
        items_1.setName("聯想筆記本");
        items_1.setPrice(6000f);
        items_1.setDetail("ThinkPad T430 聯想筆記本電腦!");

        Items items_2 = new Items();
        items_2.setName("蘋果手機");
        items_2.setPrice(5000f);
        items_2.setDetail("iPhone6蘋果手機!");

        itemsList.add(items_1);
        itemsList.add(items_2);

        //設置模型數據
        request.setAttribute("itemaList", itemsList);

        //設置轉發的視圖
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
    }
}

前面獲取數據都是一模一樣的,後面轉到視圖部分和實現Controller接口是不同的,實現HttpRequestHandler接口的話,最後這裏處理和原來的servlet是一樣的,往request域中存入數據,然後跳轉到新的jsp視圖頁面。不過這種方式還可以修改response,設置響應的數據格式等。

不管是用那個適配器,一個相同點就是:每個Handler中只能有一個方法,因爲要繼承Controller或者HttpRequestHandler,就要重寫相對應的那個方法,在那個方法中處理邏輯。也就是說一個Handler中不能有兩個方法或兩個以上的來處理不同的邏輯,這是弊端,但是也有它的好處,限定了程序員的編程,比較規範。

這兩個適配器可以同時使用,我測試了一下,不會衝突,我配了兩個適配器,寫了兩個Handler,分別去實現Controller和HttpRequestHandler接口,都可以被執行。

2. 處理器映射器

前面使用的映射器是:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping。即:
在這裏插入圖片描述
這個映射器根據名字也可以看得出,是根據bean的name作爲url進行查找,所以配置Handler的bean的時候,要配置一下name屬性,設置爲要請求的url即可正確映射。

還有一種處理器映射器叫簡單映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping。它的映射方式是直接根據url來的,如下:
在這裏插入圖片描述
這種可以直接配url,然後對應的url指定一個Handler,使用的是該Handler對應bean的id,所以只要在bean中配好id,然後將url和這個id對應上即可。

經測試,這兩個映射器也可以一起使用,互不衝突,匹配到哪個就用哪個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章