由於最近半年一直在用springboot,但是也不能忘了本,於是把springmvc重新練了下,做了個前端傳個表單,後臺接收並顯示的界面,該項目可以上傳視頻的URL,然後前端進行頁面的播放,項目採用springmvc+spring+mybatis,前端是用jquery.功能很簡單,前端一個form表單,提交後臺,後臺添加數據,並且將數據轉發到前端進行顯示。後臺將entity,service,serviceimpl,controller,全部用marven進行關聯,分模塊開發。
項目中幾個重要知識點:
1.文件上傳
2.2張表在不關聯的情況下,用inner join連表查詢
3.分頁查詢
4.log日誌使用
5.模塊之間的聯繫,思想概述
項目的結構
1.文件上傳
(一):首先在resources目錄下新建springmvc.xml,在裏面加入
<!-- 支持上傳文件 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
前端上傳文件頁面
<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;
}
}
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.分頁查詢
在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>
4.Spring整合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);
5.模塊之間的聯繫,思想概述
前後端一體的springmvc,我們以前都會搭建在一個項目,這次把entity,dao,service,serviceimpl,controller分成了模塊進行開發,每個模塊用marven進行關聯。這樣做的好處就是代碼整潔清晰,每個層面都是個小的項目,適合分模塊進行開發。
演示效果(一)
演示效果(二)
演示效果(三)
視頻網站開發demo下載 密碼是sfze
關注我的公衆號,都是滿滿的乾貨!