前幾篇博客已經陸陸續續的聊了一些Spring的東西,今天博客我們就來聊一下SpringMVC。SpringMVC目前在JavaEE開發中可謂占據一席之地,用起來也是比較順手的。低耦合,高內聚,利用一些注解以及Java配置類就能很好的實現解耦。今天我們就來看一下如何使用Maven來配置SpringMVC, 然后在我們的Web工程中進行使用。
本篇博客是上一篇博客的續寫,在上篇博客中我們詳細的講了Java環境的配置,Java EE版本的Eclipse的安裝、Maven的安裝與配置,Tomcat的安裝與配置。並且為我們的Eclipse安裝了M2Eclipse以及STS插件。並且創建運行了一個Maven管理的Web App。本篇博客就是基於上篇博客所創建的Web App工程來實現的,關於上篇博客的詳細內容,請移步於《JavaEE開發基於Eclipse的環境搭建以及Maven Web App的創建》。
一、引入SpringMVC前的准備
上篇博客我們以及創建了Maven管理的Web App了,下方的內容就是我們SpringMVC的東西了。我們創建的工程中,還少一個目錄。在SpringMVC中還有一個src/test/resources目錄,而我們剛才創建的工程中是沒有的,所以我們得創建該目錄,首先右鍵單擊Java Resources -> New -> Source Folder。具體如下所示:
然后選擇我們的工程以及輸入我們的Folder name即可,具體如下所示。
添加完該目錄后,我們需要編輯一下上面創建的目錄的Output folder。我們可以先看一下src/test/java目錄的Output folder, 是taget/test-classes。 我們新添加的src/test/resouces也需要設置成target/test-classes。我們需要選中該條目然后進行編輯即可,如下所示。
編輯的時候選擇test-classes即可,然后點擊OK完成設置,具體如下所示:
二、通過Maven配置SpringMVC
上面的准備工作已就緒,接下來我們就該來使用Maven來配置我們的SpringMVC了。本部分我們會在pom.xml中添加SpringMVC以及其依賴的庫,然后就是通過Java配置的形式來引入我們的SpringMVC相關的東西,最后給出一個簡單的使用實例。
1.在pom.xml中配置依賴庫
關於Maven的pom.xml的配置在此就不做過多贅述了,Maven官網(http://maven.apache.org/)上有詳細的實例。其中的POM Reference 給出了具體的Pom配置解決方案,特別全。那不會查哪兒,所以本篇博客關於pom.xml的配置就不做過多贅述了,更詳盡的內容請移步與官網。
Maven所支持的第三方庫可以在http://mvnrepository.com/中查到,你可以在搜索欄中搜索你想要的庫,並且獲取相應的版本。如下所示:
首先在pom.xml中添加一些屬性,這些屬性會在配置依賴庫時使用到,大部分是一些依賴庫的版本。這些屬性的作用類似於宏定義的東西,便於我們后期版本變更。下方就是我們本篇博客所涉及工程的所有屬性,如下所示:
然后添加單元測試的依賴也spring-webmvc的依賴,具體如下所示。下方在配置spring-webmvc是用到了上面我們定義的spring-version。
然后添加jstl模板庫、servlet以及jsp依賴庫,如下所示。當然不同的庫對應這不同的版本屬性值,如下所示:
然后添加SLF4J和LogBack來輸出日志,如下所示:
最后就是添加我們的Maven插件了,該插件的版本就是我們之前安裝的M2Eclipse插件的版本,如下所示:
下方是我們本篇博客所涉及工程的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.zeluli</groupId> <artifactId>SpringMVCWithMaven</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringMVCWithMaven Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- Generic properties --> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- web --> <jsp.version>2.2</jsp.version> <jstl.version>1.2</jstl.version> <servlet.version>3.1.0</servlet.version> <!-- Spring --> <spring.version>4.3.6.RELEASE</spring.version> <!-- Logging --> <logback.version>1.2.1</logback.version> <slf4j.version>1.7.21</slf4j.version> </properties> <dependencies> <!--單元測試的依賴 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Web依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp.version}</version> <scope>provided</scope> </dependency> <!-- 添加對象向json或xml轉換的支持 --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.8.6</version> </dependency> <!-- 添加json數據綁定支持 --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency> <!-- 使用SLF4J和LogBack作為日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>${logback.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-complier-plugin</artifactId> <version>3.3.9</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> <finalName>SpringMVCWithMaven</finalName> </build> </project>
配置完畢后,我們會在目錄中看到我們工程中所依賴的包,如下所示:
2.配置我們的SpringMVC
首先在src/main/java目錄中創建一個包,用來存放SpringMVC相關的東西。然后在包中創建一個Java類,我們將該類命名為SpringMVCConfig。然后使用Spring的@Configuration注解將其聲明為配置類,然后使用@EnableWebMvc開啟WebMvc。然后在Java配置文件中配置InternalResourceViewResolver類的Bean。此處簡單的說就是我們配置了一個JSP的View Resolver。如下所示。
該類中相應的代碼如下:
package com.zeluli.springmvc; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @Configuration @EnableWebMvc @ComponentScan("com.zeluli.springmvc") public class SpringMVCConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/classes/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } }
3、Web初始化
配置完我們的Spring后,我們還需要創建一個Web初始化的一個類。也就是WebInitalier。下方就是該類的創建過程,我們在創建該類是,需要實現springframework中的WebApplicationInitializer接口,如下所示:
在該類中所做的事情也是比較簡單的,賦值加載Spring配置的上下文,然后與ServletContext進行關聯。然后創建SpringMVC的DispatcherServlet。
上述類的完整代碼如下:
package com.zeluli.springmvc; import javax.servlet.ServletRegistration.Dynamic; import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; public class WebInitializer implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(SpringMVCConfig.class); context.setServletContext(servletContext); Dynamic servlet = (Dynamic) servletContext.addServlet("dispatcher", new DispatcherServlet(context)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); } }
4.創建Controller
在配置完畢后,接下來就開始創建我們的Controller了。在springmvc包下面創建一個web包,然后創建一個Controller類。此處我們聲明為FirstController,如下所示。然后使用@Controller注解告訴Spring框架這是一個Controller類。
在這個Controller類中,有一個success()賦值映射,當用戶訪問/index路由時會映射到index.jsp頁面上。如下所示。
5.創建index.jsp
最后就是創建我們的jsp頁面了。我們的jsp頁面是放在src/main/resources目錄下的,在其中創建一個views來容納前端頁面,我們在其中創建一個index.jsp頁面。當然在創建該頁面時,需要將webapp下面的index.jps頁面刪除掉,然后在index.jsp頁面中添加一些div和和樣式。
6.運行
經過上面的所有步驟,接下來就是我們最終熱淚盈眶勝利的時刻了。選擇我們的Tomcat服務器進行項目的運行,如果你看到下方的頁面,說明你之前的配置是正確的,SpringMVC的引入和配置暫時告一段落了。下方就是這個期盼已久的頁面。
關於日志的配置在此就不做過多贅述了,本篇博客所涉及的Demo依然會在github上進行分享。
github-Demo源碼分享地址:https://github.com/lizelu/SpringMVCWithMaven