第一个简单而较细解说的spring boot工程建立

为什么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相关启动画面,如下图所示,



可以看到 tomcat 已经在8080端口运行,上下文为 /mypro ,同时也看到启动类为 DemoApplication

(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  如下图,

好了,就这些,过程解说可能有点多,不过对理解较有帮助,欢迎拍砖...


猜你喜欢

转载自blog.csdn.net/shenzhenNBA/article/details/80629534