#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
##Web MVC框架框架
##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.xml
spa
##[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。