Java程序设计:spring boot(2)

目录

[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 效果如下:

相关推荐
Yvemil720 分钟前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp20 分钟前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob33 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder41 分钟前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
engchina1 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行1 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
诚丞成1 小时前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
Smile灬凉城6661 小时前
反序列化为啥可以利用加号绕过php正则匹配
开发语言·php
lsx2024062 小时前
SQL MID()
开发语言