第三个功能:教师上传视频文件+主页推荐视频+视频播放页面
目录接上:https://blog.csdn.net/ignite_/article/details/90489821
新增数据表:
新增实体类:
Course(课程表)
package Domain;
public class Course {
private String id;
private String course_path;
private String create_userid;
private String course_name;
private String course_describe;
private String first_image;
private String course_type;
private String course_Ttype;
private String course_time;
@Override
public String toString() {
return "Course{" +
"id='" + id + '\'' +
", course_path='" + course_path + '\'' +
", create_userid='" + create_userid + '\'' +
", course_name='" + course_name + '\'' +
", course_describe='" + course_describe + '\'' +
", first_image='" + first_image + '\'' +
", course_type='" + course_type + '\'' +
", course_Ttype='" + course_Ttype + '\'' +
", course_time='" + course_time + '\'' +
", create_time='" + create_time + '\'' +
'}';
}
public void setCourse_time(String course_time) {
this.course_time = course_time;
}
public String getCourse_time() {
return course_time;
}
public String getCourse_Ttype() {
return course_Ttype;
}
public void setCourse_Ttype(String course_Ttype) {
this.course_Ttype = course_Ttype;
}
private String create_time;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCourse_path() {
return course_path;
}
public void setCourse_path(String course_path) {
this.course_path = course_path;
}
public String getCreate_userid() {
return create_userid;
}
public void setCreate_userid(String create_userid) {
this.create_userid = create_userid;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getCourse_describe() {
return course_describe;
}
public void setCourse_describe(String course_describe) {
this.course_describe = course_describe;
}
public String getFirst_image() {
return first_image;
}
public void setFirst_image(String first_image) {
this.first_image = first_image;
}
public String getCourse_type() {
return course_type;
}
public void setCourse_type(String course_type) {
this.course_type = course_type;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
}
CourseJson(存储Course+部分User)
package Domain.json;
import Domain.Course;
public class CourseJson {
Course course = new Course();
private String user_id;
private String nickname;
private String picture;
@Override
public String toString() {
return "CourseJson{" +
"course=" + course +
", user_id='" + user_id + '\'' +
", nickname='" + nickname + '\'' +
", picture='" + picture + '\'' +
'}';
}
public Course getCourse() {
return course;
}
public String getUser_id() {
return user_id;
}
public String getNickname() {
return nickname;
}
public String getPicture() {
return picture;
}
public void setCourse(Course course) {
this.course = course;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public void setPicture(String picture) {
this.picture = picture;
}
}
新增CourseDao
CourseDaoImpl:
package Dao.Impl;
import Dao.CourseDao;
import Domain.Course;
import Utils.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class CourseDaoImpl implements CourseDao {
QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
@Override
public boolean insert(Course course) throws SQLException {
String sql ="insert into course values(?,?,?,?,?,?,?,?,?)";
int update = queryRunner.update(sql,
course.getId(),
course.getCourse_path(),
course.getCreate_userid(),
course.getCourse_name(),
course.getCourse_describe(),
course.getFirst_image(),
course.getCourse_type(),
course.getCourse_Ttype(),
course.getCreate_time());
if (update>0){
return true;
}
return false;
}
@Override
public List RandSelect() throws SQLException {
String sql="SELECT *\n" +
"FROM `course`\n" +
"ORDER BY RAND() LIMIT 6";
// 待优化。。。。。
List<Course> query = queryRunner.query(sql, new BeanListHandler<Course>(Course.class));
return query;
}
@Override
public Course selectid(String id) throws SQLException {
String sql = "select * from course where id = ?";
Course query = queryRunner.query(sql, new BeanHandler<Course>(Course.class), id);
return query;
}
}
在数据库随机查找字段需要优化,方案暂时没想到…emmm
新增Service:
CourseService
package Service;
import Domain.Course;
import java.sql.SQLException;
import java.util.List;
public interface CourseService {
// 上传课程
public boolean insert(Course course) throws SQLException;
// 随机查找六个推荐视频
public List RandSelect() throws SQLException;
// 根据id查找课程
public Course selectid(String id) throws SQLException;
}
新增三个servlet
UpCourseServlet(教师上传课程):
package Servlet;
import Domain.Course;
import Service.CourseService;
import Service.Impl.CourseServiceImpl;
import Utils.CreateUUID;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@WebServlet(name = "UpCourseServlet")
public class UpCourseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gb2312");
// 设置输出
PrintWriter outprint = response.getWriter();
// 上传文件
// 设置文件目录
String webroot = this.getServletContext().getRealPath("/");
File temppath = new File(webroot + "fileuploadtemp");
String dirvideo = webroot + File.separator + "uploadvideo";
String dirimg = webroot + File.separator + "uploadimg";
// 视频目录
File pathvideo = new File(webroot + File.separator + "uploadvideo");
// 首页图片目录
File pathimg = new File(webroot + File.separator + "uploadimg");
if (!temppath.exists()) {
temppath.mkdirs();
}
if (!pathvideo.exists()) {
pathvideo.mkdirs();
}
if (!pathimg.exists()) {
pathimg.mkdirs();
}
// 设置文件类型(后期可新增文件类型)
String[] typeimg = new String[]{".jpg", ".png", ".jpeg", ".gif"};
String[] typevideo = new String[]{".mp4", ".mov", ".3gp", ".avi"};
// 创建文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024,
temppath);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(1024 * 1024 * 200);
try {
List<FileItem> fileItems = upload.parseRequest(request);
String course_name = fileItems.get(0).getString("utf-8");
String course_type = fileItems.get(1).getString("utf-8");
String course_Ttype = fileItems.get(2).getString("utf-8");
String course_describe = fileItems.get(3).getString("utf-8");
String create_userid = fileItems.get(6).getString("utf-8");
// 首页图片上传
// img上传本地
InputStream inimg = fileItems.get(4).getInputStream();
String imgname = fileItems.get(4).getName();
int indeximg = imgname.lastIndexOf(".");
// 得到图片文件后缀名
String endWithimg = imgname.substring(indeximg);
// 判断是否符合类型
boolean ImgTypeExists = Arrays.asList(typeimg).contains(endWithimg);
if (!ImgTypeExists) {
outprint.print("<script>\n" +
"alert(\"文件类型错误,只允许jpg,png,jpeg,gif\"); window.history.go(-1)" +
"</script>");
return;
}
// 教学视频上传
InputStream invideo = fileItems.get(5).getInputStream();
String videoname = fileItems.get(5).getName();
int indexvideo = videoname.lastIndexOf(".");
// 得到视频文件后缀名
String endWithvideo = videoname.substring(indexvideo);
// 判断是否符合类型
boolean VideoTypeExists = Arrays.asList(typevideo).contains(endWithvideo);
if (!VideoTypeExists) {
outprint.print("<script>\n" +
"alert(\"文件类型错误,只允许mp4,mov,3gp,avi\"); window.history.go(-1)" +
"</script>");
return;
}
// 上传图片
String newFimeNameImg = System.currentTimeMillis() + endWithimg;
// 图片上传文件到本地
FileOutputStream outimg = new FileOutputStream(new File(
dirimg + "/" + newFimeNameImg));
byte buffer[] = new byte[1024];
int len = 0;
while ((len = inimg.read(buffer)) > 0) {
outimg.write(buffer, 0, len);//写入大小
}
// 上传视频
String newFimeNamevideo = System.currentTimeMillis() + endWithvideo;
// 视频上传文件到本地
FileOutputStream outvideo = new FileOutputStream(new File(
dirvideo + "/" + newFimeNamevideo));
while ((len = invideo.read(buffer)) > 0) {
outvideo.write(buffer, 0, len);//写入大小
}
invideo.close();
inimg.close();
outvideo.close();
outimg.close();
// 写入数据库
// 封装Coursebean
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
Course course = new Course();
CreateUUID createUUID = new CreateUUID();
course.setId(createUUID.createUUID());
course.setCourse_path(newFimeNamevideo);
course.setCreate_userid(create_userid);
course.setCourse_name(course_name);
course.setCourse_describe(course_describe);
course.setFirst_image(newFimeNameImg);
course.setCourse_type(course_type);
course.setCourse_Ttype(course_Ttype);
course.setCreate_time(dateFormat.format(date));
// 创建CourseService
CourseService courseService = new CourseServiceImpl();
if(courseService.insert(course)){
outprint.print("<script>\n" +
"alert('上传成功'); window.history.go(-1);" +
"</script>");
}
else{
outprint.print("<script>\n" +
"alert('上传失败'); window.history.go(-1);" +
"</script>");
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
RandVideoJsonServlet(随机返回六个主页推荐视频)
package Servlet.json;
import Dao.UserDao;
import Domain.Course;
import Domain.User;
import Domain.json.CourseJson;
import Service.CourseService;
import Service.Impl.CourseServiceImpl;
import Service.Impl.UserServiceImpl;
import Service.UserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "RandVideoJsonServlet")
public class RandVideoJsonServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 设置输出
PrintWriter out = response.getWriter();
// 随机查找六个视频
CourseService courseService = new CourseServiceImpl();
List<Course> listCourse = null;
// 六个视频id主人
List<User> listUser = new ArrayList<User>();
List<CourseJson> listCourseJson = new ArrayList<CourseJson>();
try {
listCourse = courseService.RandSelect();
} catch (SQLException e) {
e.printStackTrace();
}
UserService userService = new UserServiceImpl();
for (int index = 0;index<listCourse.size();index++) {
try {
listUser.add(index, userService.select(listCourse.get(index).getCreate_userid()));
} catch (SQLException e) {
e.printStackTrace();
}
}
// 创建CourseJson对象
for (int index=0;index<listCourse.size();index++){
CourseJson courseJson = new CourseJson();
courseJson.setCourse(listCourse.get(index));
courseJson.setUser_id(listUser.get(index).getId());
courseJson.setNickname(listUser.get(index).getNickname());
courseJson.setPicture(listUser.get(index).getPicture());
listCourseJson.add(index,courseJson);
}
// 创建json对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("Rand",listCourseJson);
out.print(jsonObject);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
OnlyVideoJsonServlet(返回具体视频播放页面json)
package Servlet.video;
import Domain.Course;
import Domain.User;
import Domain.json.CourseJson;
import Service.CourseService;
import Service.Impl.CourseServiceImpl;
import Service.Impl.UserServiceImpl;
import Service.UserService;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
@WebServlet(name = "OnlyVideoJsonServlet")
public class OnlyVideoJsonServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 设置输出
PrintWriter out = response.getWriter();
// 获得值
String id = request.getParameter("id");
// 查找视频根据course id
CourseService courseService = new CourseServiceImpl();
Course course = new Course();
try {
course = courseService.selectid(id);
} catch (SQLException e) {
e.printStackTrace();
}
// 查找老师信息根据course create_userid
UserService userService= new UserServiceImpl();
User user = new User();
try {
user = userService.select(course.getCreate_userid());
} catch (SQLException e) {
e.printStackTrace();
}
// 存入CourseJson
CourseJson courseJson = new CourseJson();
courseJson.setCourse(course);
courseJson.setPicture(user.getPicture());
courseJson.setNickname(user.getNickname());
courseJson.setUser_id(user.getId());
// 创建json,存入courseJson
JSONObject jsonObject = new JSONObject();
jsonObject.put("videoOnly",courseJson);
out.print(jsonObject);
System.out.println(jsonObject);
}
}
前台html页面:
index.html 新增内容(显示6个推荐视频)
// 获得视频json
var jsonlength=0;
$.getJSON(
"randvideo",
function (result) {
var jsonvideo = eval(result);
// alert(jsonvideo.Rand[0].course.first_image);
if (jsonvideo.Rand[0].course.id!=null){
// 获得json长度
for(var jsonvideoL in jsonvideo.Rand){
jsonlength++;
}
// alert(jsonlength);
for (var index = 0 ; index<jsonlength;index++) {
$(".video").append("<div>" +
"<a href='video.html?id="+jsonvideo.Rand[index].course.id+"'>"+
"<img src='uploadimg/"+jsonvideo.Rand[index].course.first_image +"'>" +
"<span>"+jsonvideo.Rand[index].course.course_name+"</span></a></div>")
}
}
}
)
新增video.html(具体视频播放界面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.js"></script>
</head>
<script>
window.onload=function () {
// 获取url的id
function getQueryString(name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
var r = window.location.search.substr(1).match(reg);
if (r != null) {
return unescape(r[2]);
}
return null;
}
// 获取id
var id = getQueryString("id");
// alert(id);
$.getJSON(
"onlyvideo",
{"id":id},
function (result) {
var jsonOnly=eval(result);
$("#coursename").append(jsonOnly.videoOnly.course.course_name);
$("#coursetype").append(jsonOnly.videoOnly.course.course_type);
$("#courseTtype").append(jsonOnly.videoOnly.course.course_Ttype);
$("#coursedescribe").append(jsonOnly.videoOnly.course.course_describe);
$("#coursetime").append(jsonOnly.videoOnly.course.create_time); $("coursetime").append(jsonOnly.videoOnly.course.create_time);
$("#usernickname").append(jsonOnly.videoOnly.nickname);
$("#userpicture").attr("src","upload/"+jsonOnly.videoOnly.picture);
$("#video").attr("src","uploadvideo/"+jsonOnly.videoOnly.course.course_path);
}
)
}
</script>
<body>
<div id="all">
<span style="color:red">课程名称:</span><span id="coursename"></span>
<br>
<span style="color:red">课程一级分类:</span><span id="coursetype"></span>
<br>
<span style="color:red">课程二级分类:</span><span id="courseTtype"></span>
<br>
<span style="color:red">课程描述:</span><span id="coursedescribe"></span>
<br>
<span style="color:red">创建时间:</span><span id="coursetime"></span>
<br>
<span style="color:red">上传人昵称</span><span id="usernickname"></span>
<br>
<span style="color:red">上传人头像</span><img src="" alt="" id="userpicture" style="width: 100px;height: 100px;">
<br>
<video width="320" height="240" controls id="video">
</video>
</div>
</body>
</html>
运行效果图:
1.主页随机六个推荐视频:![在这里插入图片描述](https://img-blog.csdnimg.cn/20190525001935965.gif)
2.具体视频播放页面(暂时只准备了一个播放视频,emmmm):
3.教师上传视频