java元婴期(28)----java进阶(springmvc(2)---入门程序(下)基于注解开发(重点掌握))
入門程序
非注解的處理器映射器和適配器
1.非注解的處理器映射器
處理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
另一個映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
多個映射器可以并存,前端控制器判斷url能讓哪些映射器映射,就讓正確的映射器處理。
2.非注解的處理器適配器
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求編寫的Handler實現 Controller接口。
????? //使用此方法可以通過修改response,設置響應的數據格式,比如響應json數據
/*
????? response.setCharacterEncoding("utf-8");
????? response.setContentType("application/json;charset=utf-8");
????? response.getWriter().write("json串");*/(若是有疑問請回顧json篇)
?
DispatcherSerlvet.properties
前端控制器從上邊的文件中加載處理映射器、適配器、視圖解析器等組件,如果不在springmvc.xml中配置,使用默認加載的。
注解的處理器映射器和適配器(重點掌握,非注解部分主要了解原理)
在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注解適配器。
(務必配對使用)
配置注解映射器和適配器。
<!-- 使用 mvc:annotation-driven代替上邊注解映射器和注解適配器配置mvc:annotation-driven默認加載很多的參數綁定方法,比如json轉換解析器就默認加載了,如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerMapping和RequestMappingHandlerAdapter實際開發時使用mvc:annotation-driven--><!-- <mvc:annotation-driven></mvc:annotation-driven> -->開發注解Handler
使用注解的映射器和注解的適配器。(注解的映射器和注解的適配器必須配對使用)
此處的注解,在springmvc的配置文件中會有對應的注解掃描
//使用Controller標識 它是一個控制器 @Controller public class ItemsController3 {//商品查詢列表//@RequestMapping實現 對queryItems方法和url進行映射,一個方法對應一個url//一般建議將url和方法寫成一樣@RequestMapping("/queryItems")public ModelAndView queryItems()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);//返回ModelAndViewModelAndView modelAndView = new ModelAndView();//相當 于request的setAttribut,在jsp頁面中通過itemsList取數據modelAndView.addObject("itemsList", itemsList);//指定視圖modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");return modelAndView;}在spring容器中加載Handler
<!-- 對于注解的Handler可以單個配置實際開發中建議使用組件掃描--><!-- <bean class="cn.itcast.ssm.controller.ItemsController3" /> --><!-- 可以掃描controller、service、...這里讓掃描controller,指定controller的包--><context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>部署調試
訪問:http://localhost:8080/springmvcfirst1208/queryItems.action
源碼分析(重點)
通過前端控制器源碼分析springmvc的執行過程。
第一步:前端控制器接收請求
調用doDiapatch
第二步:前端控制器調用處理器映射器查找 Handler
第三步:調用處理器適配器執行Handler,得到執行結果ModelAndView
第四步:視圖渲染,將model數據填充到request域。
視圖解析,得到view:
調用view的渲染方法,將model數據填充到request域
渲染方法:
入門程序小結
前端控制器配置:
第一種:*.action,訪問以.action結尾 由DispatcherServlet進行解析
第二種:/,所以訪問的地址都由DispatcherServlet進行解析,對于靜態文件的解析需要配置不讓DispatcherServlet進行解析
? 使用此種方式可以實現 RESTful風格的url
處理器映射器:
非注解處理器映射器(了解)
注解的處理器映射器(掌握)
???????? 對標記@Controller類中標識有@RequestMapping的方法進行映射。在@RequestMapping里邊定義映射的url。使用注解的映射器不用在xml中配置url和Handler的映射關系。
處理器適配器:
非注解處理器適配器(了解)
注解的處理器適配器(掌握)
???????? 注解處理器適配器和注解的處理器映射器是配對使用。理解為不能使用非注解映射器進行映射。
<mvc:annotation-driven></mvc:annotation-driven>可以代替下邊的配置:
<!--注解映射器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/><!--注解適配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>實際開發使用:mvc:annotation-driven
視圖解析器配置前綴和后綴:
程序中不用指定前綴和后綴:
小結-springmvc代碼執行流程(基于注解)
???????此圖一定要結合springmvc的架構圖來理解
?
總結
以上是生活随笔為你收集整理的java元婴期(28)----java进阶(springmvc(2)---入门程序(下)基于注解开发(重点掌握))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java元婴期(27)----java进
- 下一篇: java元婴期(29)----java进