1. 程式人生 > >spring boot構建基礎版web專案(一)springboot、thymeleaf控制層基礎構建

spring boot構建基礎版web專案(一)springboot、thymeleaf控制層基礎構建

寫前說明

根據個人在各篇博文中看到的資訊,以及自己的總結,下面的說明文件只涉及到簡明的一些知識點。如thymeleaf的檔案路徑配置、快取等,都是直接使用預設的方式,但是實際上可以通過程式碼中載入和配置檔案配置的方式個性化,這裡不做詳細的說明,因為在實際專案開發中基本是用不是這些個性化配置,都是使用預設配置,如果需要特殊個性化可以根據實際情況google、百度。

建立專案

建立專案的方式有多種,第一種就是在建立的時候就選好你要使用Springboot的哪些功能,如用jdbc就勾選jdbc,在生成專案的時候就會自動生成Springboot-jdbc的依賴座標,並加入到pom.xml檔案中,這裡不採用這種方式,而是直接建立專案,依賴座標通過手動加入。
步驟:File->new->project->maven->next->next->finish。

pom檔案

這裡的專案我採用的多個模組的建立,因為這樣更貼切實際開發場景,模組的情況看下面專案pom.xml檔案。

父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.springboot.utui</groupId> <artifactId>boot-utui</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>utui-web</module
>
<module>utui-service</module> <module>utui-facade</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> </parent> <properties> <lombok.version>1.16.10</lombok.version> <jdk.version>1.8</jdk.version> <javax.servlet-api.version>3.1.0</javax.servlet-api.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 這個是常用註解外掛 實體類上@Data:表示類上新增getter、setter、toString, 或者controller、service類上@Slf4j:類中就可以註解使用log.info(),log.error()的方式列印日誌 使用前注意IDEA裡面要安裝外掛lombok plugin外掛 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${javax.servlet-api.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> </configuration> </plugin> </plugins> </build> </project>

pom.xml檔案補充說明:

  • lombok外掛的安裝方式以及相關注解的使用說明,請移步:[lombok外掛安裝、依賴匯入以及常用註解的使用說明];
  • 這裡需要專案構建後需要訪問頁面,可以使用jsp方式,但是Spring boot本身是更傾向於推薦使用thymeleaf,這裡就引入thymeleaf的依賴座標。
  • modules體現了專案裡面有幾個模組分別是web、service、facade。
  • 這個pom.xml的所有模組的總配置檔案,這裡採用的是<dependencies></dependencies>標籤引入依賴,這些依賴會被全部下載,並載入到每個子模組內,另外有的是在dependencies外再套一層<dependencyManagement></dependencyManagement>,當這個時候,依賴不會被自動注入到子模組,只是做一個依賴的管理作用,子模組通過pom.xml引入自身所需要的依賴。
子模組pom.xml

web模組中引入service座標,service模組引入facade座標。
web模組pom.xml:

<!-- 打包方式是jar,不是war,也可以不寫,預設就是用jar方式打包 -->
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>com.springboot.utui</groupId>
        <artifactId>utui-service</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
</dependencies>
<!-- 這裡使用的是Spring boot自有的功能,將專案打包成jar,指定啟動main所在的載入類,打包成jar後,可以使用java -jar utui-web.jar啟動專案 -->
<build>
    <finalName>utui-web</finalName><!-- 指定打包後jar包的名稱 -->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.springboot.utui.web.ApplicationBoot</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<!-- 這裡也可以不指定main方法所在的類,可以簡化為下面的形式 -->
<build>
    <finalName>utui-web</finalName><!-- 指定打包後jar包的名稱 -->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

service模組pom.xml:

<dependencies>
    <dependency>
        <groupId>com.springboot.utui</groupId>
        <artifactId>utui-facade</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
</dependencies>

facade模組pom.xml不新增任何內容保持原始。
說明:這裡所有模組都沒有新增其他的相關依賴,因為依賴在父pom.xml檔案中已經全部匯入,因為用的是dependencies標籤。

專案目錄結構

|-utui-web
    |-src
        |-main
            |-java
                |-com.springboot.utui.web
                    |-controller
                        |-BootUtuiController
                    |-ApplicationBoot
            |-resource
                |-static
                |-templates
                    |-index.html
                |-application.properties
                |-logback.xml

結構說明:在Springboot的web專案中,靜態檔案預設是放在resource/static目錄下,html檔案預設放在resource/templates目錄下,這裡建立了一個index.html檔案,方便演示,注意thymeleaf對標籤要求嚴格,如果不出意外的話html檔案中有一個標籤<meta charset="UTF-8">,訪問該頁面的時候會報錯,因為這個標籤沒有封閉,需要修改成<meta charset="UTF-8"/>

程式碼分析

ApplicationBoot程式碼
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.springboot.utui"}) //掃描包
public class ApplicationBoot  {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationBoot.class, args);
    }
}
BootUtuiController程式碼
@Controller //注意這裡不要使用RestController,這樣會導致頁面沒法展示的問題,如果需要返回Json串,直接在方法上加@ResponseBody即可
@RequestMapping("/boot")
@Slf4j
public class BootUtuiController {

    //獲取JSON串
    @RequestMapping(method = RequestMethod.GET, value = "/getJson")
    @ResponseBody
    public UserModel getJson() {
        log.info(">>>>測試日誌/boot/getJson");
        return new UserModel("zhangsan", 12);//這裡的UserModel類放在facade裡面,個人開發習慣,根據實際情況,自己選擇存放位置
    }

    //獲取頁面
    @RequestMapping(method = RequestMethod.GET, value = "/index")
    public String index() {
        log.info(">>>>測試日誌/boot/index");
        return "index";
    }
}
application.properties配置

其實這裡可以保持空檔案,如果想捯飭一下可以加一下服務的資訊,如server.port=8088等,不多說,初始實驗保持預設即可。

logback.xml配置

註釋很詳細,唯一需要注意的是配置log檔案存放的位置。

<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="false">
    <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="D:\\Program Files (x86)\\log" />
    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 成功日誌檔案 -->
    <appender name="INFO_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/info/utui-web-info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>
                ${LOG_HOME}/info/utui-web-info.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>7</MaxHistory>
        </rollingPolicy>
        <!-- 指定日誌格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
        <!-- 只打印錯誤日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--日誌檔案最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 失敗日誌檔案 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error/utui-web-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>
                ${LOG_HOME}/error/utui-web-error.%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>7</MaxHistory>
        </rollingPolicy>
        <!-- 指定日誌格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
        <!-- 只打印錯誤日誌 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--日誌檔案最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日誌輸出級別 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
</configuration>

啟動專案

IDEA直接啟動

步驟:

  1. 右擊ApplicationBoot啟動類->Run ‘ApplicationBoot.main()’
  2. 瀏覽器輸入http://localhost:8080/boot/index,輸出的是一個頁面,顯示的是頁面的內容:Hello Spring Boot!
  3. 瀏覽器輸入http://localhost:8080/boot/getJson,輸出一個JSON串:{"userName":"zhangsan","age":12}

到這裡專案都完全搭建成功。
但是還希望能夠普及一個知識點,就是使用上面提到的java -jar web.jar方式啟動專案。

JAR方式啟動

步驟:
1. 專案打包,然後到將utui-web.jar包複製出來(當然不復制也行)
2. 命令列進入utui-web.jar所在的目錄,執行java -jar utui-web.jar(注意當前執行命令的這臺機器要安裝jdk)
3. 瀏覽器輸入http://localhost:8080/boot/index,輸出的是一個頁面,顯示的是頁面的內容:Hello Spring Boot!
4. 瀏覽器輸入http://localhost:8080/boot/getJson,輸出一個JSON串:{"userName":"zhangsan","age":12}

幾個坑坑坑

  • 之前使用ssm(spring+springMVC+mybatis)的兄弟姐妹們,會習慣在web模組的pom.xml檔案中新增tomcat7外掛,通過tomcat外掛啟動,這個時候會啟動不起來的,因為Spring Boot內建了tomcat,現在用tomcat外掛啟動,就必須把Spring boot內建的tomcat去掉,實現方式就是在父pom.xml檔案中的spring-boot-starter-web下把tomcat排除掉。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • web專案的打包,用jar的方式和war的方式都是沒有問題的(上面描述的時候用的jar,後來試用了war也是OK的)。

spring boot構建基礎版web專案系列:

相關推薦

spring boot構建基礎web專案()springbootthymeleaf控制基礎構建

寫前說明 根據個人在各篇博文中看到的資訊,以及自己的總結,下面的說明文件只涉及到簡明的一些知識點。如thymeleaf的檔案路徑配置、快取等,都是直接使用預設的方式,但是實際上可以通過程式碼中載入和配置檔案配置的方式個性化,這裡不做詳細的說明,因為在實

spring boot構建基礎web專案(三)-springbootredis資料快取整合

寫前說明 在spring+spring mvc+mybatis模式下,使用的最多的就是jedis,但是spring boot整合了redis後,依然可以使用jedis,但是同時也提供了一個RedisTemplate和StringRedisTemplat

建立一個Spring Boot+Mybatis+Oracle的Web專案

最近學習Spring Boot,剛好複習下Mybatis,因為現在用的是Hibernate,Mybatis已經有兩年沒用過了。 首先我用的資料庫是Oracle. 1、New Project  2、建立完成後的目錄結構如下:(如果有的同學的資料庫使用的是mysql的話

初學spring boot 記錄下過程,新建一個web專案()

只勾選web依賴就可以了,沒有勾選模板,因為不會模板語法。。。。pom.xml檔案<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0

Spring Boot 2.0 的開源專案雲收藏來了!

給大家聊一聊雲收藏從 Spring Boot 1.0 升級到 2.0 所踩的坑 先給大家晒一下雲收藏的幾個資料,作為一個 Spring Boot 的開源專案(https://github.com/cloudfavorites/favorites-web)目前在 Github 上面已經有1600多個 Star,

Spring boot(二)—Web開發

final 一次 org init 調用 mat 重要 映射 ppi 上篇文章介紹了Spring boot初級教程:spring boot(一):入門篇,方便大家快速入門、了解實踐Spring boot特性;本篇文章接著上篇內容繼續為大家介紹spring boot的其它特性

Spring Boot 進階之Web進階 學習 - 單元測試

自動生成 添加 學習 one 類文件 dma AC mock ring 可在類文件中,右鍵->GO TO->Test 自動生成測試文件 1.添加測試註解 簡單方法測試 @RunWith(SpringRunner.class)@SpringBootTes

Spring+Springmvc+Mybatis+Maven建立Web專案實踐

Spring+Springmvc+Mybatis+Maven建立Web專案實踐 搭建SSM專案,過程中遇到了許多問題,但是經過自己的不懈努力,最終都的到了解決,特此寫了這片博文,算是給自己的筆記,如果有人看到,希望對你們有所幫助,如果哪裡不對,希望大家能夠多多指教。 目錄

spring boot 整合thyemleaf基本使用(

thyemleaf基本使用 :首先引入依賴thyemleaf <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star

Spring Boot 初級入門教程(十) —— 打分離 jar 包部署和測試(附原始碼)

分離 jar 包,也就是把工程原始碼打包到 *.jar,而把工程依賴的所有 lib 單獨生成,這樣打包的好處是,在依賴包沒有修改的情況下,部署時只需要上傳一次依賴包,每次部署的專案 jar 包很小,在伺服器網路不太好的情況下,這樣做是非常有必要的,因為上傳 20M 和 上傳 20K 的時間還是有

Spring boot 初步踩坑記(

初步使用spring boot + mybatis 組合,然而在eclipse 內執行 妥妥的 一點的問題都沒有。打包成jar 和war ,執行時,報錯: Field XXXXin XXXX.DemoApplication required a bean of type

Spring boot + mvn 實現簡單web記事本

功能需求: web應用中實現簡易記事本,內容儲存到本地檔案 概要設計: 1.spring boot實現前後端訊息傳送 2.業務類中實現寫入本地檔案 實現: 1.spring boot搭建 mvn匯入spring boot核心包 其中thymeleaf包的作

Spring Boot簡明教程之Web開發.md

Spring Boot簡明教程之Web開發 在前面的文章中,我們已經大致介紹了有關Spring Boot的專案配置等資訊,我們也體會到了Spring Boot對於Web開發的支援。在這篇文章中,我們將介紹Spring Boot對於Web開發的支援: Contr

spring boot中得定時任務執行段時間後突然停了 排查過程

在spring boot 專案中設定了一些定時任務,前幾天還執行得好好的,突然有一天就不再執行了,基本上呢都是執行了四天左右,定時任務停掉不在運行了,然後重啟程式定時任務就好使了,出現這麼兩次,第三次是在重啟以後第三天出現定時任務不再執行。感覺莫名其妙,查了好多資料,以下是關於我查到的關於定時任

Spring Boot課程】5.web開發

使用spring boot的開發流程: 建立Spring Boot應用,選中我們需要的模組; Spring Boot已經為我們將所有的場景配置好了(spring-boot-autoconfigure包自動配置),我們只需要在配置檔案中指定對應Properties相關的少

Spring Boot框架開發的Java專案在CentOS7上的部署

需求:上級拿來一份Spring Boot框架開發的Java專案程式碼讓我在伺服器上執行起來,只說了一句該框架是自帶了Tomcat(不用重新安裝Tomcat),一份程式碼下有兩個專案(一個管理端專案,一個使用者端專案,等會會細說)。我是一名運維,在上家公司只接觸過在Tomcat下部署Java專案,自帶Tomca

Spring Boot 2.0 新特性():配置繫結 2.0 全解析

在Spring Boot 2.0中推出了Relaxed Binding 2.0,對原有的屬性繫結功能做了非常多的改進以幫助我們更容易的在Spring應用中載入和讀取配置資訊。下面本文就來說說Spring Boot 2.0中對配置的改進。 配置檔案繫結 簡單型別 在S

Spring boot 概述及idea建立專案

概述         Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。Spring boot 是入門級微框架。 優點  

Spring Boot 返回 XML 數據,分鐘搞定!

傳遞 med web tid cati write tac java技術 工具 Spring Boot 返回 XML 數據,前提必須已經搭建了 Spring Boot 項目,所以這一塊代碼就不貼了,可以點擊查看之前分享的 Spring Boot 返回 JSON 數據,一分鐘

spring boot 2.1學習筆記【】 新特性介紹

搭建springboot2.X工程 本系列文章IDE都是用的是IntelliJ IDEA,springboot版本採用2.1.1 1.基於 Java 8,支援 Java 9,這意味著不可以使用JDK7 或更舊的版本執行SpringBoot2. 2.支援 Quar