目录
[1 Spring MVC 零配置创建与部署](#1 Spring MVC 零配置创建与部署)
[1.1 创建Spring MVC Web⼯程](#1.1 创建Spring MVC Web⼯程)
[1.2 pom.xml 添加坐标相关配置](#1.2 pom.xml 添加坐标相关配置)
[1.3 添加源代码](#1.3 添加源代码)
[1.4 添加视图](#1.4 添加视图)
[1.5 SpringMVC 配置类添加](#1.5 SpringMVC 配置类添加)
[1.6 入口文件代码添加](#1.6 入口文件代码添加)
[1.7 部署与测试](#1.7 部署与测试)
[2 Spring Boot 概念&特点](#2 Spring Boot 概念&特点)
[2.1 框架概念](#2.1 框架概念)
[2.2 框架特点](#2.2 框架特点)
[2.3 Spring Boot 快速⼊⻔](#2.3 Spring Boot 快速⼊⻔)
[2.3.1 环境准备:Idea、Maven、Jdk 1.8+ 、Spring Boot 2.x](#2.3.1 环境准备:Idea、Maven、Jdk 1.8+ 、Spring Boot 2.x)
[2.3.2 创建项目](#2.3.2 创建项目)
[2.3.3 添加依赖坐标](#2.3.3 添加依赖坐标)
[2.3.4 导⼊Spring Boot的web坐标与相关插件](#2.3.4 导⼊Spring Boot的web坐标与相关插件)
[2.3.5 添加源代码](#2.3.5 添加源代码)
[2.3.6 创建启动程序](#2.3.6 创建启动程序)
[2.3.7 启动Spring Boot应⽤并测试](#2.3.7 启动Spring Boot应⽤并测试)
1 Spring MVC 零配置创建与部署
1.1 创建Spring MVC Web⼯程
创建 Maven 的 web 项⽬
1.2 pom.xml 添加坐标相关配置
java
<!-- spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- web servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<build>
<finalName>springmvc</finalName>
<plugins>
<!-- 指定Maven编译的JDK版本和编码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
1.3 添加源代码
java
@Controller
public class HelloController {
@RequestMapping("/index")
public String index(){
return "index";
}
}
1.4 添加视图
在 WEB-INF/views ⽬录下创建 index.jsp(这⾥以jsp为模板):
java
<html>
<body>
<h2>Hello mvc!</h2>
</body>
</html>
1.5 SpringMVC 配置类添加
Spring Mvc 配置信息 MvcConfig ⽂件添加,作为 Mvc 框架环境,原来是通过 xml 来进⾏配置 (视图 解析器、Json转换器、⽂件上传解析器等),这⾥基于注解通过继承 WebMvcConfigurerAdapter 类并 重写相关⽅法来进⾏配置 (注意通过 @EnableWebMvc 注解来启动 MVC 环境)。
java
/**
* MVC 基本配置
*/
// 配置类
@Configuration
// 在@Configuration注解的配置类中添加,⽤于为该应⽤添加SpringMVC的功能
@EnableWebMvc
// 扫描包范围
@ComponentScan("com.xxxx.springboot")
public class MvcConfig {
/**
* 配置 JSP视图解析器
* @return
*/
@Bean // 将⽅法返回的结果交给IOC容器维护
public InternalResourceViewResolver viewResolver(){
// 获取视图解析器
InternalResourceViewResolver viewResolver = new
InternalResourceViewResolver();
// 设置前缀
viewResolver.setPrefix("/WEB-INF/views/");
// 设置后缀
viewResolver.setSuffix(".jsp");
// 返回解析器对象 (交给IOC容器进⾏维护)
return viewResolver;
}
}
MvcConfig 类定义好了,那么问题来了,怎么加载 MvcConfig 类呢,原来在构建 Mvc 应⽤时是通过容器启动应⽤时加载 web.xml ⽂件实现配置⽂件加载,现在的环境 web.xml ⽂件不存在,此时基于注 解⽅式构建的 Mvc 应⽤,定义 WebInitializer 实现 WebApplicationInitializer 接⼝ (该接⼝⽤来配置 Servlet3.0+ 配置的接⼝,⽤于替代 web.xml 配置),当 servlet 容器启动Mvc应⽤时会通过 SpringServletContainerInitializer 接⼝进⾏加载,从⽽加载 Mvc 应⽤信息配置。实现该接⼝ onStartup ⽅法 ,加载应⽤信息配置。
1.6 入口文件代码添加
java
/**
* 实现 WebApplicationinitializer 接⼝的类都可以在web应⽤程序启动时被加载
*/
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws
ServletException {
// 基于Java的配置类加载Spring的应⽤上下⽂
AnnotationConfigWebApplicationContext ctx = new
AnnotationConfigWebApplicationContext();
// 注册 Mvc 配置信息
ctx.register(MvcConfig.class);
// 设置 ServletContext 上下⽂信息
ctx.setServletContext(servletContext);
// 配置转发器 Dispatcher
ServletRegistration.Dynamic servlet =
servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));
// 设置映射路径
servlet.addMapping("/");
// 启动时即实例化 Bean
servlet.setLoadOnStartup(1);
}
}
1.7 部署与测试
通过 Tomcat 启动项⽬并访问
此时地址访问成功。
当项⽬访问成功后,那么问题来了,如果项⽬中存在静态资源⽂件,Handler 放⾏处理该如何配置, 定义的拦截器怎么应⽤,此时关注 WebMvcConfigurationSupport ⽗类⽅法,重写相关⽅法即可。
java
// 静态资源 handler不进⾏处理 直接响应到客户端
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer
configurer) {
configurer.enable();
}
// 配置拦截器
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
// 添加拦截器到mvc 环境
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor());
}
2 Spring Boot 概念&特点
2.1 框架概念
随着动态语⾔流⾏(Ruby、Scala、NodeJs等),Java 开发变得相对笨重,配置繁琐,开发效率低下, 部署流程复杂,以及第三⽅集成难度也相对较⼤,针对该环境,Spring Boot 被开发出来,其使⽤"习惯 ⼤于配置⽬标",借助Spring Boot 能够让项⽬快速运⾏起来,同时借助 Spring Boot 可以快速创建 web 应⽤并独⽴进⾏部署(jar包 war 包⽅式,内嵌 servlet 容器),同时借助 Spring Boot 在开发应⽤时可以 不⽤或很少去进⾏相关 xml 环境配置,简化了开发,⼤⼤提⾼项⽬开发效率。
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计⽬的是⽤来简化 Spring 应⽤的初始搭建以及开发过程。该框架使⽤了特定的⽅式来进⾏配置,从⽽使开发⼈员不再需要定义样板化的配置。通过这 种⽅式,让 Spring Boot在蓬勃发展的快速应⽤开发领域 (rapid application development) 成为领导者。
2.2 框架特点
创建独⽴ Spring 应⽤程序、嵌⼊式 Tomcat、Jetty 容器、⽆需部署 WAR 包、简化 Maven 及 Gradle 配置、尽可能⾃动化配置 Spring、直接植⼊产品环境下的实⽤功能,⽐如度量指标、健康检查及扩展配 置、⽆需代码⽣成及 XML 配置等,同时 Spring Boot 不仅对 web 应⽤程序做了简化,还提供⼀系列的 依赖包来把其它⼀些⼯作做成开箱即⽤。
2.3 Spring Boot 快速⼊⻔
2.3.1 环境准备:Idea、Maven、Jdk 1.8+ 、Spring Boot 2.x
2.3.2 创建项目
通过 Maven 创建⼀个普通的 java 项⽬
2.3.3 添加依赖坐标
java
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Spring Boot 的项⽬必须要将 parent 设置为 Spring Boot 的 parent,该 parent 包含了⼤量默认的配 置,简化程序的开发。
2.3.4 导⼊Spring Boot的web坐标与相关插件
java
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
2.3.5 添加源代码
java
@Controller
public class HelloController {
@RequestMapping("hello")
@ResponseBody
public String hello(){
return "Hello SpringBoot";
}
}
2.3.6 创建启动程序
在 HelloController.java 所在包下,创建 StarterApplication.java
java
@SpringBootApplication
public class Starter{
public static void main(String[] args) {
SpringApplication.run(Starter.class);
}
}
2.3.7 启动Spring Boot应⽤并测试
这⾥运⾏main ⽅法即可,通过浏览器访问 http://localhost:8080/hello 效果如下: