SpringBoot2教程(一)快速創(chuàng)建web項目

現(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


整個項目結(jié)構(gòu)

二、代碼及配置講解

怎么創(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模板似踱,只是簡單的顯示一下隅熙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市核芽,隨后出現(xiàn)的幾起案子囚戚,更是在濱河造成了極大的恐慌,老刑警劉巖轧简,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件维苔,死亡現(xiàn)場離奇詭異桨武,居然都是意外死亡,警方通過查閱死者的電腦和手機命黔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門会钝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來籍茧,“玉大人疑俭,你說我怎么就攤上這事遥巴。” “怎么了悴务?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵睹限,是天一觀的道長。 經(jīng)常有香客問我惨寿,道長邦泄,這世上最難降的妖魔是什么删窒? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任裂垦,我火速辦了婚禮,結(jié)果婚禮上肌索,老公的妹妹穿的比我還像新娘蕉拢。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布晕换。 她就那樣靜靜地躺著午乓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闸准。 梳的紋絲不亂的頭發(fā)上益愈,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音夷家,去河邊找鬼蒸其。 笑死,一個胖子當(dāng)著我的面吹牛库快,可吹牛的內(nèi)容都是我干的摸袁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼义屏,長吁一口氣:“原來是場噩夢啊……” “哼靠汁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起闽铐,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蝶怔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兄墅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體添谊,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年察迟,在試婚紗的時候發(fā)現(xiàn)自己被綠了斩狱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扎瓶,死狀恐怖所踊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情概荷,我是刑警寧澤秕岛,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站继薛,受9級特大地震影響遏考,放射性物質(zhì)發(fā)生泄漏灌具。R本人自食惡果不足惜督笆,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧记罚,春花似錦壳嚎、人聲如沸说庭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础拨。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芳悲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拘领。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓约素,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笆凌。 傳聞我的和親對象是個殘疾皇子圣猎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345