为什么springboot兴起比较快呢?我们先回忆一下原来的springMVC功能在实现时,增加相关spring和springMVC的依赖JAR包,建立相关spring的application.xml的XML文件,文件内容....省略一大截文字,然后建立springMVC的对应xxx-Servlet.xml的MVC配置XML文件,文件内容....省略一大截文字;很明显构建一个这样项目配置文件内容和语法等花费好多时间,大多刚接触时都被这些搭建环境和配置文件等等搞得一沓糊涂,最后有可能放弃了,为了解决这些配置等繁杂的环境搭建过程,springboot运用而生了,这大大降低了环境的搭建,几乎微量配置即可快速搭建一个MVC功能的spring项目;所以springboot大有取代过去的springMVC的趋势,应该只是时间问题,然而springboot只是旧技术构建出来一种新的构建项目方式而已,使构建一个spring和MVC功能项目变得更加简单快速方便,让开发人员更多关注业务功能开发;Spring Boot是伴随着 Spring4.0 产生;
缺点就是要求开发人员相对有较多的相关知识,例如 maven,spring原理,各种注解,多工程构成的父子工程结构等等相关知识;下面我就建立一个简单的同时解说比较细的springboot工程,力争图文并茂,直观了解;
一,准备工作
1,下载Eclipse开发IDE开发环境;
2,下载maven并搭建maven服务,建立本地maven仓库,同时在eclipse配置maven;
Eclipse --》Window --》preferences,弹出的窗口在点击 User setting 选择本地maven的setting.xml,注意在xml中settings标签之后加入<localRepository>F:\maven_local_repository01</localRepository>,自己本地仓库相应修改;如下图,
3,保证能连接网络上网,以便后续能下载所需的JAR包;
二,工程样本建立
浏览器登录 https://start.spring.io/ 构建一个简单的MVC功能工程,增加的Dependencies依赖:web, Rest Repositories, Thymeleaf 然后点击Generate Project 产生并下载项目工程样例的打包文件,如下图,
三,工程导入Eclipse开发环境,下载相关依赖JAR包,
1,项目下载后解压到本地某个地方,文件夹可以按自己要求重命名,也可保留原样,然后:
Eclipse --》Import --》弹出窗口Maven --》Existing Maven Projects --》Next --》弹出窗口Browse... 选择工程所在文件夹 --》Finish确认,完成项目导入Eclipse;
2,导入工程后,可根据需要修改工程名称,例如我这里直接右键单击工程名称,Refactor --》Rename,工程名改为springBootDemo;然后下载相关jar包,Eclipse --》Project --》clean... 清空缓存目的是触发下载pom.xml文件中的指定依赖的JAR包文件,这个确保能连接上网,快慢取决于网速,一般几分钟到半小时左右可完成;
四,编写application.properties文件
这个是配置指定工程项目的必要信息,一般有运行指定的端口,上下文,试图前缀等等,为了在开发dev,测试test,生成prod各个环境间快速切换,可把配置文件分成三个配置文件,如:application-dev.properties,application-test.properties,application-prod.properties,然后在application.properties文件中仅仅增加一行启动相应配置文件即可,如 spring.profiles.active=dev ,即可切换启动 application-dev.properties 配置,其内容大致如下,
server.address=127.0.0.1 server.port=8080 server.servlet.contextPath=/ spring.thymeleaf.prefix=classpath:/templates/ server.session-timeout=30这个配置文件有些是用yml文件,如 application.yml 例如,
server: address:127.0.0.1 port:8080 servlet: context-path:/ session-timeout:30 spring: thymeleaf: prefix:classpath:/templates/ #suffix:".html" #可以不设置,在试图指定后缀名 datasource: url:"..." username:"..." password:"..." driverclassname:"..."
根据个人喜好,yml的语法和内容格式自行网上搜索查看了解更多,不过俺个人感觉properties文件好点,简单明确,yml根据空格控制层次关系感觉有些危险;
五,简要介绍各类注解的作用和理解约定大于配置的理念
1,springboot之所以让开发简单,就是其拥有很多功能的各类注解,运用各类注解,让搭建开发环境变得很轻松,其中 @SpringBootApplication 最熟悉,该注解标注的类主要是作为启动类,其它根据要求自行添加相应的注解,注意是在启动类前面添加,这样项目启动才能扫描到相应的包,相应注解才起作用,@SpringBootApplication是一个复合注解,继承自@Configuration,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration 所以应用该注解的启动很多功能,作为启动类,默认扫描该类所在的包,所以在该包或其下子包之下的各个类,如果应用了相应的注解则一般起作用,但是其它位置的包,如果使用了相应的注解也不起作用,因为其所在的包没有被扫描到,所以应该在启动类的类前面加上相应的注解,并指定扫描到相应的包,这样才把相应包扫描到,并识别使用了各个相应的注解,这样相应的实例加载到spring容器中,相应功能才起作用;
(注意举例:例如启动类前面没有加@ComponentScan注解时,扫描到当前启动类和本类所在包以及其子包,各包中的各类前面如果加了@Controller才起到可访问作用;如果启动类前加了@ComponentScan注解时,则只有扫描其中指定的包以及其下的子包,其中各个类前加了@Controller注解才起到可访问作用,其它包即使加了@Controller也不起作用,因扫描不到;启动类如果加了@Controller则可以访问,不加则仅作为启动类),例如以下启动类,
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author Administrator * 作为启动类 */ @SpringBootApplication @ComponentScan("com.example,com.app") @Controller @RequestMapping("/*") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }@ComponentScan,扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理,跟以前的<context:component-scan>作用一样;
@EnableAutoConfiguration 的作用启动自动的配置;
springboot更多的注解,请搜索了解更多,以下链接参考;
https://www.cnblogs.com/ldy-blogs/p/8550406.html,
https://www.cnblogs.com/tanwei81/p/6814022.html,
https://blog.csdn.net/qq_26334813/article/details/78320780
2,约定大于配置的理念
这大致理解为新建项目的结构按springboot推荐的结构,如图,
src/main/java 其下为各个包的java代码;
src/main/resources 其下为各种资源文件,例如该目录下放配置application.properties文件;
src/main/resources/static 其下为各种静态资源文件,例如css,js,图片,或部分web页面,这里的资源可以直接访问,例如通常在该文件夹下放index.html作为默认的主页;
src/main/resources/templates 其下为各种试图模板资源文件,该文件夹类似web-inf的作用,不能直接访问,必须经过相应的controller才访问对应的试图模板资源;
src/test/java 其下为各个包的测试类java代码;
target 存放代码编译的结果和一些插件的编译配置;
工程对应的 pom.xml 文件内容如下,
<?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.example</groupId> <artifactId>springBootDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 用thymeleaf模板来写html必须增加对应的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- spring boot tomcat jsp 支持开启,用于编译jsp --> <!-- <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> --> <!-- JSTL for JSP 增加对应的依赖 --> <!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> --> <!-- servlet支持开启 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!-- 支持热部署依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>test</scope> </dependency> </dependencies> <build> <defaultGoal>compile</defaultGoal> <finalName>springBootDemo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 没有该配置,devtools 不生效 --> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
六,试图的使用
使用什么试图则需要在pom.xml中添加相应的依赖,
1,默认使用的是 thymeleaf 试图,所以pom.xml中添加相应的依赖
<!-- 用thymeleaf模板来写html必须增加对应的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
thymeleaf试图相关语法,网上搜索了解更多,以下链接参考:
https://blog.csdn.net/zrk1000/article/details/72667478
2,如果要支持JSP试图,则pom.xml中增加如下依赖,
<!-- spring boot tomcat jsp 支持开启,用于编译jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--对jstl支持的 libs-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
同时application.properties文件增加
spring.mvc.view.prefix=/web-inf/view/
spring.mvc.view.suffix=.jsp
再建立文件夹src\main\webapp\WEB-INF\view,然后在其下存放JSP试图文件;
如果支持JSP,项目pom.xml的<packaging>最好改为war;
七,编写controller编写
可以新建一个包,例如上图中 com.app.controller,然后在其中编写一个class,类前面加上
@Controller 注解,当扫描到时作为一个controller类,再加上
@RequestMapping("/myurl") url可自定义,指定访问本控制器的基本URL,例如,
package com.app.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/my") public class MyController { @RequestMapping("/index") public String MainIndex ( HttpServletRequest request ,HttpServletResponse response ,HttpSession session ,Model model) { model.addAttribute("msg", "welcome 123456789"); return "/my/appMain.html"; } }八,项目启动和访问
1,根据打包方式不同有不同启动方式,在开发环境哪种启动方式都可以
(1),在 IDE 运行启动类,
右键单击启动类 --》Run As --》Java Application即可;
(2),如果已经安装maven,则在springboot的项目工程的根目录下运行
mvn spring-boot:run 如下图,
启动过程看到springboot相关启动画面,如下图所示,
(3),如果已经安装maven,DOS状态下先到项目根目录,
使用 mvn install 生成jar后,以jar包运行形式启动,如下,
mvn install (注意等待下载依赖jar包和编译一下)
cd target (切换到编译结果文件夹)
java -jar myPackageJarFileName.jar
如下图所示,
然后开始等待下载依赖jar包和编译一下,最后可以看到编译结果,如下图所示,
然后转到项目的 target 文件夹中,查看即可发现编译成的jar包,我这里是 springBootDemo.jar ,注意我这里在 pom.xml 指定了build编译结果名称,<finalName>springBootDemo</finalName>,如下图所示,
然后DOS下切换转到target目录中,运行jar包: java -jar springBootDemo.jar ,如下图所示,
启动完,即可如前面的启动结果,tomcat 在8080端口运行;
(4),如果以 war 包形式,则发布到tomcat中即可,2,访问,本地根据配置在浏览器中访问即可,例如
http://localhost:配置端口/配置上下文/对应URL,如我这里为 http://localhost:8080/mypro 如下图,
好了,就这些,过程解说可能有点多,不过对理解较有帮助,欢迎拍砖...