一文帶你入門SpringMVC的配置與使用
1.概述
Spring MVC是Spring Framework的一部分,是基于Java實現(xiàn)MVC的輕量級Web框架。
Spring MVC的特點:
- 輕量級,簡單易學
- 高效 , 基于請求響應(yīng)的MVC框架
- 與Spring兼容性好,無縫結(jié)合
- 約定優(yōu)于配置
- 功能強大:RESTful、數(shù)據(jù)驗證、格式化、本地化、主題等
- 簡潔靈活
Spring的web框架圍繞DispatcherServlet [ 調(diào)度Servlet ] 設(shè)計。
DispatcherServlet的作用是將請求分發(fā)到不同的處理器。
2.中心控制器
Spring MVC框架像許多其他MVC框架一樣, 以請求為驅(qū)動 , 圍繞一個中心Servlet分派請求及提供其他功能,DispatcherServlet是一個實際的Servlet (它繼承自HttpServlet 基類)

SpringMVC的原理如下圖所示:
當發(fā)起請求時被前置的控制器攔截到請求,根據(jù)請求參數(shù)生成代理請求,找到請求對應(yīng)的實際控制器,控制器處理請求,創(chuàng)建數(shù)據(jù)模型,訪問數(shù)據(jù)庫,將模型響應(yīng)給中心控制器,控制器使用模型與視圖渲染視圖結(jié)果,將結(jié)果返回給中心控制器,再將結(jié)果返回給請求者。

DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。用戶發(fā)出請求,DispatcherServlet接收請求并攔截請求。
我們假設(shè)請求的url為 : http://localhost:8080/SpringMVC/hello
SpringMVC部署在服務(wù)器上的web站點,hello表示控制器
通過分析,如上url表示為:請求位于服務(wù)器localhost:8080上的SpringMVC站點的hello控制器。

- HandlerMapping為處理器映射。DispatcherServlet調(diào)用HandlerMapping,HandlerMapping根據(jù)請求url查找Handler。
- HandlerExecution表示具體的Handler,其主要作用是根據(jù)url查找控制器,如上url被查找控制器為:hello。
- HandlerExecution將解析后的信息傳遞給DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示處理器適配器,其按照特定的規(guī)則去執(zhí)行Handler。
- Handler讓具體的Controller執(zhí)行。
- Controller將具體的執(zhí)行信息返回給HandlerAdapter,如ModelAndView。
- HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。
- DispatcherServlet調(diào)用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。
- 視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。
- DispatcherServlet根據(jù)視圖解析器解析的視圖結(jié)果,調(diào)用具體的視圖。
- 最終視圖呈現(xiàn)給用戶。
3.搭建SpringMVC
新建一個Moudle,添加web支持
更新pom依賴
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringMVC</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9.1</version>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
配置web.xml
注冊DispatcherServlet
<?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_4_0.xsd"
version="4.0">
<!-- 注冊DispatcherServlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通過初始化參數(shù)指定SpringMVC配置文件的位置,進行關(guān)聯(lián) -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 啟動順序,數(shù)字越小,啟動越早 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 設(shè)定所有請求都會被SpringMVC攔截 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置springmvc-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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自動掃描包,讓指定包下的注解生效,由IOC容器統(tǒng)一管理 -->
<context:component-scan base-package="top.imustctf.controller"/>
<!-- 讓Spring MVC不處理靜態(tài)資源 -->
<mvc:default-servlet-handler />
<!--
支持mvc注解驅(qū)動
在spring中一般采用@RequestMapping注解來完成映射關(guān)系
要想使@RequestMapping注解生效
必須向上下文中注冊DefaultAnnotationHandlerMapping
和一個AnnotationMethodHandlerAdapter實例
這兩個實例分別在類級別和方法級別處理。
而annotation-driven配置幫助我們自動完成上述兩個實例的注入。
-->
<mvc:annotation-driven />
<!-- 視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后綴 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
在resource目錄下添加springmvc-servlet.xml配置文件,配置的形式與Spring容器配置基本類似
創(chuàng)建Controller
@Controller
@RequestMapping("/HelloController")
public class HelloController {
// 真實訪問地址 : 項目名/HelloController/hello
@RequestMapping("/hello")
public String sayHello(Model model){
// 向模型中添加屬性msg與值,可以在JSP頁面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
// web-inf/jsp/hello.jsp
// 因為在SpringMVC配置文件中添加了前綴和后綴
return "hello";
}
}
創(chuàng)建視圖層
在WEB-INF/jsp目錄中創(chuàng)建hello.jsp , 視圖可以直接取出并展示從Controller帶回的信息;
可以通過EL表示取出Model中存放的值,或者對象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SpringMVC</title>
</head>
<body>
${msg}
</body>
</html>
啟動Tomcat,測試
訪問路徑:
http://localhost:8080/HelloController/hello

環(huán)境配置成功了
以上就是一文帶你入門SpringMVC的配置與使用的詳細內(nèi)容,更多關(guān)于SpringMVC入門的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
說說字符串轉(zhuǎn) OffSetDateTime 你真的會用嗎
這篇文章主要介紹了字符串轉(zhuǎn) OffSetDateTime 你真的會用嗎?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
springboot利用AOP完成日志統(tǒng)計的詳細步驟
項目用到了過濾器,可能有的人會不理解,之所以用過濾器是因為想要在日志記錄post請求的json數(shù)據(jù)。本文重點給大家介紹springboot利用AOP完成日志統(tǒng)計的詳細步驟,感興趣的朋友跟隨小編一起看看吧2021-12-12
IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼
這篇文章主要介紹了IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Spring Boot開發(fā)Web應(yīng)用詳解
這篇文章主要介紹了Spring Boot開發(fā)Web應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
用Rational Rose逆向工程(java)生成類圖(教程和錯誤解決)
Rational Rose有個很方便的功能,將項目中的JAVA代碼自動轉(zhuǎn)換成UML類圖2013-02-02

