Spring MVC溫故而知新系列教程之從零開始
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的幾個(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)目
工程默認(rèn)目錄結(jié)構(gòu):
添加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包:
在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配置
在java源代碼更目錄下添加applicationContext.xml文件
具體內(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
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é)果:
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Spring MVC 框架搭建配置方法及詳解
- SpringMVC文件上傳 多文件上傳實(shí)例
- SpringMVC+MyBatis聲明式事務(wù)管理
- Spring MVC中上傳文件實(shí)例
- SpringMVC之簡(jiǎn)單的增刪改查示例(SSM整合)
- SpringMVC返回json數(shù)據(jù)的三種方式
- springMVC幾種頁(yè)面跳轉(zhuǎn)方式小結(jié)
- SpringMVC 攔截器不攔截靜態(tài)資源的三種處理方式方法
- SpringMVC環(huán)境下實(shí)現(xiàn)的Ajax異步請(qǐng)求JSON格式數(shù)據(jù)
- Spring MVC注解式開發(fā)使用詳解
相關(guān)文章
Spring中@EnableScheduling注解的工作原理詳解
這篇文章主要介紹了Spring中@EnableScheduling注解的工作原理詳解,@EnableScheduling是 Spring Framework 提供的一個(gè)注解,用于啟用Spring的定時(shí)任務(wù)(Scheduling)功能,需要的朋友可以參考下2024-01-01一篇文章教你如何用多種迭代寫法實(shí)現(xiàn)二叉樹遍歷
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)二叉樹遍歷的迭代算法,包括二叉樹的中序遍歷、先序遍歷及后序遍歷等,是非常經(jīng)典的算法,需要的朋友可以參考下2021-08-08Java class文件格式總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java class文件格式總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-06-06Echarts+SpringMvc顯示后臺(tái)實(shí)時(shí)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Echarts+SpringMvc顯示后臺(tái)實(shí)時(shí)數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12編碼實(shí)現(xiàn)從無(wú)序鏈表中移除重復(fù)項(xiàng)(C和JAVA實(shí)例)
如果不能使用臨時(shí)緩存,你怎么實(shí)現(xiàn)無(wú)序鏈表中移除重復(fù)項(xiàng)(?C和JAVA實(shí)例無(wú)序鏈表中移除重復(fù)項(xiàng)。2013-10-10Java從JDK源碼角度對(duì)Object進(jìn)行實(shí)例分析
這篇文章主要介紹了Java從JDK源碼角度對(duì)Object進(jìn)行實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12