原創 2017-12-21 zhuyuansj zhuyuansj
每日推薦
快速熟悉springmvc的方法
本文作者
作者:zhuyuansj
連接配接:http://www.jianshu.com/p/9eec63121cef
本文由作者授權釋出
1
前言
由于最近半年一直在用springboot,但是也不能忘了本,于是把springmvc重新練了下,做了個前端傳個表單,背景接收并顯示的界面,該項目可以上傳視訊的URL,然後前端進行頁面的播放,項目采用springmvc+spring+mybatis,前端是用jquery.功能很簡單,前端一個form表單,送出背景,背景添加資料,并且将資料轉發到前端進行顯示。背景将entity,service,serviceimpl,controller,全部用marven進行關聯,分子產品開發。
2
項目中幾個重要知識點
1.檔案上傳
2.2張表在不關聯的情況下,用inner join連表查詢
3.分頁查詢
4.log日志使用
5.子產品之間的聯系,思想概述
3
項目的結構
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5SOl5WezJTO4g3YvwlNyATN2EjMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
3.1檔案上傳
(一):首先在resources目錄下建立springmvc.xml,在裡面加入
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加視訊資源</title> </head> <body> <center> <h1>視訊背景添加視訊資源</h1> <form action="addVideo" style="font-size: 14px;" method="post" ENCTYPE="multipart/form-data"> <table> <tr> <td>視訊名稱:</td> <td><input type="text" name=videoName></td> </tr> <tr> <td>視訊類型:</td> <td><select name="videoTypeId" style="width: 170px;"> <c:forEach items="${listVideoType}" var="p"> <option value="${p.id}">${p.typeName}</option> </c:forEach> </select></td> </tr> <tr> <td>優酷播放URL:</td> <td><textarea rows="10" cols="30" name="videoHtml"></textarea></td> </tr> <tr> <td>上傳封面:</td> <td><input type="file" name="file"></td> </tr> <tr> <td colspan="2"><input type="submit" value="送出"></td></tr> </table> </form> </center> </body> </html> |
---|
複制
背景上傳檔案接口
@RequestMapping("/addVideo") public String addVideo(@RequestParam(value = "file", required = false) MultipartFile file, VideoInfo videoInfo, HttpServletRequest req, HttpServletResponse res) {//這裡的required=false,意思是不傳參也可以 try { // 擷取目前上下文 String path = req.getSession().getServletContext().getRealPath("/static/imgs"); // 檔案名稱 String newName = System.currentTimeMillis() + ".png"; File targetFile = new File(path, newName); // 檔案夾不存在,則建立檔案夾 if (!targetFile.exists()) { targetFile.mkdirs(); } // 儲存 try { file.transferTo(targetFile); } catch (Exception e) { log.error(e); } videoInfo.setVideoUrl(newName); videoInfoService.addVideoInfo(videoInfo); req.setAttribute("result", "封面上傳成功!"); return "redirect:/videoManag"; } catch (Exception e) { log.error(e); req.setAttribute("result", "上傳失敗!"); return LOCAVIDEO; } } |
---|
3.2關聯表的查詢
select a.id as id,a.video_name as videoName, a.video_html as videoHtml ,a.video_url as videoUrl, a.video_del as videoDel , b.type_name as typeName from video_info as a inner join video_type as b on a.video_type_id=b.id; |
---|
3.3分頁查詢
在resource目錄下建立mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置分頁插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 設定資料庫類型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種資料庫--> <property name="dialect" value="mysql"/> </plugin> </plugins> </configuration> |
---|
applicationContext-dao.xml加載mybatis-config.xml
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射檔案 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自動掃描mapping.xml檔案 --> <property name="mapperLocations" value="classpath:mappings/*.xml"></property> <property name="configLocation" value="classpath:spring/mybatis-config.xml" /> </bean> |
---|
java代碼使用
@RequestMapping("/indexVideo") public String indexVideo(HttpServletRequest request, int pageIndex) { Page page = PageHelper.startPage(pageIndex, 2); request.setAttribute("listVideo", videoInfoService.getVoideAll(null)); request.setAttribute("pageSize", page.getPages()); return INDEXVIDEO; } |
---|
前端代碼
<a style="font-size: 20px;" href="indexVideo?pageIndex=1">首頁</a> <c:forEach begin="1" end="${pageSize}" var="p"> <a style="font-size: 20px;" href="indexVideo?pageIndex=${p}">${p}</a> </c:forEach> <a style="font-size: 20px;" href="indexVideo?pageIndex=${pageSize}">尾頁</a> |
---|
3.4Spring整合log4j
建立log4j.properties,在resources/properties下建立log4j.properties檔案
### set log levels ### log4j.rootLogger =INFO,DEBUG, stdout , R log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = E://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =E://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n |
---|
web.xml加載 log4j.properties
<!--設定log4j的配置檔案位置 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/properties/log4j.properties</param-value> </context-param> <!--使用監聽加載log4j的配置檔案 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> |
---|
使用API
private static Logger log = Logger.getLogger(TestController.class);
複制
3.5子產品之間的聯系,思想概述
前後端一體的springmvc,我們以前都會搭建在一個項目,這次把entity,dao,service,serviceimpl,controller分成了子產品進行開發,每個子產品用marven進行關聯。這樣做的好處就是代碼整潔清晰,每個層面都是個小的項目,适合分子產品進行開發。
4
大功告成