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";
}
}