這篇文章帶給大家的內容是關於SpringMVC工作流程的詳細介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
SpringMVC 工作流程:
#詳細圖:
#SpringMVC工作流程描述
1.使用者向伺服器發送請求時,請求被Spring 前端控制器DispatcherServlet獲取,如詳細圖第一步
2.DispatcherServlet對請求URL進行解析(例如我們發送一個url如下的請求
http: //localhost:8080/SpringMVC/hello.action),就會得到請求資源標示符(URI,相當於上面的hello.action )。然後根據URI,呼叫處理器映射器(HandlerMapping)獲得該Handler配置的所有相關物件(包括Handler物件以及Handler物件對應的攔截器),最後以HandlerExecutionChain物件的形式傳回。
3.DispatcherServlet取得上面傳回的Handler,並選擇一個適合的HandlerAdapter。 (附註:如果成功獲得HandlerAdapter後,此時將開始執行攔截器的preHandler(...)方法)
4.選擇好合適的HandlerAdapter後就會開始執行Handler。在填充Handler的入參過程中,根據配置,Spring將幫你做一些額外的工作(我們不需要管):
EG:
HttpMessageConveter: 將請求訊息(如Json 、xml等資料)轉換成一個對象,將對象轉換為指定的回應資訊
資料轉換:對請求訊息進行資料轉換。如String轉換成Integer、Double等
資料根式化:對請求訊息進行資料格式化。如將字串轉換成格式化數字或格式化日期等
資料驗證: 驗證資料的有效性(長度、格式等),驗證結果儲存到BindingResult或Error中
5 . Handler執行完成後,向DispatcherServlet 返回一個ModelAndView物件(包含視圖名稱或視圖名稱和模型)
6.根據傳回的ModelAndView對象,選擇一個合適的ViewResolver返會給DispatcherServlet ;
7.ViewResolver結合,Model和View來渲染視圖
8.最後將視圖渲染結果回傳給客戶端
元件名詞解釋:
1. DispatcherServlet:前端控制器
等同於先前的Controller, 是整個流程的中心,負責呼叫其他元件
2.HandlerMapping: 處理器映射器
#負責根據請求找到Handler(處理器),springMVC中可以根據不同的映射器實現不同映射,例如xml配置方式,註解方式,接口方式等
#3.Handler:後端控制器
在前端控制器的控制下對具體的使用者請求進行處理,所以一般情況下都需要開發者進行根據需求進行開發。
4.HandlerAdapter:處理器適配器
#處理Handler,可以對多種類型的處理器進行執行,這是對適配器模式的應用體現。
5.ViewResolver : 視圖解析器
#負責將處理結果產生view視圖、開發者可以根據需要開發view
入門程式(詳細步驟): 在了解springMVC的工作流程後,下面我們根據流程步驟,來實現我們的入門程序,步驟如下:
#1.導入我們的spring架包(一般去官網下載即可4.2版本用的比較多)
2.在web.xml設定前端控制器
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <!-- 让servlet随服务启动 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
這裡說一下我們的攔截方式:
1. 攔截固定後綴名的URL : 如*.action, *.do
2. 攔截所有:設定為/,但是此方法會導致靜態檔案(css,js.jpg )被攔截下來不能正常顯示,所以該方式需要特殊處理
注意:不能設定攔截所有為/* 該方式是錯誤的,因為請求action時,當action跳到jsp時會再次被攔截,出現異常:根據jsp路徑找不到映射位址
3.設定springmvc##的設定檔
<servlet> <init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/springmvc.xml</param-value> </init-param> </servlet>
4.開發處理器
public class Hello implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { List list = new ArrayList<>(); list.add("one"); list.add("two"); ModelAndView mv = new ModelAndView(); mv.addObject("list",list); return mv; } }
5.在springmvc.xml中配置、
<!-- 配置适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 处理器映射器 --> <!-- 根据bean的 name 查找Handler , 将action的URL 配置在bean的name中--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 配置处理器 --> <bean name="/hello.action" class="com.mt.controller.Hello"></bean> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
6.视图开发 ,jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> asdfadfadfa ${list } </body> </html>
测试结果: 开启服务器后, 发送 http://localhost:8080/SpringMVC/hello.action的请求
页面显示:
对应理解springMVC 的流程即可。
以上是SpringMVC工作流程的詳細介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!