由于最近半年一直在用springboot,但是也不能忘了本,于是把springmvc重新练了下,做了个前端传个表单,后台接收并显示的界面,该项目可以上传视频的URL,然后前端进行页面的播放,项目采用springmvc+spring+mybatis,前端是用jquery.功能很简单,前端一个form表单,提交后台,后台添加数据,并且将数据转发到前端进行显示。后台将entity,service,serviceimpl,controller,全部用marven进行关联,分模块开发。
项目中几个重要知识点:
1.文件上传
2.2张表在不关联的情况下,用inner join连表查询
3.分页查询
4.log日志使用
5.模块之间的联系,思想概述

项目的结构

 
Image.png

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进行关联。这样做的好处就是代码整洁清晰,每个层面都是个小的项目,适合分模块进行开发。

演示效果(一)

 
image.png

演示效果(二)

 
image.png

演示效果(三)

 
image.png

要下载demo,请点击原文链接

http://www.jianshu.com/p/9eec63121cef


关注我的公众号,都是满满的干货!

1小时轻松上手springmvc,视频网站后台开发的更多相关文章

  1. JavaWeb网站后台开发记录手册

    1.javaweb网站后台开发 1.封装DBTools类 1.注册数据库驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); 2 ...

  2. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之知识点记录

    前言:使用PHP和MySQL开发后台管理系统的过程中,发现有一些通用的[套路小Tip],这里集中记录一下.结合工作中ing的后台业务,我逐渐体会到:除了技术知识外.能使用户体验好的“使用流程设计”积累 ...

  3. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之功能实现

    前言:前一篇温习了网站开发需要掌握的基础知识,这一篇重点梳理一下各个功能模块的[详细设计与实现].项目github地址:https://github.com/66Web/php_book_store, ...

  4. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之项目设计

    前言:这个项目是毕设时候做的,我负责后台数据操作部分,已经很久了,这次回顾这部分,是为了复习PHP和MySQL的知识,正好现在在公司也负责的是后台管理系统的业务.第一篇[项目概况]附上毕业论文部分节选 ...

  5. 做php网站后台开发,在Linux系统上进行更好吗?

    1. PHP是开源软件,它在bsd/linux/win下都有很好的正式版及孪生版.并非开发php就必须要在linux下进行.主机服务商们习惯性的把asp与php分为两个主机系列几进行销售.由于asp只 ...

  6. 做php网站后台开发,在Linux系统上进行更好吗?【转载】

    1. PHP是开源软件,它在bsd/linux/win下都有很好的正式版及孪生版.并非开发php就必须要在linux下进行.主机服务商们习惯性的把asp与php分为两个主机系列几进行销售.由于asp只 ...

  7. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之基础知识

    前言: 在具体回顾每一个功能的实现前,还是有必要先温习一些项目涉及到的PHP.MySQL[语法基础].项目github地址:https://github.com/66Web/php_book_stor ...

  8. 【原创】基于NodeJS Express框架开发的一个VIP视频网站项目及源码分享

    项目名称:视频网站项目 开发语言:HTML,CSS(前端),JavaScript,NODEJS(expres)(后台) 数据库:MySQL 开发环境:Win7,Webstorm 上线部署环境:Linu ...

  9. 转战网站后台与python

    这么长时间了,迷茫的大雾也逐渐散去,正如标题所写的一样,转战网站后台开发.这段时间没怎么写博客,主要还是太忙,忙着期末考试的预习,以及服务器的搭建,python的学习,还有各种各样杂七杂八的小事,就像 ...

随机推荐

  1. STL源码剖析(仿函数/bind2nd)

    仿函数(functors)其实就是重载了operator()的对象. 下面简单先看看它的一个例子: #include <iostream> using namespace std; tem ...

  2. 【Python】学习笔记十一:文件I/O

    文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 1.打开文件 语法: open(name[, mode[, buffering]]) 1.1文件模式 1 ...

  3. Java 内存区域和GC机制(转载)

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  4. c++ builder xe2 debug正常 release崩溃 解决一例

    今天修改了以前一个项目的代码,是一个exe程序  C++ builder xe2 编译.以前都是好的.今天改了一下版本号 编译了一下,居然不能用了.直接崩溃 提示内存非法访问.而且显然还没有进入Win ...

  5. ubuntu系统安装nginx出现的错误(依赖环境没有安装完)

    报错信息: error: the HTTP image filter module requires the GD library. 编译参数:(或源安装) ./configure --prefix= ...

  6. mysql操作索引的sql语句

    创建索引 一:唯一索引alter table table_name add unique index_name(column_list); 例如:alter table users_game_task ...

  7. DDR3内存详解,存储器结构+时序+初始化过程

    DDR3内存详解,存储器结构+时序+初始化过程 标签: DDR3存储器博客 2017-06-17 16:10 1943人阅读 评论(1) 收藏 举报  分类: 硬件开发基础(2)  转自:http:/ ...

  8. [k8s]k8s架构图解

    k8s架构图解 启动参数及证书梳理 master端必须要装flannel 注: flannel网络能确保各节点间 Pod 网段实现互通 master 节点与 node 节点上的 Pods 通过 Pod ...

  9. 【Objective-C】05-第一个OC的类

    OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 一.语法简介 1.类 在Java中,我们用1个.java文件就可以描述清楚一个类:在OC中, ...

  10. 关于Tensorflow 的数据读取环节

    Tensorflow读取数据的一般方式有下面3种: preloaded直接创建变量:在tensorflow定义图的过程中,创建常量或变量来存储数据 feed:在运行程序时,通过feed_dict传入数 ...