我的项目---聊天室(JSP+Servlet+javabean)

github地址:https://github.com/stubbornA/chatroom

项目功能:

1.全屏/退出全屏
2.登录,退出登录
3.注册
4.选择聊天室
5.查看聊天室记录,查看聊天室成员
6.发布聊天信息

项目完成过程:

1.完成前端界面
这里写图片描述
技术:html+css+javascript+jquery+bootstrap
描述:其中,背景使用了html5的canvas画布,整个排版布局使用Boorstrap的网格系统,做为响应式设计。再修饰方面,使用css3的扩展属性:border-shaow等。
2.完成数据库设计
这里写图片描述
技术:mysql
描述:设计了三个表,值得注意的是,表的主键和表与表之间的外键关系关系。

3.完成java后台代码

这里写图片描述
项目结构图:
这里写图片描述
项目描述:
数据库用的Mysql,用jdbc进行数据库连接,dao层是用来写sql语句操作数据库的,service层是功能业务层调用dao层,Servlet做核心控制引导。最终用jsp做前端展示页。另外使用了编码过滤器,对编码进行过滤。

4.项目结果图展示

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

5.项目收获

在开发项目的过程中,遇到了很多问题,比如聊天内容的显示要在7天范围之内,所以我们在进行查询的时候要做日期判断。

    public List<ChatContent> queryAllContentByTid(int id) {
        String sql="select * from chatcontent where tid=? order by date asc";
        ResultSet rs=null;
        List<ChatContent> list=new ArrayList<>();
        try {
            PreparedStatement ps=connection.prepareStatement(sql);
            ps.setInt(1,id);
            rs=ps.executeQuery();
            ChatContent chatContent;
            while (rs.next()){
                chatContent=new ChatContent(rs.getInt("cid"),rs.getString("content"),rs.getInt("tid"),
                        rs.getInt("uid"),rs.getString("uname"),rs.getTimestamp("date"));
                System.out.println(chatContent.getDate());
                Timestamp now=new Timestamp(System.currentTimeMillis());
                long t=now.getTime()-chatContent.getDate().getTime();
                if(t/1000<=(long)3600*24*7) {
                    list.add(chatContent);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

还有在存储数据库日期的时候,日期显示不全,解决的方案是:
在数据库中插入带时分秒的时间需要用Timestamp。
1.数据库字段设置为timestamp类型

CREATE TABLE `chatcontent` (
    `cid` INT(11) NOT NULL AUTO_INCREMENT,
    `content` VARCHAR(200) NOT NULL COLLATE 'utf8_bin',
    `tid` INT(11) NOT NULL,
    `uid` INT(11) NOT NULL,
    `uname` VARCHAR(20) NOT NULL,
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`cid`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=51
;

2.vo层字段映射到java对象的属性,类型对应为Timestamp

private Timestamp date;

3.controll控制层设置时间,采用如下方法

chatContent.setDate(new Timestamp(System.currentTimeMillis()));

4.表现层,如果用jstl取值,方法如下:

<%@taglib prefix="df" uri="http://java.sun.com/jsp/jstl/fmt" %>
<df:formatDate value="${content.getDate()}" pattern="yyyy-MM-dd hh:mm:ss"></df:formatDate>

猜你喜欢

转载自blog.csdn.net/stubbornaccepted/article/details/79740083