SpringBoot + thymeleaf 實現(xiàn)讀取視頻列表并播放視頻功能
通過讀取數(shù)據(jù)庫video表獲取當前視頻的視頻名、視頻地址,展示至前端頁面videorecord.html,通過點擊播放按鈕獲取數(shù)據(jù)id進而得到所選視頻地址,跳轉(zhuǎn)播放視頻顯示頁videoshow.html,播放所選視頻。當然本案例只是為了展示主要的一些功能,其他比如跳轉(zhuǎn)、頁面布局美化等可以自行進行更改。
效果
Springboot播放視頻
實現(xiàn)過程
后端程序示例
1. Controller層示例
返回數(shù)據(jù)庫數(shù)據(jù)時,使用了pagehelp當中的PageInfo,為了后期擴展分頁功能,正常寫法返回值類型應為實體類Video.
package com.dvms.controller; /* *文件名: VideoController *創(chuàng)建者: CJW *創(chuàng)建時間:2022/4/14 16:40 *描述: TODO */ import com.dvms.entity.Video; import com.dvms.service.ParamoduleService; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class VideoController { @Autowired private ParamoduleService paramoduleService; //查出記錄 @RequestMapping("/angle/findvideoRecord") public String findvideorecords(Model model){ System.out.println(paramoduleService.findvideorecord()); PageInfo<Video> videoRecord = new PageInfo<>(paramoduleService.findvideorecord()); model.addAttribute("videorecord", videoRecord); return "angle/videorecord"; } // 查出視頻地址 @RequestMapping("/angle/findvideo") public String findvideo(String id, String filenamev, Model model){ System.out.println(id); String videopath = paramoduleService.findvideo(id); System.out.println(videopath); model.addAttribute("videourl",videopath); model.addAttribute("videoname",filenamev); return "angle/videoshow"; }
2. Service層
package com.dvms.service; import com.dvms.entity.Record; import com.dvms.entity.Video; import java.util.List; import java.util.Map; /* *文件名: ParamoduleService *創(chuàng)建者: CJW *創(chuàng)建時間:2022/1/15 10:54 *描述: TODO */ public interface ParamoduleService { String findvideo(String id); List<Video> findvideorecord(); }
3. ServiceImpl層
package com.dvms.service.Impl; import com.dvms.dao.ParamoduleDao; import com.dvms.entity.Record; import com.dvms.entity.Video; import com.dvms.service.ParamoduleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /* *文件名: ParamoduleServiceImpl *創(chuàng)建者: CJW *創(chuàng)建時間:2022/1/15 10:55 *描述: TODO */ @Service public class ParamoduleServiceImpl implements ParamoduleService { @Autowired private ParamoduleDao paramoduleDao; //查出視頻文件地址 @Override public String findvideo(String id){ return paramoduleDao.findvideo(id); } //查出視頻記錄 @Override public List<Video> findvideorecord(){ return paramoduleDao.findvideorecord(); } }
4. dao(mapper)層
package com.dvms.dao; import com.dvms.entity.Record; import com.dvms.entity.Video; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; /* *文件名: ParamoduleDao *創(chuàng)建者: CJW *創(chuàng)建時間:2022/1/15 10:52 *描述: TODO */ @Repository public interface ParamoduleDao { String findvideo(String id); List<Video> findvideorecord(); }
4. entity(pojo)層
package com.dvms.entity; /* *文件名: Video *創(chuàng)建者: CJW *創(chuàng)建時間:2022/4/14 16:17 *描述: TODO */ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Accessors; @Data @ToString @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) //鏈式調(diào)用 public class Video { private String id; private String filename; private String filepath; }
5. daoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dvms.dao.ParamoduleDao"> <!--查詢存在視頻--> <select id="findvideo" resultType="String"> select filepath from video where id=#{id} </select> <!--查詢存在視頻記錄--> <select id="findvideorecord" resultType="Video"> select id,filename,filepath from video </select> </mapper>
6. video數(shù)據(jù)庫表結(jié)構(gòu)
前端程序示例
前端需引入thymeleaf、bootstrap等
1. videorecord.html
<div class="main col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <!-- MAIN CONTENT --> <div class="main-content"> <div class="container-fluid"> <h3 class="page-title">視頻管理</h3> <div class="row"> <div class="col-md-15"> <!-- BASIC TABLE --> <div class="panel"> <div class="panel-heading"> <div><h3 class="panel-title" style="color: #0f0f0f">視頻記錄</h3></div> <!--<hr style="color: #6ecadc">--> </div> <div class="panel-body"> <table class="table table-bordered table-sm table-hover"> <tr class="table_header" style="background-color: #009bc8;color: #0f0f0f"> <td hidden> ID </td> <td class="text-center"> 視頻文件名 </td> <td class="text-center"> 操作 </td> </tr> <tr th:class="${rowstate.odd}?'row1':'row2'" th:each="video,rowstate:${videorecord.list}"> <td hidden> <span th:text="${video.id}"></span> </td> <td class="text-center"> <span th:text="${video.filename}"></span> </td> <td class="text-center"> <a type="button" class="btn btn-info btn-xs" th:href="@{/angle/findvideo(id=${video.id},filenamev=${video.filename})}" rel="external nofollow" >播放</a> <a type="button" class="btn btn-info btn-xs" th:href="@{/angle/findvideo(id=${video.id})}" rel="external nofollow" >下載</a> </td> </tr> </table> <div class="modal-footer no-margin-top"> </div> </div> </div> <!-- END CONDENSED TABLE --> </div> </div> </div> </div> <!-- END MAIN CONTENT --> </div>
2. videoshow.html
<div class="main col-md-9 ml-sm-auto col-lg-10 pt-3 px-4"> <!-- MAIN CONTENT --> <div class="main-content"> <div class="container-fluid"> <h3 class="page-title">播放視頻示例</h3> <div class="panel"> <div class="panel-body"> <div class="dropdown" > <a ><span>當前播放視頻:</span><span style="color: #0f0f0f" th:text="${videoname}"></span></a> </div> </div> </div> <div class="col-md-15"> <!-- BASIC TABLE --> <div class="panel"> <div class="panel-heading"> <div class="panel-body"> <table class="table table-sm table-hover"> <tr style="background-color: #FEFFFD;color: #FEFFFD"> <td> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX </td> <td style="text-align: center"> <!--<img th:src="${imageurl}">--> <video align="center"width="800" height="550" controls> <source th:src="${videourl}" type="video/mp4"> 您的瀏覽器不支持 HTML5 video 標簽。 </video> </td> <td> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX </td> </tr> </table> <div class="modal-footer no-margin-top"> </div> <div> </div> </div> </div> </div> </div> </div> </div> <!-- END MAIN CONTENT --> </div>
到此這篇關(guān)于SpringBoot + thymeleaf 實現(xiàn)讀取視頻列表并播放視頻的文章就介紹到這了,更多相關(guān)SpringBoot thymeleaf 視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- jquery+ajaxform+springboot控件實現(xiàn)數(shù)據(jù)更新功能
- SpringBoot解決ajax跨域問題的方法
- Springboot解決ajax+自定義headers的跨域請求問題
- SpringBoot基于Shiro處理ajax請求代碼實例
- SpringBoot結(jié)合Ajax實現(xiàn)登錄頁面實例
- AJAX?SpringBoot?前后端數(shù)據(jù)交互的項目實現(xiàn)
- SpringBoot+Hutool+thymeleaf完成導出Excel的實現(xiàn)方法
- springboot如何使用thymeleaf完成頁面緩存
- SpringBoot+Thymeleaf+ECharts實現(xiàn)大數(shù)據(jù)可視化(基礎篇)
- 在SpringBoot中配置Thymeleaf的模板路徑方式
- SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情
相關(guān)文章
從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率
這篇文章主要介紹了從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12SpringBoot測試配置屬性與web啟動環(huán)境超詳細圖解
Web開發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來非常簡潔,大部分配置都有SpringBoot自動裝配,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-10-10Spring動態(tài)加載bean后調(diào)用實現(xiàn)方法解析
這篇文章主要介紹了Spring動態(tài)加載bean后調(diào)用實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08