
引言
SpringMVC是一個(gè)流行的Java Web開(kāi)發(fā)框架,它提供了一種優(yōu)雅的方式來(lái)構(gòu)建靈活、可擴(kuò)展的Web應(yīng)用程序。本文將介紹SpringMVC的基本概念,深入探討其工作流程和核心組件,并提供一個(gè)入門程序來(lái)幫助讀者快速上手。
1. 什么是SpringMVC?
SpringMVC是基于Java的MVC(Model-View-Controller)設(shè)計(jì)模式的Web框架。它通過(guò)將應(yīng)用程序分為模型、視圖和控制器三個(gè)部分,實(shí)現(xiàn)了松耦合和高內(nèi)聚的架構(gòu)。SpringMVC提供了豐富的功能和靈活的配置選項(xiàng),使得開(kāi)發(fā)者能夠快速構(gòu)建可維護(hù)和可擴(kuò)展的Web應(yīng)用程序。
1.1. 模型
模型代表應(yīng)用程序的數(shù)據(jù)和業(yè)務(wù)邏輯。它可以是一個(gè)POJO(Plain Old Java Object)或一個(gè)持久化實(shí)體類。模型負(fù)責(zé)處理數(shù)據(jù)的讀取、存儲(chǔ)和驗(yàn)證,并提供給視圖和控制器使用。
1.2. 視圖
視圖負(fù)責(zé)展示模型的數(shù)據(jù)給用戶。它可以是一個(gè)JSP頁(yè)面、HTML模板或其他類型的視圖技術(shù)。視圖通常是被動(dòng)的,只負(fù)責(zé)展示數(shù)據(jù),不處理業(yè)務(wù)邏輯。
1.3. 控制器
控制器接收用戶的請(qǐng)求并根據(jù)請(qǐng)求的內(nèi)容選擇合適的處理邏輯。它負(fù)責(zé)處理用戶輸入、調(diào)用模型的方法來(lái)處理數(shù)據(jù),并將處理結(jié)果傳遞給視圖進(jìn)行展示。
2. SpringMVC的工作流程
SpringMVC的工作流程可以分為以下幾個(gè)步驟:
2.1. 客戶端發(fā)送請(qǐng)求
- 用戶發(fā)來(lái)一個(gè)請(qǐng)求,首先進(jìn)入的是前端控制器DispatcherServlet
2.2. DispatcherServlet的處理
- 前端控制器(DispacherServlet)將用戶發(fā)來(lái)的請(qǐng)求發(fā)送給處理器映射器(HandlerMapping)
- 處理器映射器根據(jù)前端控制器發(fā)來(lái)的用戶的請(qǐng)求找到對(duì)應(yīng)符合的控制器(Handler),并且將其封裝成處理器執(zhí)行鏈,返回給前端控制器。
2.3. 處理器映射器的使用
- 處理器適配器 (HandlerAdaptoer) 會(huì)調(diào)用對(duì)應(yīng)的具體的 Controller(處理業(yè)務(wù)邏輯)
- 處理器適配器接收到來(lái)自前端控制器的執(zhí)行鏈后,找到對(duì)應(yīng)執(zhí)行此執(zhí)行鏈的處理器適配器(HandlerAdapter)來(lái)調(diào)用的具體的控制器(就是說(shuō)其對(duì)應(yīng)的方法或者邏輯)
2.4. 處理器的執(zhí)行
- 控制器執(zhí)行完成后,會(huì)返回一個(gè)ModelAndView對(duì)象給處理器適配器
- 處理器適配器將返回來(lái)的ModelAndView對(duì)象返回給前端控制器(到這里所有的業(yè)務(wù)處理過(guò)程就要完了,接下就是將結(jié)果以頁(yè)面的的形式響應(yīng)給用戶)
2.5. 視圖解析器的使用
- 前端控制器將返回回來(lái)的ModelAndView對(duì)象交給視圖解析器(ViewResolver),視圖解析器根據(jù)傳過(guò)來(lái)的View對(duì)象解析成對(duì)應(yīng)的頁(yè)面對(duì)象
- ViewResolver 將封裝好的將頁(yè)面對(duì)象和Model對(duì)象返回給 DIspatcherServlet
2.6. 視圖的渲染
- 前端控制器再將返回回來(lái)的對(duì)象交給視圖(View)
- 視圖根據(jù)傳過(guò)來(lái)的Model對(duì)象再一次的對(duì)頁(yè)面進(jìn)行渲染(將模型數(shù)據(jù)填充至視圖中),然后在返回給前端控制器。
- 前端控制器將完成的結(jié)果響應(yīng)給瀏覽器,然后瀏覽器在展現(xiàn)給用戶。
3. SpringMVC的核心組件
SpringMVC的核心組件包括:
- 3.1. 調(diào)度程序服務(wù)版
DispatcherServlet是SpringMVC的前端控制器,負(fù)責(zé)接收和分發(fā)請(qǐng)求。 - 3.2. 處理器映射器(處理程序映射)
處理器映射器負(fù)責(zé)將請(qǐng)求映射到合適的處理器(Controller)。 - 3.3. 處理器適配器(處理程序適配器)
處理器適配器負(fù)責(zé)調(diào)用處理器的方法來(lái)處理請(qǐng)求。 - 3.4. 視圖解析器(View Resolver)
視圖解析器負(fù)責(zé)將邏輯視圖名解析為真正的視圖對(duì)象。 - 3.5. 視圖(視圖)
視圖負(fù)責(zé)展示處理結(jié)果給用戶。
4. 彈簧MVC
下面是一個(gè)簡(jiǎn)單的SpringMVC入門程序的示例:
4.1. 創(chuàng)建Maven項(xiàng)目
首先,我們需要?jiǎng)?chuàng)建一個(gè)Maven項(xiàng)目,并添加SpringMVC的依賴。
pom.xml依賴
<!-- jstl+standard -->
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<!-- spring -->
<spring.version>5.0.2.RELEASE</spring.version>
...
<!-- spring mvc相關(guān)依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency>
4.2. 配置網(wǎng)頁(yè).xml
在web.xml文件中,我們需要配置DispatcherServlet和Spring容器。
4.3. 創(chuàng)建控制器
創(chuàng)建一個(gè)spring-mvc.xml類,并添加一些處理請(qǐng)求的方法。
<?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: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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--1) 掃描com.zking.zf及子子孫孫包下的控制器(掃描范圍過(guò)大,耗時(shí))-->
<context:component-scan base-package="com.yuan"/>
<!--2) 此標(biāo)簽?zāi)J(rèn)注冊(cè)DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
<mvc:annotation-driven />
<!--3) 創(chuàng)建ViewResolver視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- viewClass需要在pom中引入兩個(gè)包:standard.jar and jstl.jar -->
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--4) 單獨(dú)處理圖片、樣式、js等資源 -->
<!-- <mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->
</beans>
demo1Controller.java
package com.yuan.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 葉秋
* @site
* @company 卓京公司
* @create 2023-09-04 17:01
*/
@Controller
@RequestMapping("/main")
public class demo1Controller {
@RequestMapping("/index")
public String demo1(){
System.out.println("hello spring");
return "index";
}
}
4.4. 配置SpringMVC
在Spring的配置文件中,我們需要配置處理器映射器、視圖解析器等。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<!-- Spring和web項(xiàng)目集成start -->
<!-- spring上下文配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param>
<!-- 讀取Spring上下文的監(jiān)聽(tīng)器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring和web項(xiàng)目集成end -->
<!-- 中文亂碼處理 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring MVC servlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--此參數(shù)可以不配置,默認(rèn)值為:/WEB-INF/springmvc-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!--web.xml 3.0的新特性,是否支持異步-->
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4.5. 編寫JSP視圖
創(chuàng)建一個(gè)JSP視圖來(lái)展示處理結(jié)果。
<%--
Created by IntelliJ IDEA.
User: yuanh
Date: 2023/9/4
Time: 17:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
hello word
</body>
</html>
4.6. 運(yùn)行程序
最后,我們可以運(yùn)行程序并在瀏覽器中訪問(wèn)相應(yīng)的URL來(lái)查看結(jié)果。
總結(jié)
本文深入探討了SpringMVC的工作原理和核心組件,并提供了一個(gè)入門程序來(lái)幫助讀者快速上手。通過(guò)理解SpringMVC的工作流程和組件的作用,開(kāi)發(fā)者可以更好地使用該框架來(lái)構(gòu)建高效、可靠的Web應(yīng)用程序。希望本文對(duì)您有所幫助,謝謝閱讀!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-694741.html
補(bǔ)充:訪問(wèn)資源繞過(guò)解析器不被攔截代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-694741.html
<!--4) 單獨(dú)處理圖片、樣式、js等資源 -->
<!-- <mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->
<mvc:resources location="/static/" mapping="/static/**"/>
到了這里,關(guān)于“深入探究SpringMVC的工作原理與入門實(shí)踐“的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!