写了快两年的Java代码了,发现自己居然不会搭建一套Spring mvc环境出来,只会添砖加瓦,说来就惭愧了,为了弥补这点的缺陷,也为了以后更好的借助已有的SpringMVC项目学习更多的知识,我决定从零搭建一套自己的SpringMVC。
网上搜索大部分都是基于XML配置的环境搭建,基于XML大部分是因为历史项目的原因无法切换成基于JavaConfig来进行配置,但是基于JavaConfig是未来的趋势,所以本系列的文章是零XML配置的,喜欢XML请自行搜索其他问问。
使用的基础环境如下:
- 系统: MacOS(也就是Linux系统)
- java版本: 1.8.0_151,下载地址
- Tomcat版本: 8.5.20, 下载地址
- Maven版本: 3.5.0,下载地址
- 开发工具: Intellij Idea
废话不多说,开始整起。
本篇的文章是搭建一套最简单的,只有HelloWorld的项目,目标是浏览器中输入一个URL,返回”HelloWorld”。
现在一个普通的Maven项目,不要使用Archtype生成:
填写自己的GroupId和ArtifactId,一路Next。
新生成的pom.xml,只有项目的groupId和artifactId:
<groupId>com.cyfgroupId>
<artifactId>baseartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.3.13.RELEASEversion>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
dependencies>
其中spring-webmvc就是我们要用的核心包,我们使用Spring4系列中最新的一个版本。
javax.servlet-api是基础包,servlet的很多依赖都在这个包里,需要引入,我们使用了3.1.0。
如果要使用其他版本的,请到maven库中搜索。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
plugins>
build>
一定要增加打包类型
<packaging>warpackaging>
由于我没有增加打包类型为: war导致配置tomcat时无法找到Artifact,在网上找了很多解决方案都不行,加了这个配置就好。
新建我们自己的package,然后增加类: MyWebAppInitializer
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//Spring 上下文配置
@Override
protected Class>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
//Servlet上下文配置
@Override
protected Class>[] getServletConfigClasses() {
return new Class[]{ServletConfig.class};
}
//mapping配置
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.cyf.base")
public class RootConfig {
}
@Configuration:
这是一个空类,只有一些注解其中,@Configuration标注这个类是配置类,后续我们会在这个类中添加一些Bean。
@EnableWebMvc:
启用WebMvc。
@ComponentScan(basePackages = “com.cyf.base”)
自动扫描com.cyf.base下的所有类。
注意,@EnableWebMvc和@ComponentScan(basePackages = “com.cyf.base”) 一定要放在一起,否则会有问题,项目能启动,但是拦截不到请求。
@Configuration
public class ServletConfig extends WebMvcConfigurerAdapter {
}
这里的配置是继承了WebMvcConfigurerAdapter,它有很多默认的配置,不需要我们实现,当然我们可以覆盖它的默认实现,这里就不说了,后续有需要,我们再慢慢覆盖。
@RestController
@RequestMapping("/api")
public class TestController {
@GetMapping("/hello")
public Object hello(){
return "helloWorld";
}
}
不用详细说了,稍微开发过SpringMvc的都清楚。
这里直接在Idea部署到了tomcat上,这里就不重复造轮子了,到网上随便找找有很多,比如Idea部署tomcat。
运行后,浏览器中输入:
http://localhost:8080/api/hello