使用Maven搭建SpringMVC
一、Maven 简介
1、何为 Maven
- Maven 指的是 Apache Maven,是一个软件项目管理工具,基于对象模型(Project Object Model,POM)的概念,Maven 可用来管理项目的依赖、编译、文档等信息。
2、下载和安装 Maven
- 下载 Maven 直接到 Maven 官网即可,Maven 官网,点击链接即可访问官网,如下图:
- 点击 下载 连接进入下载页面,选择如下的文件:
- 下载完成后将压缩包解压到适当位置,文件目录下的内容如下:
3、配置 Maven
- 主要配置 Maven 的环境变量,就像配置 Java 一样,到控制面板-系统-高级系统设置-环境变量,添加两个系统变量,如下图:
- 然后选择编辑 path 变量,增加如下两个变量值:
- 然后点击确定,到 cmd 窗口输入:mvn -version 回车,配置成功则应当是如下界面:
- 最后一步修改 Maven 软件目录下 conf/setting.xml 文件,修改 localRepository 标签的值,该标签位于文件的 53 行,将值修改为自定义的仓库目录,我的如下:
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ${user.home}/.m2/repository--> <localRepository>D:/users/lenovo/Maven库</localRepository>
- 至此 Maven 配置完成,不过使用 IDEA 的话,可以不用另外下载安装 Maven,IDEA 本身内置 Maven 插件,直接修改 Maven 库路径即可
二、搭建 Maven 项目
1、新建 Maven 项目
- 我这里用的编辑器是 IDEA,所以 Maven 用的是 IDEA 内置的。
- 在 IDEA 新建 Maven 项目比较简单,单击 File->New->Project->Maven,基本直接 Next 以及填写项目名和选择项目存放位置就可以了。
2、POM 文件
- Maven 项目通过一个 pom.xml 文件来对项目的依赖包进行管理,初始项目的的 POM 文件内容如下:
<?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>Empty</artifactId> <version>1.0-SNAPSHOT</version> </project>
- POM 文件的标签的意义和用法,可以参看下面这篇博客:
POM 文件标签详解
3、POM 常用标签
- POM 文件中标签有很多,但是比较常用的有下面几个:
3.1、dependencies
- <dependencies></dependencies> 标签正如其名,是项目众多依赖的的填写处。
3.2、dependency
- <dependency></dependency> 标签是项目中某个具体依赖的填写处,dependency 标签通过三个子标签:groupId、artifactId 和 version 来确定项目的唯一依赖,类似于三维坐标中的三个坐标轴,示例如下:
<!--Spring MVC--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.5.RELEASE</version> </dependency>
- 当你在 Maven 项目的 pom 文件的 <dependency></dependency> 中增加如上面的内容,并且开启了自动引入依赖,那么 Maven 程序就会自动在你设置好 Maven localRepository 目录下新建目录:org/springframework/,并且在该新建目录下新建一个名为 spring-webmvc 的文件夹,而 spring-webmvc 文件夹下有名为 4.1.5.RELEASE 的文件夹,4.1.5.RELEASE 文件夹里面的文件便是 spring-webmvc-4.1.5.RELEASE.* 等文件,其中有个 JAR 包,便是 Java 软件包也就是你添加在 Maven Java 项目中的依赖。
- 通过仔细比较可以发现,某个 JAR 包在你电脑中的存放位置目录就是如下拼接:
<localRepository> 值\<groupId>值\<artifactId>值\<version>值\ 其中<groupId>值串中的 "." 替换成 "\"。
- 通常为了便于使用,我们组织依赖包都是按照某个 JAR 在 mvnrepository 的 URL 路径来填写的,例如 springframework 框架,在 mvnrepository 的组织如下图:
- 而 version 标签里的值便是 JAR 包的版本
3.3、properties
- 该标签用于定义变量,以供在 dependency 中使用,其使用形式如下:
<properties> <变量名>变量值</变量名> </properties>
- 例如可以将上面的 springframework 的版本采用如下形式定义:
<properties> <spring-framework.version>4.1.5.RELEASE</spring-framework.version> </properties>
- 那么相应的 dependency 可以改写成如下形式:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.version}</version> </dependency>
3.4、build 和 plugins
- Maven 提供这两个标签用于确定编译插件,以及 Java 的编译级别等,示例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
4、简单项目
4.1、编辑 POM 文件引入依赖包
- 创建一个 Maven 项目后对 POM 文件进行修改,代码如下:
<?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>com.wisely</groupId> <artifactId>highlight_springmvc4</artifactId> <version>0.01-SNAPSHOT</version> <packaging>war</packaging> <properties> <!--Generic properties--> <java.version>12.0.1</java.version> <project.build.sourecEncoding>UTF-8</project.build.sourecEncoding> <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-framework.version>4.1.5.RELEASE</spring-framework.version> <!--Logging--> <logback.version>1.0.13</logback.version> <slf4j.version>1.7.5</slf4j.version> </properties> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <!--Spring MVC--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.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> <!--Spring and Transactions--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-framework.version}</version> </dependency> <!--使用SLF4和log Back作为日志--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.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-classic</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-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
4.2、Log configuration
- 在工程项目的 src 目录下新建 \main\resource\ 目录,并在 resource 目录下新建一个 logback.xml 文件,用于配置日志,该文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true" scanPeriod="1 seconds"> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> <resetJUL>true</resetJUL> </contextListener> <jmxConfigurator/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>logback:%d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="org.springframework.web" level="DEBUG"/> <root level="info"> <appender-ref ref="console"/> </root> </configuration>
4.3、准备可视化界面:
- 在 resource 目录下新建一个 views 文件夹,用于存放可视化的 JSP 页面,建立一个简单的 JSP 文件,内容如下:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Spring MVC 项目演示</title> </head> <body> <pre> Welcome to Spring MVC world!!!! </pre> </body> </html>
4.4、Spring MVC configuration
- 在 main 目录下新建一个 java 文件夹,用于放置 Java 代码文件,在Java 目录的适当位置下编辑一个如下的代码文件:
package com.wisely.highlight_springmvc4; import com.wisely.highlight_springmvc4.interceptor.DemoInterceptor; import com.wisely.highlight_springmvc4.messageconverter.MyMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.config.annotation.*; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import java.util.List; @Configuration @EnableWebMvc @ComponentScan("com.wisely.highlight_springmvc4") public class MyMvcConfig 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; } }
4.5、web configuration
- 使用 WebApplicationInitializer 接口来配置 Web,该接口是 Spring 提供用来配置 servlet3.0+ 配置,可以替代 web.xml 文件,代码如下:
package com.wisely.highlight_springmvc4; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic; public class WebInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(MyMvcConfig.class); ctx.setServletContext(servletContext); Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); } }
4.6、controller
- Spring MVC 使用 Controller 来控制可视化界面和后台之间的交互,在这里简单的实现映射到 index 界面,代码如下:
package com.wisely.highlight_springmvc4.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestBody; @Controller public class HelloController { @RequestMapping("/index") public String hello(){ return "index"; } }
4.7、部署运行
- 部署到 Tomcat 上运行,结果如下: