淺談對SpringMVC的認識


SpringMVC概念:
    他是一個輕量級的開源框架,應用於表現層,基於MVC的設計模式.
SpringMVC的特點:
    1.他是單例的可以設置成多例.
    2.他的線程是安全的 
    3.他是基於方法級別的攔截
    4.接受請求參數的方式是參數綁定
    5.攜帶參數到頁面是通過request域對象.
SpringMVC流程(重點)
    1.用戶向服務器發送一個請求,被SpringMVC的前端控制器DispatchServlet 捕獲.
    2.DispatcherServlet接收到請求后調用HandlerMapping處理器映射器.
    3.處理器映射器找到具體的處理器(xml配置或者注解,RequesrtMapper),生成處理器對象及處理器攔截器一並返回給DispatcherServlet
    4.DispatcherServlet調用HandlerAdapter處理器適配器
    5.HandlerAdapter經過適配器調用具體的處理器(Controller)
    6.Controller執行完成后返回ModelAndView
    7.HandlerAdapter將Controller執行結果ModelAndView返回給DispatcherServlet
    8.DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
    9.ViewReslover解析后返回具體的View
    10.DispatcherServlet根據View進行渲染視圖
    11.DispatcherServlet將渲染完的視圖界面最后響應給用戶.
SpringMVC中的幾個組件說明
    DispatcherServlet:前端控制器,控制整個流程,他是SpringMVC的入口
    HandlerMapper:處理器映射器
    HandlerAdapter:處理器適配器
    ViewResolver:視圖解析器,可以解析JSP,freemarker,pdf等
SpringMVC的三大件:(面試可能會問)
   HandlerMapper\HandlerAdapter\ViewResolver
MVC設計模式概念
    M-Model(模型,完成業務邏輯:主要有JavaBean構成,service+dao+entity)
    V-View(視圖層,主要是做頁面的展示,jsp,html...)
    C-Controller(控制器,主要是接受請求之后調用模型層(M)根據結果返回頁面)
SpringMVC常用注解
    1.@Controller:標記在類上,他會表明這個類是一個SpringMVC Controller對象.處理器將會掃描該注解的類的方法,並檢測該方法是否使用了@RequestMapping注解.@Controller只是定義類控制器類,真正處理請求的注解是@RequestMapping.
    大多數框架使用的時候都是整合因此在一個類上標記@Controller還不能真正意義上說他是SpringMVC的控制器,這個時候Spring不認識這個注解,需要把控制器類交給Spring來管理,一下又兩種方式:
    1.直接寫這個類的全路徑
    <bean class="com.xxx.xxx.當前類"/>
    2. 路徑寫到當前Controller注解類的上一層
    <context:component-scan base-package = "com.xxx"/>注意當前配置@Controller這個類就不要寫上去了
    Controller不會依賴HttpServletRequest和HttpServletResponse等HttpServlet對象,他是可以直接通過Controller的方法參數獲取到的.小Demo
@Controller
public class SaveController() {
    @RequestMapping("/save")
    public String save() {
        System.out.println("保存save");
        return "success";
    }
}
    2.@RequestMapping
        RequestMapping是用來處理請求url的注解
        RequestMapping中的六個屬性:
        2.1--value:請求的實際地址
        2.2--method:請求的類型.GET,POST,PUT,DELETE等
       @RequestMapping(value="",method="RequestMethod.GET")
       2.3--consumes:指定請求的提交內容的類型(Content-Type),例如text/html
        2.4--produces:指定返回的內容類型
        2.5--params:指定request中必須包含某些參數值,才讓該方法進行處理
        2.6--headers: 指定request中必須包含某些指定的header值,才讓該方法處理請求
        3.@ResponseBody
            該注解用於將Controller的方法返回對象通過HtpMessageConverter轉換成指定個時候寫到Response對象的body數據中,
            使用場景:當返回的數據不是html標簽,而是其他的數據格式比如json,xml等使用.
        4.@PathVariable
            用於將請求url中的模版變量映射到功能處理方法的參數上,取出url模版中的變量作為參數
        5.@RequestParam
            用於將請求參數區數據映射到功能處理方法的參數上.
        6.@CookieValue
            參數:  value 參數名
            required:是否必須
            defaultValue:默認值
        7.@Resource和@Autowired
            他們都是做bean注入時候使用,@Resource不是Spring的注解他的寶石javax.annotation.Resource需要導包,但是Spring支持該注解的注入
    共同點:兩者都可以卸載字段和setter方法上,如果都寫在字段上就不需要在寫setter方法
    不同點:
        @Autowired是Spring提供的注解需要導報,按照byType注入,默認情況下他要求依賴對象必須存在,如果允許為null值,設置他的required屬性為false.
        @Resource默認按照byName自動注入,他有兩個重要的屬性,name和type,Spring將該注解的name屬性解析為bean的名字,type屬性解析為bean的類型,如果想要使用name屬性,需要使用byName的自動注入,使用type屬性需要使用byType自動注入策略.如果什么屬性都不制定,她會通過反射使用byName自動注入策略.
還有其他注解,在這就不一一舉例,本人比較懶散.希望文章對你有所幫助.水平有限,不能深入的研究,只能把表象的一些知識和本人的理解和大家分享,如有錯誤請及時指正,本人感激不盡.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM