BBS系统搭建全过程
特别说明
l 所有的项目代码都托管到github上,链接如下:
https://github.com/allenhsu6/jsplearn.git
运行环境
我的服务器端和客户端都在同一台电脑上
电脑型号:macpro2017款
集成开发环境:IntelliJ IDEA(这里并没有使用eclipse)
服务器软件:tomcat9.05
客户端浏览器:chrome
这个系统的框架:
前端:
l 主要用到HTML,其中重中之重是form表单提交
l 用到CCS布局(这部分我是从网上找了一个好看的模板直接导入的,时间有限,有空的时候再去学一遍)
l 在实现分页展示功能的时候用到一点点JavaScript技术
后端:
- 数据库部分:
使用的数据库:mysql
数据库与jsp连接手段:JDBC编程
- 处理业务逻辑部分:
都是jsp技术(下个版本将做出改进,加入javabean,将数据库的常用操作封装)
功能分析及其具体设计
图1·BBS系统中的功能结构
具体模块设计
数据库设计
在数据库设计汇中,叶子节点设计,以及id号,pid号设计,为后续各种实现奠定基础。
页面跳转
页面跳转过程,所有的参数传递都是通过链接动态传输
功能0:树状展示所有主题帖
采用递归方法实现
功能2回复主题帖
关键点:在回复之后要将该贴设置为叶子结点
功能3:后台登录
实现该功能主要目的是:只有后台工作人员才能删帖,如果不登录的话,看不到帖子后面的删除功能。
实现途径:在ShowArticleTree.jsp中判断login是否为真,是的话,在html中显示;否者看不到删除二字,也就无法通过点击删除链接实现删除功能。
特别注意:无法通过点击删除链接实现删除功能,但是仍然有漏洞,因为可以通过URL****直接访问delete.jsp****页面并传入参数实现指定删除
所以:我们需要在删帖功能中,同样做是否登录判断
功能4:删帖
问题一:如何解决不是叶子节点的帖子?
answer:使用递归。具体实现:有子节点就删除子节点,然后退出while循环后删除自己 ---
问题二:如何解决当前删除的叶子节点的父节点是否要更新为叶子节点?
answer:首先要了解,父节点在删除当前节点后,是否仍有其他子节点,所以需要拿到pid;然后统计所有帖子中父节点参数为pid的节点,如果该数为0,那么就可以将pid对应的叶子节点标记为叶子节点。
功能5:post新帖
在创建新主题帖的时候,需要传递新的rootid,采用的方法是将其与自动递增的id值保持一致。
处理方法:在Statement函数处理中使用带参数:RETURN_GENERATED_KEYS的函数获取当前id值
功能6:平板展示主题帖
处理方法:将所有为主题帖的pid都设置为0,然后直接遍历显示所有的pid为0的数据。
功能7:
采用了两种方法实现分页技术
中文乱码问题
处理方法:
在读取request前,通过函数request.setCharacterEncoding(“UTF-8”)解决
总结
通过本次大作业,算是半只脚迈进javaweb开发的大门,未来的路还很长,革命尚未成功。
在整个实现的过程中,看着从无到有,从一堆代码到实现某项功能,有一种莫大的成就感。感受到敲代码的快乐。