SpringMVC-原理簡述

SpringMVC的入門案例

配置核心控制器,一個Servlet

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<!-- 配置spring mvc的核心控制器 --> 
<servlet> 
    <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> 
    <!-- 配置初始化參數,用於讀取SpringMVC的配置文件 --> 
    <init-param> <param-name>contextConfigLocation</param-name> 
        <param-value>classpath:SpringMVC.xml</param-value>
    </init-param>
     <!-- 配置servlet的對象的創建時間點:應用加載時創建。 取值只能是非0正整數,表示啓動順序 --> 
     <load-on-startup>1</load-on-startup> 
</servlet>
 <servlet-mapping>
     <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
</servlet-mapping>
</web-app>

 配置SpringMVC的配置文件,SpringMVC.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
<!-- 配置創建spring容器要掃描的包 --> 
<context:component-scan base-package="com.itheima"></context:component-scan> 
<!-- 配置視圖解析器 --> 
<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/"></property>
     <property name="suffix" value=".jsp"></property>
</bean> 
<mvc:annotation-driven></mvc:annotation-driven>
</beans>

 編寫控制器並使用註解配置

@Controller
public class HelloController{
       @RequestMapping("/hello")
       public String hello(){
        System.out.println("輸出hello");
        return "success";
    }

}

 測試一下,返回一個success頁面,跳轉到這個成功頁面

入門案例的執行過程及原理分析

 案例的執行過程

案例的執行過程

1、tomcat啓動後,加載web.xml文件,實例化和初始化Servlet()

2、加載SpringMVC.xml配置文件,創建spring容器,根據配置初始化容器中的對象

3、客戶端發起請求,請求到達前端控制器、

4、前端控制器分給,處理器映射器,找到對應的Controller 和方法

5、返回給前端控制器,前端控制器再發個處理器適配器,把所有的Controller 和方法都適配上,並且執行某個方法,返回ModelAndView給前端控制器

6、前端控制器再請求視圖解析器,返回View。

7、視圖渲染將模型數據填充到response域

SpringMVC的請求響應流程

入門案例中涉及的組件

DispatherServlet:前端控制器,

用戶請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。

HanderMapping:適配器映射器,HandlerMapping負責根據用戶請求找到Handler即處理器,SpringMVC提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,註解方式等。

Handler:處理器,它就是我們開發中要編寫的具體業務控制器。由DispatcherServlet把用戶請求轉發到Handler。由Handler對具體的用戶請求進行處理。

HandlAdapter:處理器適配器,通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。

View Resolver:視圖解析器,View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。

View:視圖,SpringMVC框架提供了很多的View視圖類型的支持,包括:jstlView、freemarkerView、pdfView等。我們最常用的視圖就是jsp。 一般情況下需要通過頁面標籤或頁面模版技術將模型數據通過頁面展示給用戶。

<mvc:annotation-driven>說明,在SpringMVC的各個組件中,處理器映射器、處理器適配器、視圖解析器稱爲SpringMVC的三大組件。 使用<mvc:annotation-driven>自動加載RequestMappingHandlerMapping(處理映射器)和RequestMappingHandlerAdapter(處理適配器),可用在SpringMVC.xml配置文件中使用<mvc:annotation-driven>替代註解處理器和適配器的配置。

RequestMapping註解

源碼: 
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Mapping 
public @interface RequestMapping { }

作用: 用於建立請求URL和處理請求方法之間的對應關係。

value:用於指定請求的URL。它和path屬性的作用是一樣的。

@RequestMapping("/findAccount")

method:用於指定請求的方式。

@RequestMapping(value="/saveAccount",method=RequestMethod.POST)

params:用於指定限制請求參數的條件。它支持簡單的表達式。要求請求參數的key和value必須和配置的一模一樣 

@RequestMapping(value="/removeAccount",params= {"accountName","money>100"})

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章