上一回SpringBoot入门(一)中我们已经体会到了SpringBoot的强大之处,接下来,我们将剖析各项功能是如何实现的,并说说其他一些web开发常用功能的集成
一、原理分析
上一个项目里,我们看到只要在app.class文件里runas javaapplication,就能直接将项目部署到tomcat中,不需要自己手动配置tomcat,各种各样MVC开发中手动添加的jar包和web.xml也没有配置,就实现了我们想要的效果,这是如何实现的呢?
诸位应该还记得,pom.xml文件中,我们引入了两点:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
第一条标签,实际上是在控制版本信息,我们看到version标签里写了2.0.6.RELEASE,实际上就是规定了以后引入的所有Jar包都必须与这个版本的SpringBoot适配
第二条标签,则是通过坐标,在符合Version要求的前提下,引入web开发所需要的一系列Jar,我们可以在下图中看到Maven为我们导入好的包:
我们可以看到,不仅仅是MVC需要的一系列Jar包已经导入好了,连hibernate-validator和tomcat的一系列包也已经成功引入,这就是我们可以0配置迅速开发web项目的原因所在。
二、代码分析
在上一回中,我们写了一个叫做app.class的类,其中貌似并没有什么代码,到底是如何执行的呢?
@SpringBootApplication
请看这条注解,这条注解的含义是:被此注解修饰的类,将成为springboot项目的***启动器***,此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan的合集,用于扫描所有托管于spring bean容器的类,可以极为便捷地配置启动类。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
@Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )})
public @interface SpringBootApplication {
这是@SpringBootApplication的定义,从中我们就可以理解到这条注解的深刻含义
2、controller
MVC开发中,这一条注解并不少见。有经验的开发者会知道这个注解标注的类会成为控制器,实际上就是servlet。而在这个类中地@RequestMapping("/demo")则配置了这个控制器地访问地址(或者说拦截目标),此外@ReponseBody则是规定了该函数地返回值并非用于视图跳转,而是确实地返回一个值
我们知道,如果没有@ReponseBody注解,那么下面hello的方法的返回值应当是试图跳转的目标,由于本例中我们并没有写试图,所以不加这条注解,必然报错。
三、其他的一些方法集成
1、整合Servlet
一些老派开发者依旧喜欢servlet,这里简单说说怎么集成
在通过注解扫描注册servlet的过程里,需要在servlet类上用注解@WebServlet(name="",urlPattern="")来配置servlet的访问,然后在springboot启动器上添加ServletComponentScan注解,来使启动器启动时扫描servlet
2、集成filter,listener
依旧是注解方式:
3、整合JSP
虽然SpringBoot官方并不喜欢JSP,但使用这项技术的开发者依旧很多,因此SpringBoot额外提供了一套方法开发JSP
第一步,引入jstl和jasper坐标,熟悉JSP的朋友对这两个包应该不会陌生
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
第二步,配置application.properties
由于是额外开发方式,难免需要自己手动做些配置,配置文件如下:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
第三步,写JSP,注意,必须在webapp/WEB-INF/jsp路径下创建jsp文件
第四步,写controller或者servlet,实现视图跳转
4、整合Thymeleaf
既然不推荐JSP,那么官方自然会推荐一套视图层开发方式,这就是thymeleaf(如果有朋友不熟悉thymeleaf的语法,日后我会推出thymeleaf简易教学)
整合thymeleaf,第一步是添加坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
第二步则是在html页面里用thymeleaf语法实现各种功能(如遍历、报错等)
第三步依旧是controller/servlet
5、SpringBoot访问静态资源
既然要写thymeleaf,自然要写html,自然涉及到静态资源的访问问题,SpringBoot有一套专门的静态资源访问规则:
第一种:src/main/下建立webapp目录,把资源都放进去
第二种:src/main/resources文件夹下建立templates目录,把静态资源都放进去
这一期到此结束,本期简单介绍了一下SpringBootApplication注解,@RequestMapping注解和@ResponseBody注解,并简单介绍了如何集成filter,listener,jsp,thymeleaf
下一期,将开始数据库的部分,这是SpringBoot的重中之重,欢迎各位观看
欢迎联系工作QQ账号:3352336739