Spring MVC是一個(gè)Java框架,用于構(gòu)建Web應(yīng)用程序。它遵循Model-View-Controller設(shè)計(jì)模式。它實(shí)現(xiàn)了核心Spring框架的所有基本功能,例如控制反轉(zhuǎn),依賴注入。
Spring MVC通過(guò) DispatcherServlet 提供了一種優(yōu)雅的解決方案,可以在Spring框架中使用MVC。 >。在這里, DispatcherServlet 是一個(gè)類,用于接收傳入的請(qǐng)求并將其映射到正確的資源,例如控制器,模型和視圖。
Model-模型包含應(yīng)用程序的數(shù)據(jù)。數(shù)據(jù)可以是單個(gè)對(duì)象或?qū)ο蟮募稀?/span> Controller-控制器包含應(yīng)用程序的業(yè)務(wù)邏輯。在這里,@ Controller批注用于將類標(biāo)記為控制器。 View-視圖以特定格式表示所提供的信息。通常,JSP + JSTL用于創(chuàng)建視圖頁(yè)面。盡管spring還支持其他視圖技術(shù),例如Apache Velocity,Thymeleaf和FreeMarker。 Front Controller-在Spring Web MVC中,DispatcherServlet類用作前端控制器。它負(fù)責(zé)管理Spring MVC應(yīng)用程序的流程。
如圖所示,所有傳入的請(qǐng)求都被充當(dāng)前端控制器的DispatcherServlet攔截。 DispatcherServlet從XML文件獲取處理程序映射的條目,并將請(qǐng)求轉(zhuǎn)發(fā)給控制器。 控制器返回ModelAndView對(duì)象。 DispatcherServlet檢查XML文件中的視圖解析器條目,并調(diào)用指定的視圖組件。
讓我們看看Spring MVC Framework的一些優(yōu)點(diǎn): -
分離角色-Spring MVC分離每個(gè)角色,其中可以由專門(mén)的對(duì)象來(lái)實(shí)現(xiàn)模型對(duì)象,控制器,命令對(duì)象,視圖解析器,DispatcherServlet,驗(yàn)證器等。 輕量-它使用輕巧的servlet容器來(lái)開(kāi)發(fā)和部署您的應(yīng)用程序。 強(qiáng)大的配置-它為框架和應(yīng)用程序類提供了可靠的配置,其中包括跨上下文的輕松引用,例如從Web控制器到業(yè)務(wù)對(duì)象和驗(yàn)證器。 快速開(kāi)發(fā)-Spring MVC促進(jìn)了快速并行的開(kāi)發(fā)。 可重復(fù)使用的業(yè)務(wù)代碼-無(wú)需創(chuàng)建新對(duì)象,它使我們可以使用現(xiàn)有業(yè)務(wù)對(duì)象。 易于測(cè)試-在Spring中,通常我們創(chuàng)建JavaBeans類,使您可以使用setter方法注入測(cè)試數(shù)據(jù)。 靈活的映射-它提供了可輕松重定向頁(yè)面的特定注釋。
讓我們看一下Spring Web MVC框架的簡(jiǎn)單示例。步驟如下:
在Maven中加載spring jar文件或添加依賴項(xiàng) 創(chuàng)建控制器類 在web.xml文件中提供控制器的條目 在單獨(dú)的XML文件中定義bean 在JSP頁(yè)面中顯示消息 啟動(dòng)服務(wù)器并部署項(xiàng)目
要運(yùn)行此示例,您需要加載:
Spring Core jar文件 Spring Web jar文件 JSP + JSTL jar文件(如果使用其他視圖技術(shù),則加載相應(yīng)的jar文件)。
下載spring的所有jar文件,包括JSP和JSTL 。
如果您使用的是Maven,則無(wú)需添加jar文件?,F(xiàn)在,您需要將maven依賴項(xiàng)添加到pom.xml文件。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.nhooo</groupId> <artifactId>SpringMVC</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringMVC Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency> </dependencies> <build> <finalName>SpringMVC</finalName> </build> </project>
要?jiǎng)?chuàng)建控制器類,我們使用兩個(gè)注釋@Controller和@RequestMapping。
@Controller注釋將該類標(biāo)記為Controller。
@Requestmapping批注用于映射具有指定URL名稱的類。
HelloController.java
package com.nhooo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/") public String display() { return "index"; } }
在此xml文件中,我們指定Servlet類DispatcherServlet充當(dāng)Spring Web MVC中的前端控制器。 html文件的所有傳入請(qǐng)求都將轉(zhuǎn)發(fā)到DispatcherServlet。
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC</display-name> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
這是重要的配置文件,需要在其中指定View組件。
context: component-scan元素定義了DispatcherServlet的基本包。將搜索控制器類。
此xml文件應(yīng)位于WEB-INF目錄內(nèi)。
spring-servlet.xml
<?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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- Provide support for component scanning --> <context:component-scan base-package="com.nhooo" /> <!--Provide support for conversion, formatting and validation --> <mvc:annotation-driven/> </beans>
這是簡(jiǎn)單的JSP頁(yè)面,顯示Controller返回的消息。
index.jsp
<html> <body> <p>Welcome to Spring MVC Tutorial</p> </body> </html>
輸出:
Spring MVC
Spring MVC表單
Spring MVC應(yīng)用程序
Spring MVC驗(yàn)證
Spring MVC Tiles