SpringBoot整合Jsp和Thymeleaf (附工程)

来源:https://www.cnblogs.com/xuwujing/archive/2018/07/11/9297165.html
-Advertisement-
Play Games

前言 本篇文章主要講述 SpringBoot 整合 Jsp 以及 SpringBoot 整合 Thymeleaf ,實現一個簡單的用戶增刪改查示例工程。事先說明,這兩個是單獨整合的,也就是兩個工程。如需其中一個,只需看相應部分的介紹即可。若需工程源代碼,可以直接跳到底部,通過鏈接下載工程代碼。 Sp ...


前言

本篇文章主要講述SpringBoot整合Jsp以及SpringBoot整合Thymeleaf,實現一個簡單的用戶增刪改查示例工程。事先說明,這兩個是單獨整合的,也就是兩個工程。如需其中一個,只需看相應部分的介紹即可。若需工程源代碼,可以直接跳到底部,通過鏈接下載工程代碼。

SpringBoot整合Jsp

開發準備

環境要求
JDK: 1.7或以上
SQL: MySql

這裡我們需要在mysql中建立一張用戶表,用於存儲用戶的信息。
資料庫腳本如下:

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年齡',
  `password` varchar(24) NOT NULL COMMENT '密碼',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8

新建好表之後,我們再來創建工程。
我們的這個工程是通過maven創建一個普通的web工程。
創建好工程之後,我們需要下載相應的jar包,然後再來進行相關的開發。
這些jar包我們在pom.xml文件中添加springBoot和Jsp相關的jar即可。
相關的註釋以及寫在其中了,這裡就不在過多講述了。
Maven依賴如下:

 <dependencies>
        <!-- Spring Boot Web 依賴 核心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot 熱部署 class文件之後會自動重啟 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- Spring Boot Test 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <!-- Spring Boot JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
          <!-- Spring Boot Mybatis 依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot}</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        
        <!--fastjson 相關jar -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson}</version>
        </dependency>
        
                <!--JSP 依賴  -->
        <!-- servlet依賴. -->  
        <dependency>  
            <groupId>javax.servlet</groupId>  
            <artifactId>jstl</artifactId>
        </dependency>  
        
        <dependency>  
            <groupId>javax.servlet</groupId>  
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>  
        </dependency>  
       
        <!-- tomcat的支持.-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>    
  </dependencies>

相關的Jar包下載完畢之後,我們再來確認項目的工程結構。
首先是後臺相關包說明:

src/main/java
com.pancm.web - Controller 層
com.pancm.dao - 數據操作層 DAO
com.pancm.pojo- 實體類
com.pancm.service - 業務邏輯層
Application - 應用啟動類

src/main/resources
application.properties - 應用配置文件,應用啟動會自動讀取配置

前端的相關文件存放說明:

src/main/webapp
WEB-INF - web.xml web相關的核心配置
WEB-INF/jsp - JSP文件的存放路徑

整體工程結構圖:

工程結構確認之後,我們再來添加相應的配置。
只需在application.properties 添加相應的配置即可。
數據源的配置和之前的差不多,需要註意的是Jsp的相關配置。
由於springBoot預設的支持的模版是Thymeleaf,所以這裡我們需要進行相應的更改。

配置如下:

## 編碼
banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
## 埠
server.port=8088

## 數據源
spring.datasource.url=jdbc:mysql://localhost:3306/springBoot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## JSP配置
# 頁面預設首碼
spring.mvc.view.prefix=/WEB-INF/jsp/
# 響應頁面預設尾碼
spring.mvc.view.suffix=.jsp

代碼編寫

其實這裡的代碼和之前文章講述的基本一致,唯一有點區別的是,這裡我是用JPA實現對資料庫進行操作的(也就是順便說下JPA這個框架的使用)。

首先是實體類,這裡因為用了JPA,所以和之前的有點不同,添加了一些註解。
Entity:表示這是個實體類。
Table:該實體類映射的數據表名。
Column:指定該欄位的屬性,nullable 表示是否非空,unique 表示是否是唯一。

那麼實體類的代碼如下:

@Entity
@Table(name = "t_user")
public class User {
    
     /** 編號 */
     @Id
     @GeneratedValue
     private Long id;
     /** 姓名 */
     @Column(nullable = false, unique = true)
     private String name;
     /** 密碼*/
     @Column(nullable = false)
     private String password;
     /** 年齡 */
     @Column(nullable = false)
     private Integer age;
    
    //getter和setter略
}    

由於用的是JPA,dao層這塊只需繼承JpaRepository該類即可,需要指定實體類和主鍵類型。
dao層代碼如下:

@Mapper
public interface UserDao extends JpaRepository<User, Long>{
    
}

業務層這塊和之前一樣調用即可,雖然用的是JPA,但是方法也是很簡單的,新增和修改就用save,刪除就是delete,findOne就是通過ID查找,findAll就是查詢所有等等。

services代碼如下:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    
    
    @Override
    public boolean addUser(User user) {
        boolean flag=false;
        try{
            userDao.save(user);
            flag=true;
        }catch(Exception e){
            System.out.println("新增失敗!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean updateUser(User user) {
        boolean flag=false;
        try{
            userDao.save(user);
            flag=true;
        }catch(Exception e){
            System.out.println("修改失敗!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean deleteUser(Long id) {
        boolean flag=false;
        try{
            userDao.delete(id);
            flag=true;
        }catch(Exception e){
            System.out.println("刪除失敗!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public User findUserById(Long id) {
        return userDao.findOne(id);
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }
}

到了控制層這塊,這裡提供還是提供介面給Jsp進行調用,不過這裡類的註解就不能用之前的RestController這個註解,這個註解以json的格式返回數據,但是我們有時返回的時候需要跳轉界面,所以應該使用Controller這個註解。如果想在某個方法中返回的數據格式是json的話,在該方法上加上ResponseBody這個註解即可。

控制層代碼如下:

@Controller
public class UserRestController {
        @Autowired
        private UserService userService;
 
        @RequestMapping("/hello")
        public String hello() {
            return "hello";
        }
        
        @RequestMapping("/")
        public String index() {
            return "redirect:/list";
        }
        
        
        @RequestMapping("/list")
        public String list(Model model) {
            System.out.println("查詢所有");
            List<User> users=userService.findAll();
            model.addAttribute("users", users);
            return "user/list";
        }

        @RequestMapping("/toAdd")
        public String toAdd() {
            return "user/userAdd";
        }

        @RequestMapping("/add")
        public String add(User user) {
            userService.addUser(user);
            return "redirect:/list";
        }

        @RequestMapping("/toEdit")
        public String toEdit(Model model,Long id) {
            User user=userService.findUserById(id);
            model.addAttribute("user", user);
            return "user/userEdit";
        }

        @RequestMapping("/edit")
        public String edit(User user) {
            userService.updateUser(user);
            return "redirect:/list";
        }


        @RequestMapping("/toDelete")
        public String delete(Long id) {
            userService.deleteUser(id);
            return "redirect:/list";
        }
}

功能測試

後端代碼介紹就到這裡了,至於前端JSP的代碼就不在多說了(主要原因是界面寫得太醜了...),我們直接啟動項目,查看效果。
啟動項目,在瀏覽器上輸入:http://localhost:8088/list
主界面:

添加一條數據之後的界面:

其它的修改和刪除也能實現,這裡就在一一不貼圖了。
springBoot整合 Jsp到這就結束了。

SringBoot整合Thymeleaf

該工程參考:http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html

Thymeleaf介紹

Thymeleaf是個模板引擎,可以用於Web與非Web應用,它可以XML/XHTML/HTML5, JavaScript, CSS ,甚至文本文件。

Thymeleaf的使用

Thymeleaf這塊個人使用不太熟練,這個也不是本篇文章主要講述的內容,詳細的可以查看官方文檔。
https://www.thymeleaf.org/documentation.html

開發準備

基本和上面的SringBoot整合Jsp差不多,這裡就不再贅述了。

由於SpringBoot預設的模版引擎就是Thymeleaf,所以Maven 依賴這塊只需要在原先的springBoot項目添加Thymeleaf的依賴就行。

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>

application.properties 配置這塊,可以和之前的項目基本一致,需要註意的也只有spring.thymeleaf.cache配置,為false的時候是關閉Thymeleaf的緩存,更改界面之後會自動重啟然後生效。

SringBoot整合Thymeleaf和SringBoot整合Jsp有個比較大的不同是,Thymeleaf的資源文件是放在src/main/resources目錄下,Jsp的是放在src/main/webapp目錄下。其中resources目錄下的的static目錄用於放置靜態內容,比如css、js、jpg圖片等。templates目錄用於放置項目使用的頁面模板,也就是.html文件。

它的項目結構圖如下:

代碼基本和SringBoot整合Jsp一致,這裡就不在贅述了。

功能測試

啟動該項目,在瀏覽器輸入:http://localhost:8085
主界面:

修改用戶數據之後的:

其它的功能也是可以實現的,這裡就不再過多貼圖了。
springBoot整合 Thymeleaf到這就結束了。

其它

關於SpringBoot整合Jsp和Thymeleaf 到這裡就結束了。
SpringBoot整合Jsp的項目工程地址:
https://github.com/xuwujing/springBoot-study/tree/master/springboot-jsp-jpa
SpringBoot整合Thymeleaf的項目工程地址:
https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf

原創不易,如果感覺不錯,希望給個推薦!您的支持是我寫作的最大動力!
版權聲明:
作者:虛無境
博客園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人博客出處:http://www.panchengming.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • import randomflag = 1try_=0while (flag): try_ +=1 yan = "" for i in range(0,4): cun=random.randrange(1,4) if cun==i: tmp=chr(random.randint(65,90)) el ...
  • 本文介紹整數編碼,主要討論無符號整數和有符號整數的編碼不同所帶來的一些理解上的問題。無符號整數編碼很容易理解,因其沒有符號位,在二進位無符號整數轉為十進位數時,每一位上的數字(0或1)乘以該為的權值2w-1(w從1開始),然後相加即可。對於有符號整數,最高位為符號位,符號位的權值決定了正負。有符號整 ...
  • 一、什麼是繼承 繼承是一種創建類的方法,在python中,一個類可以繼承來自一個或多個父。原始類稱為基類或超類。 二、什麼時候使用繼承 在已經創建的幾個類中,這幾哥類中的方法和變數有相同的,這種時候我們就可以使用類的繼承,將其它類中已有的方法和變數通過繼承的方式,在新創建的類中,使用正常的方式就可以 ...
  • defer 匿名函數特性 執行方式類似其它語言中的析構函數,在函數體執行結束後按照調用順序的 逐個執行 即使函數發生 也會執行,類似於try...except 常用於 資源清理,文件關閉,解鎖以及記錄時間等操作 支持匿名函數的調用 通過於匿名函數配合可在return之後修改函數計算的結果 如果函數體 ...
  • 其實我是一直都想早點兒寫點兒學習筆記的,但是太懶了一直拖到了今天,好吧我已經學習了java一個月了,說一下自己的學習經歷,當做一遍複習和鞏固了! 使用cmd在開始運行欄上列印出來: 然後下麵有幾個關於黑視窗的小技巧記一下: a.清屏:cls; 例如:C:\ >cls,然後按回車鍵。 b.切換盤符:: ...
  • 1 CRM項目外觀 1 CRM項目外觀 1. 開發環境 IDE: Eclipse Mars2 Jdk: 1.7 資料庫: MySQL 2. 創建資料庫 資料庫sql文件位置如下圖: 創建crm資料庫,執行sql 效果如下圖: 3. 工程搭建 使用的Bootstrap前端框架,官方網站 http:// ...
  • 題目: 逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表達式的優點是 運算符之間不必有優先順序關係,也不必用括弧改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭 表達式的值,其中運算符包括+ - * / ...
  • 前言 JVM在準備面試的時候就有看了,一直沒時間寫筆記。現在到了一家公司實習,閑的時候就寫寫,刷刷JVM博客,刷刷電子書。 學習JVM的目的也很簡單: 能夠知道JVM是什麼,為我們幹了什麼,具體是怎麼乾的。能夠理解到一些初學時不懂的東西 在面試的時候有談資 能裝逼 一、簡單聊聊JVM 1.1先來看看 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...