javascript
Spring MVC教程
1.簡介
作為企業Java開發人員,這項工作的主要重點之一是開發Web應用程序。 對于Web應用程序,后果還包括許多挑戰。 具體來說,其中一些是狀態管理,工作流和驗證。 HTTP協議的無狀態性質只會使事情變得更加復雜。 Spring的Web框架旨在幫助我們應對這些挑戰。 基于模型-視圖-控制器(MVC)模式,即使在解決了HTTP協議和其他所有挑戰之后,Spring MVC仍可以幫助我們構建松散耦合和靈活的應用程序。
在本課程中,我們將從理解每個Spring MVC組件的目的以及它們在Spring應用程序的整個生命周期中處理請求和響應對象中所扮演的角色開始。 之后,我們將開始配置一個簡單的Spring MVC應用程序,在每個步驟中添加一個組件,編寫一個非常簡單的Thymeleaf模板,最后為我們編寫的Controller提供一個JUnit測試用例。 讓我們開始吧!
2.請求的生命
請求對象的壽命
網上用戶單擊HTML頁面上的鏈接后,請求對象的工作就會開始。 當一個請求對象離開瀏覽器并進入一個Spring MVC應用程序,該應用程序最終轉換為響應對象時,它會停下來為MVC組件提供一些信息并加載一些新信息。 上圖顯示了將請求對象轉換為響應對象之前的所有停止操作。
讓我們了解一個請求對象在Spring MVC應用程序中需要執行的所有步驟:
聽起來所有工作都是由請求對象完成的,而用戶僅看到響應對象。 確實如此!
3.項目設置
我們將使用許多Maven原型之一為我們的示例創建一個示例項目。 要創建項目,請在將用作工作空間的目錄中執行以下命令:
建立專案
mvn archetype:generate -DgroupId=com.javacodegeeks.example -DartifactId=JCG-SpringMVC-example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false如果您是第一次運行maven,則完成生成命令將花費幾秒鐘,因為maven必須下載所有必需的插件和工件才能完成生成任務。
用Maven創建項目
創建項目后,請隨時在您喜歡的IDE中打開它。 下一步是向項目添加適當的Maven依賴關系。
這是帶有適當依賴項的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.javacodegeeks.example</groupId><artifactId>JCG-SpringMVC-example</artifactId><version>1.0-SNAPSHOT</version><name>JCG-SpringMVC-example</name><packaging>war</packaging><description>Spring MVC Hello World Example</description><dependencies><!--Spring MVC Dependencies--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.9.RELEASE</version></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.0.0</version><configuration><warSourceDirectory>WebContent</warSourceDirectory></configuration></plugin></plugins><!-- added to remove Version from WAR file --><finalName>${project.artifactId}</finalName></build> </project>最后,要了解添加此依賴項時添加到項目中的所有JAR,我們可以運行一個簡單的Maven命令,當我們向其添加一些依賴項時,該命令使我們能夠查看項目的完整依賴關系樹。 這是我們可以使用的命令:
依賴樹
mvn dependency:tree當我們運行此命令時,它將向我們顯示以下依賴關系樹:
Spring MVC項目依賴樹
4.配置DispatcherServlet
正如我們在上一節中所述,一切都始于DispatcherServlet 。 因此,這將是我們要添加到項目中的第一個組件。 請注意,我們將在Java類中配置DispatcherServlet ,而不是web.xml文件:
AppInitializer.java
package com.javacodegeeks.example.config;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class AppInitializer extendsAbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[] { RootConfig.class };}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[] { WebConfig.class };}@Overrideprotected String[] getServletMappings() {return new String[] { "/" };} }這里首先要注意的是,任何擴展AbstractAnnotationConfigDispatcherServletInitializer類都將用于配置DispatcherServlet和應用程序上下文。
方法getServletMappings()標識DispatcherServlet映射到的路徑。 在此,我們提供了/ ,它將是應用程序的默認servlet。 當DispatcherServlet啟動時,它將創建Spring應用程序上下文,并開始使用由getServletConfigClasses()方法定義的WebConfig類中聲明的bean加載該上下文。 最后,由getRootConfigClasses()方法返回的類用于加載ContextLoaderlistener創建的上下文。
讓我們現在定義WebConfig和RootConfig類,看看它們的功能是什么。
5.啟用Web MVC
啟用S??pring MVC組件的經典方法之一是將XML文件與 元素。 但是在本課程中,我們將展示僅使用Java類提供所有配置的最新方法。 讓我們通過定義我們的WebConfig類來啟用Spring MVC Components:
WebConfig.java
package com.javacodegeeks.example.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver;@Configuration @EnableWebMvc @ComponentScan("com.javacodegeeks.example") public class WebConfig extends WebMvcConfigurerAdapter {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/views/");viewResolver.setSuffix(".jsp");viewResolver.setExposeContextBeansAsAttributes(true);return viewResolver;}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();} }在此配置類中發生了很多事情。 讓我們了解所有這些事情:
- 我們做的第一件事是使用@ComponentScan注釋@ComponentScan 。 這告訴Spring掃描哪個軟件包來查找我們定義的Spring Bean和組件。 它將解析上述包中的所有子包。
- 我們還在類上定義一個ViewResolver bean,并將其配置為在相對于應用程序的類路徑的指定位置中查找JSP頁面。
- 最后,該類擴展了WebMvcConfigurerAdapter并重寫了configureDefaultServletHandling方法,并在configurer對象上調用enable() ,該對象告訴DispatcherServlet將對靜態資源的請求轉發給ViewResolver而不自己處理。
6.定義根配置
對于ContextLoaderlistener的應用程序上下文bean,我們將不定義任何bean。 在RootConfig類中,我們甚至可以為非Web組件定義Bean。 讓我們看一下示例代碼:
RootConfig.java
package com.javacodegeeks.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration @ComponentScan(basePackages = {"com.javacodegeeks.example"},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)}) public class RootConfig { }我們唯一要做的就是用@ComponentScan注釋@ComponentScan 。 這告訴Spring掃描哪個軟件包以查找項目中可能存在的非Web組件。
7.編寫一個簡單的控制器
當我們定義一個允許最終用戶與我們創建的應用程序進行交互的組件時,事情開始變得有趣起來。 控制器是以URL形式提供映射的組件,用戶可以與之交互以獲得一些響應。 在此示例中,我們將創建一個GET請求映射,該映射僅返回視圖的邏輯視圖名稱,然后由我們創建的已配置視圖解析器將其解析為JSP。 讓我們看一下我們創建的樣本控制器:
HomeController.java
package com.javacodegeeks.example.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;@Controller public class HomeController {@RequestMapping(value = "/", method = RequestMethod.GET)public String home() {return "home";} }我們在這里定義了一個GET映射,它僅返回邏輯視圖名稱,即home 。 這將解析為路徑/WebContent/WEB-INF/views/home.jsp 。
8.設計視圖
對于JSP視圖,我們將設計一個非常簡單的JSP頁面,該頁面將僅提供示例設計。 我們從應用程序根目錄并在/WebContent/WEB-INF/views/home.jsp路徑上創建了此文件。 這是文件:
home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html><head><title>JavaCodeGeeks: Spring MVC</title></head><body><h1>Welcome Spring MVC</h1><p>Hello JavaCodeGeeks!</p></body> </html>要查看我們所做的事情,我們接下來將運行我們的應用程序。 請注意,這只是一個基本的JSP頁面,沒有其他內容介紹ViewResolver如何將邏輯視圖名稱解析為具體視圖, DispatcherServlet作為響應返回該視圖。
9.運行應用程序
是時候運行我們的應用程序了。 我們使用IntelliJ IDE來運行項目。 要運行項目,首先將Tomcat配置為接受爆炸的WAR工件:
帶有爆炸WAR的Tomcat配置
最后,當我們運行應用程序時,我們可以從創建的JSP視圖中看到輸出:
運行Spring MVC應用程序
10.帶有Spring Boot的Spring MVC
Spring Boot是一個出色的平臺,它建立在Spring MVC框架之上,使事情變得更快,更容易。 通過使用與我們添加到項目中的依賴項相關的許多默認設置和配置來創建這種輕松性。 Spring Boot提供的另一個優勢是,它允許我們定義父依賴關系,通過該依賴關系可以在整個項目中維護版本兼容性。 讓我們詳細了解一下。
10.1 Spring Boot入門
Spring Boot提供了非常方便的啟動程序依賴項 ,它使我們能夠選擇功能并將與之相關的依賴項添加到我們的項目中。 一旦完成,Spring Boot本身將管理所有相關的依賴項并將它們以正確的版本號帶入我們的項目,并保證這些依賴項將彼此兼容。 父依賴項定義為:
入門依賴
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version> </parent>當您在此處提供version并在pom.xml文件的“ dependencies部分中使用相同的groupId ,將自動導入版本。
10.2凝視Spring Boot應用程序
每個Spring Boot應用程序都以舊的main()方法的形式提供了一個入口點。 我們可以像正常的main方法一樣運行此方法,該方法主要負責初始化Spring Bean和啟動應用程序。 Spring Boot主類的最常見形式如下所示:
Spring Boot主類
@SpringBootApplication public class JCGApplication {public static void main(String[] args) {SpringApplication.run(JCGApplication.class, args);} }使用@SpringBootApplication的單個注釋,我們啟用了以下注釋:
- @Configuration :此注釋將該類標記為Configuration類,并由Spring Container首先初始化
- @EnableAutoConfiguration :此注釋表示每個標記有@Component注釋的@Component都將作為Spring Bean加載。
- @ComponentScan :最后,此批注將自動啟用組件掃描。 默認情況下,當我們不提供任何包值時,此批注將選擇此類所在的包,并從那里開始尋找Spring組件。
在這里看看使用Spring Boot使其他事情變得多么容易。
11.結論
在本課程中,我們了解了當請求對象離開Web瀏覽器時會發生什么以及如何將其轉換為響應對象。 這篇文章還解釋了DispatcherServlet在處理來自客戶端的請求時所起的重要作用。 我們還制作了一個簡單的Spring MVC應用程序,以查看視圖名稱也如何解析為具體的視圖實現。
重要的是要理解,即使Spring Boot已將Spring演變為一個更簡單的工作區,它仍然依賴Spring MVC提供默認設置和bean。
12.下載源代碼
這是簡單的Spring MVC應用程序的示例。
下載您可以在此處下載此示例的完整源代碼: JCG-SpringMVC-example
翻譯自: https://www.javacodegeeks.com/2018/04/spring-mvc-tutorial-2.html
總結
以上是生活随笔為你收集整理的Spring MVC教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器 dns(dns服务器linux)
- 下一篇: 被ddos了(ddos后的cpu)