Po: persistent object:该包中放javabean, 这些bean的作用是对应数据库表的信息。所以建立bean时注意一定要和表对应,类名和表名对应、属性名和字段名对应。 DAO: data access object: 该包中的类主要针对数据库的直接操作。
Service: 业务逻辑层 Servlet:
vo: value object(主要作用是在各层之间传值), view object: 作用就是为了方便jsp中显示数据。UserInfo: (User:姓:张,名:三 ,util: 包括本项目中用到的工具类
视频网站包结构:
项目人员组织情况(公司基本结构):
UserInfo:名字)
--------------------------------------------------------------------------------------------------------------------------------------
一个简单功能模块编码顺序: 原则:先写核心框架,再写细节 1. 建表:user 2. 建po: User
3. 建dao: UserDao。(写好方法,一定要测试。通过以后再往下写) 4. 建JSP,写表单
5. 建serlvet。收集表单提交的数据到javabean对象中,然后调用dao的方法。 6. 测试整个流程。
7. 增加一个js验证。(封装一个通用的js验证方法)
-------------------------------------------------------------------------------------------------------- 上午的任务:
1. 利用ajax技术(dwr)实现用户名唯一性的验证
a) 针对数据库查询在userDao中写一个方法:
public static int isOnlyUser(String uname) b) 通过dwr框架来调用该方法。
2. 验证码
3. 登录和退出系统(增加密码的加密处理) 4. 服务器端增加验证(有兴趣的可以做做)
a) 将我们用js写的通用验证方法,用java实现。从而实现整个注册系统的后台验证。 下午的任务: 1. 过滤器
a) 实现中文问题的处理 b) 实现一个简单的权限管理 2. 监听器
a) 做一个有关登录人数和在线人数的统计
上午任务:
1. 上传文件处理
2. 带进度条的文件上传处理 下午任务:
1. 建立video表,将上传视频插入表中。
a) 建立video表
CREATE TABLE `video` (
`id` int(11) NOT NULL auto_increment, `vname` varchar(50) default NULL, `vlabel` varchar(50) default NULL, `vdescpt` mediumtext, `vcount` int(10) default '0', `userId` int(11) default NULL, `uploadTime` timestamp NULL default NULL on update CURRENT_TIMESTAMP,
`vpath` varchar(100) default NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk; b) 建立po c) 建立dao
d) 上传和插入数据库的流程:
Upload_pro.jspuploadProAction(执行上传)upload_info.jsp(包含视频信息表单:vname,vlabel,vdespct)InserVideoActionupload_ok.jsp
2. videos.jsp: 将video表中所有视频以列表的形式展现在页面中(无需分页)
a) 为了显示方便,建立VideoInfo类。
b) 在dao中增加方法,返回包含videoInfo对象的List
c) 在videos.jsp中使用jstl的foreach标签将视频信息按要求显示。 -----------------------------------
3. 点击videos.jsp中视频名称可以转到display.jsp页面实现播放。
a) 在视频名称处增加超链接,传递视频的id到display.jsp页面。
4. display.jsp中,将播放视频的信息显示出来。(参考play.html静态页面的效果)
a) 根据从外部传来的参数:id,去数据库中将该id对应的视频记录查出,并放入相
应作用域,从而便于在jsp页面中显示
今日任务:
1. 上午:分页技术实现。实现视频列表的分页处理
a) 为什么需要分页?
如果数据过多。不进行分页的话,对于用户来说,一页中显示的数据过多,无法自由控制和读取。
对于服务器端程序和网络来说,一次取过多数据,占用过多资源。 b) 实现分页。
c) 做完课堂练习后,针对user表将所有用户列出,做一个分页处理。每个用户包含
如下信息:
用户名,性别(男,女), email, ip, 创建时间,上传的视频数目.(搞一个UserInfo封装以下数据)
2. 下午:评论的处理,并增加ajax分页处理
------------------------------------------------------------------------------------------------------------------------------------
今日任务和周末任务:
评论的插入操作: 1. 建表:comment 2. 增加po,dao类
3. 在页面中使用DWR框架实现方法调用以及js类和javabean数据的转换。
a) 细节1:防止用户恶意反复提交 i. 使用验证码(推荐使用) ii. 使用js中表单域属性disabled(点击按钮完毕后,将按钮disabled=true,5
秒后,将按钮恢复) btn.disabled=true; $(\"cmtTxt\").value=\"\"; setTimeout(function(){ btn.disabled=false; },5000);
iii. 使用js,将本次提交内容和上次内容进行比较,如果一致则不能提交。 b) 细节2:DWR和jquery/我们自己的框架的选取: i. 如果需要直接调用后台的某个方法,毫无疑问,选用DWR最方便 ii. 如果需要直接请求某个JSP/SERVLET,使用jquery/我们自己的框架最方便 评论列表的显示处理:
1. 提交完成后。将所有评论全部重新从数据库中取出,用ajax实现一个局部刷新。
该思路:可以将该视频现在所有的评论列出,较精确。但是,其他很多评论客户端已经有了,这样做传送了很多重复数据。
2. 提交完成,实现插入操作。并不去服务器端取出最新数据,而是直接将用户写
的评论用js插入到网页中。该思路的优势和劣势跟1正好相反。 3. 增加FCKEditor在线编辑器功能。 4. 增加ajax分页。
周末作业:
1. 基于ajax的在线聊天室。
2. 聊天机制:
a) 采用轮询机制。每隔3秒到服务器端查询一次(dwr和
window.setInterval(test,3000)),如果有关于该用户的新的聊天记录,则传给客户端。 b) 进入聊天室的用户列表的处理:
将这些用户对象放入application作用域中一个List属性。定时查看有没有新的用户加入。
2. 在评论列表基础上实现基于ajax的聊天室:
1. 数据保存到数据库中:id, sendId, recieiverId, sendName,
receiverName,content,createTime。(仅用练习,不推荐)
2. 数据保存到内存中(推荐做法)
可以在application对象中维护一个List,list中放置javabean(sendId, recieiverId, sendName, receiverName,content).
list.remove(), list.removeAll(Collection). 可以利用该方法实现轻量级的List维护。
------------------------------------------------------------------------------------------------------------------------------------------------------- 今日任务:
1. 增加channel表
CREATE TABLE `channel` (
`cid` int(11) NOT NULL auto_increment, `cname` varchar(100) default NULL, `clabel` varchar(100) default NULL, `imgpath` varchar(100) default NULL, PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
INSERT INTO `channel` VALUES (1,'搞笑','爆笑 恶搞 搞笑','channel01.gif'); INSERT INTO `channel` VALUES (2,'自拍','自拍 生活 美女','channel02.gif'); INSERT INTO `channel` VALUES (3,'影视','电影 连续剧 动画片','channel03.gif'); INSERT INTO `channel` VALUES (4,'音乐','mp3 MTV CCTV','channel04.gif'); INSERT INTO `channel` VALUES (5,'体育','足球 篮球 羽毛球','channel05.gif'); INSERT INTO `channel` VALUES (6,'动漫','动画 动漫','channel06.gif');
INSERT INTO `channel` VALUES (7,'动物','动物 魔兽 生物','channel07.gif'); INSERT INTO `channel` VALUES (8,'社会','大众 人民 百姓','channel08.gif');
INSERT INTO `channel` VALUES (9,'教育','英语 计算机 社会\\r\\n','channel09.gif'); INSERT INTO `channel` VALUES (10,'生活','厨艺 美食 生活\\r\\n','channel10.gif'); INSERT INTO `channel` VALUES (11,'探索','古堡 沙漠 森林\\r\\n','channel11.gif'); INSERT INTO `channel` VALUES (12,'游戏','CS 魔兽 星际争霸\\r\\n','channel12.gif'); INSERT INTO `channel` VALUES (13,'汽车','概念车 MPV 卡丁车\\r\\n','channel13.gif'); INSERT INTO `channel` VALUES (14,'旅游','西藏 天池 西湖\\r\\n','channel14.gif'); INSERT INTO `channel` VALUES (15,'广告','经典 审查 神采\\r\\n','channel15.gif'); INSERT INTO `channel` VALUES (16,'其他','美女 车模 标准','channel16.gif'); INSERT INTO `channel` VALUES (17,'奥运','北京 奥运 2008','channel16.gif'); 2. 在video中增加cid字段,并且将已有数据的cid改为1-17中的随机数。
UPDATE video set cid=rand()*17+1;
3. 修改video表对应的po,dao.
4. 在上传部分的填写视频数据中增加一个下拉列表,让用户选择视频频道。(同时还需要修
改dao)自己做
5. 增加channel.jsp页面,使用 6. 增加channelSearch.jsp页面。(当点击:channel.jsp中的频道名称时进入该页面,列出 该频道中的视频信息,并增加分页) 自己搞定 7. 搞定index.jsp主页左部分。这部分关键点在于数据的封装。难点在于:循环嵌套,页面 元素的处理。 今日任务: 视频的处理流程: 1. 用户上传视频文件 2. 将视频相关数据插入数据库。 3. 视频转码,将上传的视频文件统一转码为flv,抽帧一张图片。 4. 用户发布自己的视频,共享和私有。共享以后,可以让超级管理员看到。 5. 超级管理员审核视频。通过,则网站其他用户可以看到。不通过,则该视频不可见。 视频表中增加state: 0:未转码 1:转码成功 2.转码失败 3.私有 4.共享 5.管理员审核通过 6.管理员审核不通过 视频管理部分: 视频的批量删除: 1. 通过delete语句删除。(不推荐) Delete from video where id in (1,2,3,4); 2. 逻辑删除。(推荐) update video set isdel=1 where id in (1,2,3,4); 权限管理: 1. 尽量只暴露用户能进行的操作。 2. 将某一类权限操作置入同一个目录下,便于管理。 3. 通过过滤器来实现操作过滤。 注:用户的权限,一般通过一个字段的值来区别(比如:我们user表中的grade字段。0:普通用户;1:超级管理员)。 今日任务: 1. 增加普通用户的后台管理部分 a) 树状菜单的实现原理 b) Ajax中tab效果的实现 2. 监听器 3. FCKEditor在线编辑器 4. 数据库连接池 因篇幅问题不能全部显示,请点此查看更多更全内容