一文帶你入門SpringMVC的配置與使用
1.概述
Spring MVC是Spring Framework的一部分,是基于Java實(shí)現(xiàn)MVC的輕量級(jí)Web框架。
Spring MVC的特點(diǎn):
- 輕量級(jí),簡(jiǎn)單易學(xué)
- 高效 , 基于請(qǐng)求響應(yīng)的MVC框架
- 與Spring兼容性好,無(wú)縫結(jié)合
- 約定優(yōu)于配置
- 功能強(qiáng)大:RESTful、數(shù)據(jù)驗(yàn)證、格式化、本地化、主題等
- 簡(jiǎn)潔靈活
Spring的web框架圍繞DispatcherServlet
[ 調(diào)度Servlet ] 設(shè)計(jì)。
DispatcherServlet
的作用是將請(qǐng)求分發(fā)到不同的處理器。
2.中心控制器
Spring MVC框架像許多其他MVC框架一樣, 以請(qǐng)求為驅(qū)動(dòng) , 圍繞一個(gè)中心Servlet分派請(qǐng)求及提供其他功能,DispatcherServlet
是一個(gè)實(shí)際的Servlet (它繼承自HttpServlet 基類)
SpringMVC的原理如下圖所示:
當(dāng)發(fā)起請(qǐng)求時(shí)被前置的控制器攔截到請(qǐng)求,根據(jù)請(qǐng)求參數(shù)生成代理請(qǐng)求,找到請(qǐng)求對(duì)應(yīng)的實(shí)際控制器,控制器處理請(qǐng)求,創(chuàng)建數(shù)據(jù)模型,訪問(wèn)數(shù)據(jù)庫(kù),將模型響應(yīng)給中心控制器,控制器使用模型與視圖渲染視圖結(jié)果,將結(jié)果返回給中心控制器,再將結(jié)果返回給請(qǐng)求者。
DispatcherServlet
表示前置控制器,是整個(gè)SpringMVC的控制中心。用戶發(fā)出請(qǐng)求,DispatcherServlet
接收請(qǐng)求并攔截請(qǐng)求。
我們假設(shè)請(qǐng)求的url為 : http://localhost:8080/SpringMVC/hello
SpringMVC部署在服務(wù)器上的web站點(diǎn),hello表示控制器
通過(guò)分析,如上url表示為:請(qǐng)求位于服務(wù)器localhost:8080上的SpringMVC站點(diǎn)的hello控制器。
- HandlerMapping為處理器映射。DispatcherServlet調(diào)用HandlerMapping,HandlerMapping根據(jù)請(qǐng)求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)來(lái)解析HandlerAdapter傳遞的邏輯視圖名。
- 視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。
- DispatcherServlet根據(jù)視圖解析器解析的視圖結(jié)果,調(diào)用具體的視圖。
- 最終視圖呈現(xiàn)給用戶。
3.搭建SpringMVC
新建一個(gè)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
注冊(cè)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"> <!-- 注冊(cè)DispatcherServlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 通過(guò)初始化參數(shù)指定SpringMVC配置文件的位置,進(jìn)行關(guān)聯(lián) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!-- 啟動(dòng)順序,數(shù)字越小,啟動(dòng)越早 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 設(shè)定所有請(qǐng)求都會(huì)被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"> <!-- 自動(dòng)掃描包,讓指定包下的注解生效,由IOC容器統(tǒng)一管理 --> <context:component-scan base-package="top.imustctf.controller"/> <!-- 讓Spring MVC不處理靜態(tài)資源 --> <mvc:default-servlet-handler /> <!-- 支持mvc注解驅(qū)動(dòng) 在spring中一般采用@RequestMapping注解來(lái)完成映射關(guān)系 要想使@RequestMapping注解生效 必須向上下文中注冊(cè)DefaultAnnotationHandlerMapping 和一個(gè)AnnotationMethodHandlerAdapter實(shí)例 這兩個(gè)實(shí)例分別在類級(jí)別和方法級(jí)別處理。 而annotation-driven配置幫助我們自動(dòng)完成上述兩個(gè)實(shí)例的注入。 --> <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 { // 真實(shí)訪問(wèn)地址 : 項(xiàng)目名/HelloController/hello @RequestMapping("/hello") public String sayHello(Model model){ // 向模型中添加屬性msg與值,可以在JSP頁(yè)面中取出并渲染 model.addAttribute("msg","hello,SpringMVC"); // web-inf/jsp/hello.jsp // 因?yàn)樵赟pringMVC配置文件中添加了前綴和后綴 return "hello"; } }
創(chuàng)建視圖層
在WEB-INF/jsp
目錄中創(chuàng)建hello.jsp , 視圖可以直接取出并展示從Controller帶回的信息;
可以通過(guò)EL表示取出Model中存放的值,或者對(duì)象;
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>SpringMVC</title> </head> <body> ${msg} </body> </html>
啟動(dòng)Tomcat,測(cè)試
訪問(wèn)路徑:
http://localhost:8080/HelloController/hello
環(huán)境配置成功了
以上就是一文帶你入門SpringMVC的配置與使用的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC入門的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java書(shū)店系統(tǒng)畢業(yè)設(shè)計(jì) 總體設(shè)計(jì)(1)
這篇文章主要介紹了java書(shū)店系統(tǒng)畢業(yè)設(shè)計(jì),第一步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10淺談Spring Data如何簡(jiǎn)化數(shù)據(jù)操作的方法
這篇文章主要介紹了看Spring Data如何簡(jiǎn)化數(shù)據(jù)操作的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04SpringBoot+Mybatis使用Enum枚舉類型總是報(bào)錯(cuò)No enum constant&n
這篇文章主要介紹了SpringBoot+Mybatis使用Enum枚舉類型總是報(bào)錯(cuò)No enum constant XX問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12spring boot+redis 監(jiān)聽(tīng)過(guò)期Key的操作方法
這篇文章主要介紹了spring boot+redis 監(jiān)聽(tīng)過(guò)期Key,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)對(duì)視頻進(jìn)行截圖的方法【附ffmpeg下載】
這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)視頻進(jìn)行截圖的方法,結(jié)合實(shí)例形式分析了Java使用ffmpeg針對(duì)視頻進(jìn)行截圖的相關(guān)操作技巧,并附帶ffmpeg.exe文件供讀者下載使用,需要的朋友可以參考下2018-01-01springboot植入pagerHelper的超詳細(xì)教程
這篇文章主要介紹了springboot植入pagerHelper的超詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01