1. 程式人生 > 其它 >SpringBoot從0到0.7——第四天

SpringBoot從0到0.7——第四天

SpringBoot從0到0.7——第四天

  

  今天進行實戰開發一個小專案,SpringBoot和Thymeleaf整合的小專案

  因為懶得寫寫前端,直接找的別人的專案在它的的基礎上進行配置,進行修改。gitee專案下載

 

專案說明:

## 專案說明
本專案使用SpringBoot開發,jdbc5.1.48
### 1.資料庫資訊
建立兩個表,管理員表user和員工表employee
### 2.專案流程
1.springboot整合thymeleaf
    1).引入依賴
        <!--使用thymelaf-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
     
    2).配置thymeleaf模板配置
        spring:
          thymeleaf:
            cache: false  # 關閉快取
            prefix: classpath:/templates/ #指定模板位置
            suffix: .html #指定字尾
    3).開發controller跳轉到thymeleaf模板
        @Controller
        @RequestMapping("hello")
        public class HelloController {
            @RequestMapping("hello")
            public String hello(){
                System.out.println("hello ok");
                return "index";  // templates/index.html
            }
        }
=================================================================
2.thymeleaf 語法使用
    1).html使用thymeleaf語法 必須匯入thymeleaf的頭才能使用相關語法
        namespace: 名稱空間  
        <html lang="en" xmlns:th="http://www.thymeleaf.org">
    2).在html中通過thymeleaf語法獲取資料
================================================================
###3.案例開發流程
​   
    需求分析: 分析這個專案含有哪些功能模組
        使用者模組:
            註冊
            登入
            驗證碼
            安全退出
            真是使用者
        員工模組:
            新增員工+上傳頭像
            展示員工列表+展示員工頭像
            刪除員工資訊+刪除員工頭像
            更新員工資訊+更新員工頭像
    庫表設計(概要設計): 1.分析系統有哪些表  2.分析表與表關係  3.確定表中欄位(顯性欄位 隱性欄位(業務欄位))
        2張表 
            1.使用者表 user
                id username realname password gender
            2.員工表 employee
                id name salary birthday  photo
        建立一個庫: ems-thymeleaf
    詳細設計:
        省略
    編碼(環境搭建+業務程式碼開發)
        1.建立一個springboot專案 專案名字: ems-thymeleaf
        2.修改配置檔案為 application.yml  pom.xml  2.5.0
        3.修改埠   專案名: ems-thymeleaf
        4.springboot整合thymeleaf使用
            a.引入依賴
            b.配置檔案中指定thymeleaf相關配置
            c.編寫控制器測試
        5.springboot整合mybatis
                mysql、druid、mybatis-springboot-stater
            b.配置檔案中 
        6.匯入專案頁面
            static  存放靜態資源
            templates 目錄 存放模板檔案
    測試
    上線部署
    維護
    發版

首先匯入專案

 

 等待載入依賴完成

建立資料庫匯入資料---看一下它的application.yml

 

看一下yapplication.yml裡面還有什麼需要配置的---照片儲存地址

 啟動專案

 登入,看一下後臺

 

分析一下這個小專案:

首先看一下application.yml

#關閉thymeleaf模板快取
spring:
  thymeleaf:
    cache: false
    prefix: classpath:/templates/ #指定模板位置
    suffix: .html #指定字尾名
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssmbuild?characterEncoding=UTF-8
    username: root
    password: 123456
  web:
    resources:
      static-locations: classpath:/static/,file:${photo.file.dir} #暴露哪些資源可以通過專案名訪問

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.xuda.springboot.pojo
#Mybatis配置

#日誌配置
logging:
  level:
    root: info
    com.xuda: debug

#指定檔案上傳的位置
photo:
  file:
    dir: C:\Users\15969\Desktop\站點\Spring boot\SpringBootStudy\photo

config-LoginHandlerInterceptor攔截器,防止未授權訪問

package com.xuda.springboot.config;

import com.xuda.springboot.controller.UserController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Configuration
public class LoginHandlerInterceptor implements HandlerInterceptor {
    private static final Logger log = LoggerFactory.getLogger(LoginHandlerInterceptor.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       log.info("session+=》{}",request.getSession().getAttribute("user"));
        //登入成功後,應該有使用者得session
        Object loginuser = request.getSession().getAttribute("user");
        if (loginuser == null) {
            request.setAttribute("loginmsg", "沒有許可權請先登入");
            request.getRequestDispatcher("/login.html").forward(request, response);
            return false;
        } else {
        return true;
        }
    }

}

這個專案很適合新手來分析學習,搭建簡單,程式碼易懂

在此基礎上新增修改,給它的日誌儲存下來,這樣有利於分析日誌,如何將日誌儲存到本地呢

先在resources目錄下建立logback-spring.xml

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <!-- 引入預設得配置檔案 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!-- 模組名標識日誌名稱 -->
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <!-- info日誌單檔案大小限制 -->
    <springProperty scope="context" name="logback.fileInfoLog.maxFileSize" source="logback.fileInfoLog.maxFileSize" defaultValue="200MB" />
    <!-- info日誌最大保留時長單位天 -->
    <springProperty scope="context" name="logback.fileInfoLog.maxHistory" source="logback.fileInfoLog.maxHistory" defaultValue="15" />
    <!-- info日誌檔案總大小,超過該大小,舊得即將刪除 -->
    <springProperty scope="context" name="logback.fileInfoLog.totalSizeCap" source="logback.fileInfoLog.totalSizeCap" defaultValue="100GB" />

    <!-- error日誌單檔案大小限制 -->
    <springProperty scope="context" name="logback.fileErrorLog.maxFileSize" source="logback.fileErrorLog.maxFileSize" defaultValue="200MB" />
    <!-- error日誌最大保留時長單位天 -->
    <springProperty scope="context" name="logback.fileErrorLog.maxHistory" source="logback.fileErrorLog.maxHistory" defaultValue="15" />
    <!-- error日誌檔案總大小,超過該大小,舊得即將刪除 -->
    <springProperty scope="context" name="logback.fileErrorLog.totalSizeCap" source="logback.fileErrorLog.totalSizeCap" defaultValue="100GB" />

    <!-- http日誌單檔案大小限制 -->
    <springProperty scope="context" name="logback.fileHttpLog.maxFileSize" source="logback.fileHttpLog.maxFileSize" defaultValue="200MB" />
    <!-- http日誌最大保留時長單位天 -->
    <springProperty scope="context" name="logback.fileHttpLog.maxHistory" source="logback.fileHttpLog.maxHistory" defaultValue="15" />
    <!-- http日誌檔案總大小,超過該大小,舊得即將刪除 -->
    <springProperty scope="context" name="logback.fileHttpLog.totalSizeCap" source="logback.fileHttpLog.totalSizeCap" defaultValue="100GB" />
    <!-- 日誌目錄 -->
    <springProperty scope="context" name="logback.rootDir" source="logback.rootDir" defaultValue="logs"/>
    <!-- 控制檯輸出得日誌格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <!-- 日誌檔案輸出得日誌格式 -->
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %t [%c:%L]-%m%n"/>
    <!-- 控制檯輸出 -->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </layout>
    </appender>
    <!-- info日誌得設定 -->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${logback.rootDir}/${springAppName}.log</file>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
            <!--路徑-->
            <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>${logback.fileInfoLog.maxFileSize}</maxFileSize>
            <maxHistory>${logback.fileInfoLog.maxHistory}</maxHistory>
            <totalSizeCap>${logback.fileInfoLog.totalSizeCap}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <!-- 錯誤日誌 -->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${logback.rootDir}/${springAppName}-error.log</file>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy" >
            <!--路徑-->
            <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-error-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>${logback.fileErrorLog.maxFileSize}</maxFileSize>
            <maxHistory>${logback.fileErrorLog.maxHistory}</maxHistory>
            <totalSizeCap>${logback.fileErrorLog.totalSizeCap}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <!-- http日誌 -->
    <appender name="httpInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m%n</pattern>
        </encoder>
        <file>${logback.rootDir}/${springAppName}-http.log</file>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--路徑-->
            <fileNamePattern>${logback.rootDir}/%d{yyyy-MM,aux}/%d{yyyy-MM-dd,aux}/${springAppName}-http-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>${logback.fileHttpLog.maxFileSize}</maxFileSize>
            <maxHistory>${logback.fileHttpLog.maxHistory}</maxHistory>
            <totalSizeCap>${logback.fileHttpLog.totalSizeCap}</totalSizeCap>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <appender name="ASYNC_consoleLog" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="consoleLog"/>
    </appender>
    <appender name="ASYNC_fileInfoLog" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="fileInfoLog"/>
    </appender>
    <appender name="ASYNC_fileErrorLog" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="fileErrorLog"/>
    </appender>
    <appender name="ASYNC_httpInfoLog" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="httpInfoLog"/>
    </appender>

    <root level="info">
        <appender-ref ref="ASYNC_consoleLog" />
        <appender-ref ref="ASYNC_fileInfoLog" />
        <appender-ref ref="ASYNC_fileErrorLog" />
    </root>
    <logger name="log_http" additivity="false" level="INFO">
        <appender-ref ref="ASYNC_httpInfoLog"/>
    </logger>

</configuration>

在application.yml新增

spring:
    application:
        name: log

 重新執行專案即可看到,在專案目錄下會出現一個log資料夾,裡面包含著日誌

 

 

 

到此,已經能簡單的看懂java程式碼了,開始看原始碼,去進行java程式碼審計!!!