溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring MVC請(qǐng)求流程的示例分析

發(fā)布時(shí)間:2021-09-14 09:32:52 來(lái)源:億速云 閱讀:112 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)Spring MVC請(qǐng)求流程的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

Spring MVC簡(jiǎn)介

Spring MVC是一款基于MVC架構(gòu)模式的輕量級(jí)Web框架,目的是將Web開發(fā)模塊化,對(duì)整體架構(gòu)進(jìn)行解耦。

Spring MVC有一下優(yōu)點(diǎn):

作為Spring框架的一部分,擁有Spring的優(yōu)點(diǎn)(IOC,AOP等)

支持靈活的URL到頁(yè)面控制器的映射

提供靈活的數(shù)據(jù)驗(yàn)證、格式化、數(shù)據(jù)綁定機(jī)制

支持RESTful風(fēng)格

Spring MVC請(qǐng)求流程

Spring MVC框架的整體請(qǐng)求流程如下:

Spring MVC請(qǐng)求流程的示例分析

上圖中涉及到Spring MVC的幾個(gè)功能組件:

前端控制器(DispatcherServlet):接收用戶請(qǐng)求并返回請(qǐng)求結(jié)果。它的作用相當(dāng)于一個(gè)轉(zhuǎn)發(fā)器或中央處理器,控制整個(gè)執(zhí)行流程,對(duì)各組件進(jìn)行調(diào)度降低組件之間的耦合。

處理器映射器(HandlerMapping):根據(jù)用戶請(qǐng)求的URL,通過(guò)注解或者XML配置,查找相應(yīng)的處理器Handler

處理器適配(HandlerAdapter):根據(jù)映射器查找出的Handler,完成調(diào)用處理器中的方法

處理器(Handler):請(qǐng)求處理的具體邏輯,返回?cái)?shù)據(jù)和視圖信息

視圖解析器(View Resolver):解析具體視圖,通過(guò)ModelAndView對(duì)象中的View信息,將邏輯視圖名解析成真正的視圖View

請(qǐng)求流程具體步驟詳解:

1:用戶發(fā)起請(qǐng)求,請(qǐng)求會(huì)被前端控制器(DispatcherServlet)攔截

2:前端控制器(DispatcherServlet)請(qǐng)求處理器映射器(HandlerMapping)查找Handler

3:處理器映射器(HandlerMapping)根據(jù)配置找到相應(yīng)Handler(可以更具注解或者XML配置),可能包含多個(gè)Interceptor攔截器,返回給前端控制器

4:前端控制器(DispatcherServlet)請(qǐng)求處理器適配器(HandlerAdapter)去執(zhí)行相應(yīng)的Handler

5:適配器交由對(duì)應(yīng)Handler處理器執(zhí)行

6: Handler處理器執(zhí)行完成后返回ModelAndView對(duì)象給處理器適配器

7:處理器適配器接受Handler處理器的返回結(jié)果,并將該結(jié)果返回給前端控制器(DispatcherServlet)

8:前端控制器(DispatcherServlet)接收處理器適配器返回的數(shù)據(jù)和視圖信息,請(qǐng)求視圖解析器,解析對(duì)應(yīng)的視圖

9:視圖解析器根據(jù)View信息匹配的相應(yīng)的視圖結(jié)果,反回給前端控制器

10:前端控制器接收具體視圖,進(jìn)行視圖渲染,將Model數(shù)據(jù)填充到View視圖中,生成最終視圖

11:前端控制器向用戶返回結(jié)果

從零開始搭建demo

創(chuàng)建工程:

Eclipse下新建一個(gè)動(dòng)態(tài)Web項(xiàng)目

Spring MVC請(qǐng)求流程的示例分析

工程默認(rèn)目錄結(jié)構(gòu):

Spring MVC請(qǐng)求流程的示例分析

添加jar包依賴

WebContent > WEB-INF > lib 文件夾下導(dǎo)入相應(yīng)的jar包,其中核心的jar包是spring-webmvc-5.0.0.RELEASE.jar,其他是幾個(gè)主要是spring用于管理上下文和beande 包、jstl標(biāo)簽庫(kù)和一個(gè)用于打印日志的log包:

Spring MVC請(qǐng)求流程的示例分析

在web.xml中配置前端控制器

前端控制器相當(dāng)于Spring MVC的專有servlet,用于攔截所有符合條件的請(qǐng)求,交由框架做后續(xù)處理

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
 id="WebApp_ID" 
 version="3.1">
 
 <!-- 配置前端控制器-DispatchServlet -->
 <servlet>
 <servlet-name>springMvcNext</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <!-- contextConfigLocation不是必須的, 如果不配置contextConfigLocation, springmvc的配置文件默認(rèn)在:WEB-INF/servlet的name+"-servlet.xml" -->
 <init-param>
  <param-name>contextConfigLocation</param-name>
 <param-value>classpath:applicationContext.xml</param-value>
 </init-param>
 </servlet>
 
 <servlet-mapping>
 <servlet-name>springMvcNext</servlet-name>
 <url-pattern>/</url-pattern> <!--根據(jù)url-pattern設(shè)定的規(guī)則攔截用戶發(fā)來(lái)的請(qǐng)求 此處攔截所有請(qǐng)求,包括靜態(tài)資源 ->
 </servlet-mapping> 
</web-app>

其中<servlet-mapping>標(biāo)簽中定義url匹配規(guī)則為符合*.action的形式,對(duì)應(yīng)的servlet名為springMvcNext,而<servlet>配置的控制器為org.springframework.web.servlet.DispatchServlet,該控制器為當(dāng)前SpringMVC項(xiàng)目的前端控制器,<init-param>標(biāo)簽為當(dāng)前控制器依賴的參數(shù),兩個(gè)參數(shù)分別代表上下文參數(shù)和參數(shù)加載路徑。

關(guān)于classpath:代表web項(xiàng)目編譯后編譯后的輸出路徑

Spring MVC請(qǐng)求流程的示例分析

Spring MVC請(qǐng)求流程的示例分析

配置spring MVC配置

在java源代碼更目錄下添加applicationContext.xml文件

Spring MVC請(qǐng)求流程的示例分析

具體內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 <!-- 包掃描器 標(biāo)簽將用于激活Spring MVC注釋掃描功能,允許使用@Controller和@RequestMapping等注釋。-->
 <context:component-scan base-package="com.sl.controller" />
 
 <!-- 注解驅(qū)動(dòng) -->
 <mvc:annotation-driven />
 
 <!-- 配置視圖解析器 -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/view/" />
 <property name="suffix" value=".jsp" />
 </bean>
</beans>

添加控制器Controller與視圖View

Spring MVC請(qǐng)求流程的示例分析

Src目錄下添加包c(diǎn)om.sl.controller,添加控制器代碼如下:

package com.sl.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {
 
 @RequestMapping("/index") //處理URL路徑中以/index開頭的所有請(qǐng)求: 包括 /index/* 和 /index.html
 public ModelAndView helloWorld() {

  String message = "Hello Spring MVC";
  return new ModelAndView("index", "message", message);
 }
}

在WEB-INF/view中添加視圖文件index.jsp

<html>
<head>
 <title>Spring MVC </title>
</head>
<body>
 ${message}
</body>
</html>

運(yùn)行結(jié)果:

Spring MVC請(qǐng)求流程的示例分析

感謝各位的閱讀!關(guān)于“Spring MVC請(qǐng)求流程的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI