1. 程式人生 > >SpringMVC總結-SpringMVC的執行流程以及簡單運用

SpringMVC總結-SpringMVC的執行流程以及簡單運用

SpringMVC的入口是DispatcherServlet,可以在web.xml配置DispatcherServlet 的攔截URL的表示式。下面對SpringMVC的執行流程做具體的說明

一、執行流程

1.客戶端在發起請求時,會先去檢查請求是不是符合DispatcherServlet的url-pattern

    a:若不符合則檢查是否配置mvc:default-servlet-handler,若配置則,訪問目標資源,不存在丟擲no mapping found for HTTP request URL(配置:mvc:default-servlet-handler可以訪問靜態檔案,也可以藉助<mvc:resources />標籤)

   b:若存在。則執行下一步(也就是2)

2、由HandlerMapping獲取HandlerExecutionChain物件

3、獲取HandlerAdapter對,呼叫攔截器PreHandle方法

4、呼叫目標Handler的目標方法等到ModelAndView

5、呼叫攔截器的postHandle方法,檢視是否存在異常,若存在有HandlerExceptionResolver元件處理異常,生成新的ModelAndView,在進行下一步,若不存在,進行下一步

6、有viewResolver元件根據ModelAndView物件得到實際的View

7.渲染檢視

8.呼叫攔截器的afterCompletion方法

二、使用步驟(HelloWorld)

1.需要的jar
      commons-logging-1.1.1.jar
      spring-aop-4.0.4.RELEASE.jar
      spring-beans-4.0.4.RELEASE.jar
      spring-context-4.0.4.RELEASE.jar
      spring-core-4.0.4.RELEASE.jar
      spring-expression-4.0.4.RELEASE.jar
      spring-web-4.0.4.RELEASE.jar
      spring-webmvc-4.0.4.RELEASE.jar

2.在web.xml配置檔案中配置 DispatcherServlet

<servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!-- 配置 DispatcherServlet 的一個初始化引數:配置SpringMVC 配置檔案的位置和名稱 -->
     <!-- 
                                    實際也可以不通過contextConfigLocation 來配置SpringMVC 的配置檔案, 而使用預設的 
          預設的配置檔案為:/WEB-INF/<servlet-name>-servlet.xml 
     -->
        <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
     </servlet-mapping>

這邊url-pattern設定是攔截所有請求,url-pattern可以根據自己的的專案需求自定義,多個請求配置多個url-pattern

3.在src下編寫SpringMVC 的配置檔案

   <!-- 掃描包 -->
   <context:component-scan base-package="zhuojing.springmvc" >
   </context:component-scan>

<!-- 配置檢視解析器:如何把handle 方法返回解析實際的物理檢視 -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/view/"></property>
      <property name="suffix" value=".jsp"></property>
   </bean>

4.Action

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorld {

	/**
	 * 1. 使用@RequestMapping 註解來對映請求的URL
	 * 2. 返回值會通過檢視解析器為實際的物理檢視,對於InternalResourceViewResolver 檢視解析器會做如下的解析
	 *   通過 :prefix + returnVal + 字尾(suffix) 這樣的方式得到實際的物理檢視,然後做轉發
	 * @return
	 */
	@RequestMapping("/HelloWorld")
	public String helloWorld(){
		System.out.println("Hello World");
		return "success";
	}
}