1.組件掃描器
使用組件掃描器省去在spring容器配置每個Controller類的繁瑣。
使用<context:component-scan>自動掃描標記@Controller的控制器類,
在springmvc.xml配置文件中配置如下:
<!-- 配置controller掃描包,多個包之間用,分隔 --> <context:component-scan base-package="cn.itcast.springmvc.controller" />
1.2 注解映射器和適配器
1.2.1. 配置處理器映射器
注解式處理器映射器,對類中標記了@ResquestMapping的方法進行映射。根據@ResquestMapping定義的url 匹配@ResquestMapping標記的方法,匹配成功返回HandlerMethod對象給前端控制器。
HandlerMethod對象中封裝url對應的方法Method。
從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成注解式處理器映射。
在springmvc.xml配置文件中配置如下:
<!-- 配置處理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
注解描述:
@RequestMapping:定義請求url到處理器功能方法的映射
1.2.3. 配置處理器適配器
注解式處理器適配器,對標記@ResquestMapping的方法進行適配。
從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成注解式處理器適配。
在springmvc.xml配置文件中配置如下:
<!-- 配置處理器適配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
1.2.4. 注解驅動
直接配置處理器映射器和處理器適配器比較麻煩,可以使用注解驅動來加載。
SpringMVC使用<mvc:annotation-driven>自動加載RequestMappingHandlerMapping和RequestMappingHandlerAdapter
可以在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解處理器和適配器的配置。
<!-- 注解驅動 --> <mvc:annotation-driven />
1.3. 視圖解析器(其實可以不用手動配,但若要配前后綴,就需要先手動配一下視圖解析器)
視圖解析器使用SpringMVC框架默認的InternalResourceViewResolver,這個視圖解析器支持JSP視圖解析
在springmvc.xml配置文件中配置如下:
<!-- Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" --> <!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置邏輯視圖的前綴 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 配置邏輯視圖的后綴 --> <property name="suffix" value=".jsp" /> </bean>
邏輯視圖名需要在controller中返回ModelAndView指定,比如邏輯視圖名為ItemList,則最終返回的jsp視圖地址:
“WEB-INF/jsp/itemList.jsp”
最終jsp物理地址:前綴+邏輯視圖名+后綴
1.3.1. 修改ItemController
修改ItemController中設置視圖的代碼
// @RequestMapping:里面放的是請求的url,和用戶請求的url進行匹配 // action可以寫也可以不寫 @RequestMapping("/itemList.action") public ModelAndView queryItemList() { // 創建頁面需要顯示的商品數據 List<Item> list = new ArrayList<>(); list.add(new Item(1, "?????", 2399, new Date(), "????")); list.add(new Item(2, "!!!!!!!!", 2399, new Date(), "!!!!!!")); // 創建ModelAndView,用來存放數據和視圖 ModelAndView modelAndView = new ModelAndView(); // 設置數據到模型中 modelAndView.addObject("itemList", list); // 設置視圖jsp,需要設置視圖的物理地址 // modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp"); // 配置好視圖解析器前綴和后綴,這里只需要設置邏輯視圖就可以了。 // 視圖解析器根據前綴+邏輯視圖名+后綴拼接出來物理路徑 modelAndView.setViewName("itemList"); return modelAndView; }