現(xiàn)在很多項目中都使用了springboot演侯,可見springboot是java開發(fā)人員不得不必會的框架技術(shù)。那么springboot有什么好處呢膀息?
springboot是伴隨著spring而生的,繼承了spring的優(yōu)秀基因了赵。它的作用就是在于幫助開發(fā)者快速的搭建Spring框架潜支,節(jié)省了很多配置,簡化了編碼柿汛。本著約定優(yōu)于配置毁腿,可快速開發(fā)并運行起項目。本文我們將學(xué)習(xí)如何快速的創(chuàng)建一個springboot應(yīng)用苛茂。
源碼地址:https://github.com/q200737056/Spring-Course/tree/master/springboot2Test1
一已烤、項目環(huán)境
Java8+Maven3.3.9+SpringBoot2.0.4+Eclipse
二、代碼及配置講解
怎么創(chuàng)建Maven項目妓羊,這里就不說胯究。如果有人還不會,可以查看本人的另一篇文章躁绸。
Maven如何構(gòu)建項目
1.首先看一下pom.xml
<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.springboot2.test1</groupId>
<artifactId>springboot2Test1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot2Test1</name>
<description>springboot2實例教程</description>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<!-- SpringBoot 核心包 ,包含了自動配置裕循、日志logback和YAML-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- SpringBoot 支持aop切面 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- SpringBoot Web開發(fā),包含了jackson,Tomcat和spring-webmvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 打成jar時需要注釋掉下面的配置,springboot內(nèi)置集成tomcat-->
<!-- <exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions> -->
</dependency>
<!--SpringBoot集成 freemarker模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- springboot 熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依賴不會傳遞 -->
</dependency>
</dependencies>
<!-- 構(gòu)建-->
<build>
<!--生成jar,war的項目名-->
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 如果沒有該配置净刮,devtools不會生效 -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.application.yml
springboot會默認加載項目根目錄下的application.yml或application.properties剥哑。其實這兩種文件差不多,用哪一種都可以淹父,只是文件格式不同株婴。
#服務(wù)配置
server:
#服務(wù)端口
port: 8080
servlet:
# 項目contextPath
context-path: /
tomcat:
# tomcat的URI編碼
uri-encoding: UTF-8
# tomcat最大線程數(shù),默認為200
max-threads: 20
# Tomcat啟動初始化的線程數(shù)暑认,默認值25
min-spare-threads: 5
上面我只列出了一部分YAML格式的配置困介,如果換成.properties文件,配置端口如下:
server.port=8080
YAML格式需要注意的是(1)子屬性要縮進蘸际,而且縮進要相同座哩,比如縮進2個空格,所有需要縮進的都要2個空格粮彤。(2):后面需要加個空格根穷。
3.編碼式配置文件
主要靠@Configuration注解來實現(xiàn)姜骡,比如像我這里項目的WebConfig類
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* addResourceHandlers方法處理靜態(tài)資源 如圖片,js屿良,css,頁面等
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//當(dāng)你請求http://127.0.0.1:8080/page/index.html時溶浴,
//會把resources/static/page/index.html返回。
//這里的靜態(tài)資源是放置在WEB-INF目錄下的
//一般情況下管引,WEB-INF目錄下的資源是禁止直接訪問的
//其實springboot默認 已經(jīng)設(shè)置了 處理靜態(tài)資源路徑
// 默認 /** 配置classpath:/static,classpath:/public,classpath:/resources,
//classpath:/META-INF/resources,servlet context:/
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
/**
* addViewControllers方法 可以很方便的實現(xiàn)一個請求到視圖的映射
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//訪問http://127.0.0.1:8080/時士败,會直接返回index.html頁面
registry.addViewController("/").setViewName("forward:"+"/page/index.html");
}
/**
* addInterceptors方法 設(shè)置攔截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 攔截 http://127.0.0.1:8080/index/ 的所有請求
//攔截器 按添加的順序從前向后 依次執(zhí)行preHandle,而postHandle褥伴,afterCompletion相反谅将,從后向前
//addPathPatterns設(shè)置攔截路徑 excludePathPatterns設(shè)置不攔截路徑
registry.addInterceptor(new LogHandlerInterceptor()).addPathPatterns("/index/**")
.excludePathPatterns("/index/system/**");
registry.addInterceptor(new Log2HandlerInterceptor()).addPathPatterns("/index/**");
}
/**
* 配置過濾器 Filter
* @Bean注解相當(dāng)于 xml中的<bean>,方法名customFilter 即bean的id
* 方法的參數(shù)名 即根據(jù)type依賴注入。
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public FilterRegistrationBean customFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
//攔截的請求類型
registration.setDispatcherTypes(DispatcherType.REQUEST);
//加入過濾器
registration.setFilter(new CustomFilter());
//攔截路徑
registration.addUrlPatterns("/*");
//設(shè)置過濾器名稱
registration.setName("customFilter");
//設(shè)置過濾器執(zhí)行順序 值越大重慢,執(zhí)行順序越靠后
registration.setOrder(Integer.MAX_VALUE);
return registration;
}
}
重點說一下WebMvcConfigurer接口,SpringBoot2.0之前的版本是 WebMvcConfigurerAdapter類饥臂。WebMvcConfigurer接口這個使用很多個默認方法,如圖
這里講一下主要的幾個方法用處
- addResourceHandlers方法通過ResourceHandlers實現(xiàn)靜態(tài)資源的地址映射
- addViewControllers方法通過ViewController將一個請求轉(zhuǎn)到一個頁面
- configureMessageConverters方法配置在請求返回時內(nèi)容采用什么轉(zhuǎn)換器進行轉(zhuǎn)換
- addCorsMappings方法配置CORS跨域
- addInterceptors方法通過InterceptorRegistry添加攔截器
4.Controller及視圖
@Controller
@RequestMapping("/index")
public class IndexController {
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(User user,ModelMap map){
System.out.println("IndexController-用戶名:"+user.getUsername()
+",密碼:"+user.getPassword());
map.put("username", user.getUsername());
return "success";
}
}
視圖采用了Freemarker模板似踱,只是簡單的顯示一下隅熙。