1小时轻松上手springmvc,视频网站后台开发

简介: 由于最近半年一直在用springboot,但是也不能忘了本,于是把springmvc重新练了下,做了个前端传个表单,后台接收并显示的界面,该项目可以上传视频的URL,然后前端进行页面的播放,项目采用springmvc+spring+mybatis,前端是用jquery.功能很简单,前端一个form表单,提交后台,后台添加数据,并且将数据转发到前端进行显示。

由于最近半年一直在用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下载 密码是sfze
关注我的公众号,都是满满的干货!

孙坚.gif
目录
相关文章
|
前端开发 Java Spring
为什么会出现Request method ‘GET‘ not supported`
为什么会出现Request method ‘GET‘ not supported`
4190 1
|
1天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
3天前
|
云安全 监控 安全
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1061 5
|
10天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
710 42
|
14天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1143 41
|
14天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
878 72
大厂CIO独家分享:AI如何重塑开发者未来十年
|
10天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
528 31
|
17天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
977 59
Meta SAM3开源:让图像分割,听懂你的话

热门文章

最新文章