1.Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架 2.使用了MVC架構模式的思想,將web層進行職責解耦 3.基於請求驅動指的就是使用請求-響應模型 4.框架的目的就是幫助咱們簡化開發, spring Web MVC也是要簡化平常Web開發的html
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
package com.sxt.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; /** * 自定義控制器 * 處理用戶請求的 * @author Administrator * */ public class SpringController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { System.out.println("----執行了-----"); ModelAndView mav=new ModelAndView(); mav.setViewName("/index.jsp"); return mav; } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>SpringMVC-01</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 配置springMVC的前端控制器 中央控制器 --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>關聯SpringMVC的配置文件</description> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- 配置springMVC的映射地址 --> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置指定處理器映射器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 配置指定處理器適配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 註冊自定義的控制器 --> <bean class="com.sxt.controller.SpringController" name="/hello"></bean> </beans>
該方式不是咱們經常使用的選擇,緣由前端
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 開啓掃描 --> <context:component-scan base-package="com.sxt.controller"/> <!-- 開啓SpringMVC註解的方式 --> <mvc:annotation-driven></mvc:annotation-driven> </beans>
/** *基於註解的自定義Controller * @author Administrator * */ @Controller @RequestMapping("/hello") // http://../項目名稱/hello public class SpringController { /** * http://../項目名稱/hello/h1 * @return */ @RequestMapping("/h1") public ModelAndView hello1(){ System.out.println("---Spring1----"); ModelAndView m=new ModelAndView(); m.setViewName("/index.jsp"); return m; } @RequestMapping("/h2") public ModelAndView hello2(){ System.out.println("---Spring2----"); ModelAndView m=new ModelAndView(); m.setViewName("/index.jsp"); return m; } }
RequestMapping請求映射。處理後面帶有所填的路徑java
1.用戶向服務器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲; 2.DispatcherServlet對請求URL進行解析,獲得請求資源標識符(URI)。而後根據該URI,調用HandlerMapping得到該Handler配置的全部相關的對象(包括Handler對象以及Handler對象對應的攔截器),最後以HandlerExecutionChain對象的形式返回; 3.DispatcherServlet 根據得到的Handler,選擇一個合適的HandlerAdapter。(附註:若是成功得到HandlerAdapter後,此時將開始執行攔截器的preHandler(…)方法) 4.提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程當中,根據你的配置,Spring將幫你作一些額外的工做: HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換爲指定的響應信息 數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等 數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等 數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中 5.Handler執行完成後,向DispatcherServlet 返回一個ModelAndView對象; 6.根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ; 7.ViewResolver 結合Model和View,來渲染視圖 8.將渲染結果返回給客戶端。
|組件名稱|說明 | |--|--| | DispatcherServlet:前端控制器 | 用戶請求到達前端控制器以前,他就至關於mvc中的c,DispatcherServlet是整個流程控制的中心,因爲它調用其餘組件處理用戶的請求,DispatcherServlet的存在下降了組件之間的耦合性| |HandlerMapping:處理器映射器|HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不一樣的映射器實現不一樣的映射方式,例如:配置文件方式,實現接口方式,註解方式等| |Handler:處理器|andler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。因爲Handler涉及到具體的用戶業務請求,因此通常狀況須要程序員根據業務需求開發Handler。| |HandlAdapter:處理器適配器|經過HandlerAdapter對處理器進行執行,這是適配器模式的應用,經過擴展適配器能夠對更多類型的處理器進行執行| |View Resolver:視圖解析器|View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果經過頁面展現給用戶。 springmvc框架提供了不少的View視圖類型,包括:jstlView、freemarkerView、pdfView等。通常狀況下須要經過頁面標籤或頁面模版技術將模型數據經過頁面展現給用戶,須要由程序員根據業務需求開發具體的頁面。|程序員