Spring框架 - Web框架 Web框架概述

#Web框架概述html

##Servlet Servlet返回用戶響應,JSP的形式,HTML代碼,能夠製做網頁展現信息代碼。web

輸入圖片說明

##Web頁面 定義serlvet的路徑,好比定義servletA,在web.xml添加serlvet的名稱跟地址的映射若是有servletB,則添加B。若是接口少,則不是問題,若是接口不少 咱們在web的一些例如REST的服務,REST接口並非單純的靜態地址,是動態參數而變化的,/user/{userId},前面是user,後面是userId,根據user的不一樣而不一樣。動態的映射地址,若是經過Servlet只能經過/user/*定義到某個servlet,而後本身編寫代碼進行匹配userId。若是咱們的接口是以這種資源路徑的方式,須要框架管理映射spring

  • 須要一個框架來處理路由

##MVC模式 MVC核心爲了解決數據與視圖分離,數據進行修改不須要修改視圖,視圖進行修改不須要修改數據,而由控制器進行處理。 輸入圖片說明mvc

若是咱們經過Serlvet製做網頁,不可避免的經過Serlvet嵌入大量Html代碼。這樣咱們把html耦合到了Java代碼當中。
JSP相反的是Java代碼嵌入到了HTML頁面中
輸入圖片說明 若是咱們要把視圖與Java代碼解耦app

  • 須要一個框架來處理MVC

##Web MVC框架框架

輸入圖片說明

  • Handler Mapping
    請求過來的請求路徑到最終處理邏輯之間的映射關係
  • Controller
    負責視圖與模型之間的關係,在xxx下返回視圖,以及使用什麼樣的數據模型。
  • View Resolver
    解決在什麼狀況下展現什麼視圖,好比在請求JSON數據時,返回JSON數據。在請求XML數據時,返回XML數據。若是是返回普通網頁,則返回Html頁面
  • View
    不一樣的展現方式,頁面、JSON、XML等等。

##DispatcherSerlvet使用 首先咱們須要在web.xml裏面,去定義DispatcherServlet,而後定義這個servlet-name。
在下面的部分,咱們須要serlvet-mappingurl

<!-- SpringMVC的Servlet添加,Web項目載入Spring配置從這裏開始 -->
    <servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!-- 這裏咱們配置spring的配置文件位置 -->
            <param-value>/WEB-INF/appconfig/mvc/spring/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

這裏是Spring提供的Serlvet,而不是咱們本身編寫的。咱們經過serlvet-name定義一個dispatcherSerlvet,若是沒有填寫配置路徑,則默認爲WEB-INF/[servlet-name]-servlet.xmlspa

##[servlet-name]-servlet.xmlcode

  • HandlerMapping
    路徑到實際業務的映射,新版本的Spring不須要定義HandlerMapping,把SpringMVC開啓默認就定義好Mapping,請求自動返回handlerxml

  • Controllers
    能夠經過Annotation定義Controller,經過Spring自動發現Controller

  • View解析相關
    若是不定義會默認有一些解析功能,通常狀況下咱們都會配置View解析,來根據咱們不一樣的須要返回不一樣的視圖。返回的數據相同,可是返回的結果多是網頁,也多是pdf。

##WebApplicationContext 不須要定義,會根據配置自動生成,WebApplicationContext並非惟一的,能夠定義多個Serlvet匹配不一樣的規則。咱們並不須要指定全部的配置路徑的映射。能夠定義不少個DispathcerServlet,咱們的DAO等通用內容。

輸入圖片說明

##ContextLoaderListener Spring定義了ContextLoaderListener,這種方式定義通用的context
首先咱們在web.xml定義listener,而後咱們須要去指定Spring的配置文件,可能會指定多個appliactionContext*.xml。咱們這種方式WebApplicationContext叫作Root WebApplicationContext.

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

咱們經過DispatcherServlet當中定義的WebApplicationContext是局部的配置,好比說controller、view等。可是咱們經過ContextLoaderListener定義的,則是全局的,是Root WebApplicationContext。
通常Spring去查找Bean,是經過WebApplicationContext,若是在本DispatcherSerlvet中沒有找到,則去Root WebApplicationContext中尋找。
極端的作法把全部的Bean都定義Root WebApplicationContext。可是很不方便。通常標準作法是,對應的Servlet,對應相關的Controller和View。在公共的Root WebApplicationContext定義公共的Service、Repositories。

輸入圖片說明

相關文章
相關標籤/搜索