首頁 >Java >java教程 >SpringMVC工作流程的詳細介紹(附程式碼)

SpringMVC工作流程的詳細介紹(附程式碼)

不言
不言轉載
2018-10-15 15:37:3910593瀏覽

這篇文章帶給大家的內容是關於SpringMVC工作流程的詳細介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

SpringMVC 工作流程:

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  的流程即可。

以上是SpringMVC工作流程的詳細介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除