版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要 当今,随着网络的迅速发展,制作BBS论坛的技术和方法也越来越多。本文主要讲述利用Java Web的相关技术来制作一个简单论坛。通过实际制作,实现了BBS论坛系统应有的一些基本功能,如:登陆功能,通过在登陆界面输入用户名和密码来实现会员的登录,用户只有登录成功了才能进行一系列的操作;注册功能,用户首次登陆,需要先注册,注册时需要用户填写个人信息;找回密码功能,当用户忘记密码时可以通过此功能找回密码,找回密码时需要用户记得注册时填写的个人信息。除此之外,还有浏览帖子、发表帖子、回复贴子以及删除帖子等等功能。制作本论坛所用的前台软件是MyEclipse,后台数据库是MySQL,运行时所用的服
2、务器是Tomcat,综合运用了HTML、JSP以及JavaScript语言。全文先对用到的软件进行了简单的介绍,然后依次对系统的应用进行需求分析、总体设计、详细设计;最后简要介绍了系统的发布和测试。关键词:BBS 论坛; JSP 技术; 登陆;注册; 找回密码;浏览贴子; 发表帖子; 回复贴子; 删除帖子目 录第一章引 言1第二章需求分析2第三章总体设计4第四章详细设计与实现7第五章系统测试15结 论16参考文献16第一章 引 言BBS的英文全称是Bulletin Board System,翻译为中文就是“电子公告板”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,
3、而且只能在苹果计算机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过电脑来传播或获得消息而已。一直到个人计算机开始普及之后,有些人尝试将苹果计算机上的BBS转移到个人计算机上,BBS才开始渐渐普及开来。BBS最初是为了给计算机爱好者提供一个互相交流的地方。70年代后期,计算机用户数目很少且用户之间相距很远。因此,BBS(当时全世界一共不到一百个站点)提供了一个简单方便的交流方式,用户通过 BBS可以交换软件和信息。到了今天,BBS的用户才扩展到各行各业,花样非常多。BBS论坛是一种比较好的交流平台,他能方便人们进行即时在线交流,发表各种信息,实现网络资源的共享。而且,也能促
4、使人们敞开心扉去学习知识、追求进步,以至于能更好的利用网络资源。 鉴于BBS的这些优点,又加之制作BBS的一些基本知识我曾学习过,如Java程序设计、JSP网页制作以及MyEclipse6.0基础教程这些书我都看过或自学过。考虑到个人喜好,所以最后我决定选择Java Web开发BBS论坛制作,这个题目作为我毕业论文,同时也能积累一点开发Java小项目的经验,达到锻炼自己在这方面能力的目的。我将采用基于JSP网页技术的方法进行简单的BBS论坛制作。我所用的开发软件是MyEclipse6.0,它是一款可以做基础Java项目开发的工具;JDK1.6,当前进行Java开发的最新版本;数据库是MySQL
5、,它是一款当前比较流行的进行中小量数据开发的中小型数据库;服务器是Tomcat6.0,它也是一款当前比较流行的软件,主要用于网络服务器的开发。这些东西对一个搞Java开发的人来说应该是很普遍的。因此,无论在技术还是软件上都应该可以实现的。第二章 需求分析作为一个BBS论坛,它应该具有BBS所有的一些基本功能,包括:用户登陆功能,用户取回密码功能,用户浏览帖子的功能以及用户发表、回复、修改和删除帖子的功能等。接下来,我将详细阐述一下这些功能。(一)、用户登录和注册功能进入登录页面后,对于第一次登陆的用户来说,首先需要注册,单击“新用户注册”按钮即可进入注册界面,注册完成后返回登录界面。输入用户名
6、和密码,点击“登录”按钮,系统即将用户名和密码发送到网络服务器上,与保存在服务器数据库中的信息进行核对。若核对正确,则进入帖子浏览的界面,若不正确,则重新返回登录界面。(二)、用户找回密码功能 在有些时候,我们可能会忘记登录密码,这时就用到了密码找回功能,通过正确的回答当初注册时的一些信息即可取回密码。(三)、用户帖子的浏览 当用户登录成功后便进入该页面,在该页面可以浏览他人已经发表的主题帖子,1、 帖子的总览在主题页面中主要有两部分组成,一是用户的个人信息,再就是他人已经发表的主题帖子,每个帖子都包含了一些简单信息:主题、作者和时间。鼠标单击主题便进入了下一页面该帖的详细内容页面。2、查看特
7、定帖的详细信息详细内容页面主要包含了该帖的详细内容和他人对此帖的回复,点击“我要回复”便可回复此贴。(四)、用户帖子的发布/修改/删除/回复功能用户成功登陆后,可以进行一些操作,如发表帖子、删除自己发表的帖子、回复他人或自己的帖子等。1、 帖子的发布登陆成功进入主题页面后,点击“发表新的主题文章”按钮后,便可进入发表帖子的界面。在该页面中填写完信息,点击“发送新的主题” ,点击“我要回复”按钮便可对该贴进行回复,如要想对其他回复此贴的人进行回复,可以点击回复人后面的“回复XX楼”按钮对其进行回复。2、帖子的删除 在主题帖子页面中,每幅帖子的最左面都有一个删除按钮,点击此按钮便可删除你所发表的帖
8、子。每个用户(除管理员外)只可删除自己的帖子。(五)、管理员对帖子的查看/发表/删除功能1、管理员查看或发表帖子管理员查看或发表帖子与普通用户的一样。2、 管理员删除帖子管理员删除帖子与普通用户的区别在于,他可以删除任何人发表的贴子,另外他还有一项特权,就是可以删除任何人回复的垃圾帖子。第三章 总体设计(一)、系统结构设计本BBS论坛系统共分为三大功能模块:(1) 登陆管理功能系统;(2) 注册功能系统;(3) 找回密码功能系统。登陆管理功能系统,又包括四个子模块:单纯的用户登录模块,用户发表帖子模块,用户回复他人帖子模块和用户删除自己所发表的帖子模块。1、 各个页面的功能及示意图有两个页面用
9、于基本功能的实现,被其它页面所调用:页面名称主要功能用于实现基本功能Opendata.jsp打开数据库链接Convert.jsp用于字符的转换其余的页面如下表所示:各个模块页面名称页面功能开始登陆的界面Login.html系统启动时的首页登录管理功能系统Enter.jsp用于判断用户名和密码是否正确MainForm.jsp登陆成功后转入该页面Discuss.jsp浏览主题帖子的页面,在这可以查看各类帖子Person.jsp显示个人信息的页面NewTitle.jsp发表新的主题帖子的页面SaveNewTitle.jsp将新发表的帖子存入数据库表Discuss中Detail.jsp用于显示帖子的内
10、容及回复该帖的内容SaveRevert.jsp将回复内容存入数据库表Reply中Delete.jsp用于删除帖子注册功能系统Register.jsp该界面用于新用户注册SaveRegister.jsp保存新用户注册信息到数据库表Student中找回密码功能系统GetPassword.jsp用于用户找回密码2、各个页面之间的调用关系各个页面之间的调用关系如下图所示: 注意:其中有两个基本页面(Convert.jsp 和Opendata.jsp)被其它的页面所引用,在此图中并没有包含这两个页面。(二)、数据库设计根据本BBS论坛功能的要求以及功能模块的划分,本信息数据库可存放在三个表中,它们是,用
11、户信息数据库表Student、发表的帖子的数据库表Discuss和回复的帖子的数据库表Reply,数据库表的具体设计如下所示:1、用户信息表Student表名:Student用户信息表Student包括八个字段:即,ID(用户的标识符)、USERNAME(用户名)、PASSWORD(用户密码)、SEX(性别)、AGE(年龄)、BIRTH(生日)、TELEPHONE(联系电话)、EMAIL(电子邮箱)等。2、存储帖子所用的信息表DISCUSS表名:DISCUSS信息表DISCUSS包括七个字段:即,NAME(发帖人的昵称)、EMAIL(电子邮箱)、SUBJECT(帖子的主题)、CONTENT(帖
12、子的内容)、TIME(发帖的时间)、USERNAME(用户名)、ID(帖子的标识)等。3、存储回复帖子的信息表REPLY表名:REPLY信息表REPLY包括五个字段:即,NAME(回帖人的昵称)、CONTENT(回帖的内容)、TIME(回帖的时间)、REPLY(所回复的主贴的标识符)、ID(回复贴的标识符)等。第四章 详细设计与实现(一)、建立数据库及数据库表建立一个数据库Test和三个数据库表(STUDENT、DISCUSS和REPLY)。首先在MyEclipse6.5软件里配置MySQL5.0,配置完成后在MyEclipse界面里建立名为“Test”的数据库,然后再建立三个数据库表(STU
13、DENT、DISCUSS和REPLY)。创建表student:stmt.executeUpdate("create table student(id int not null auto_increment," +"username varchar(20) unique," +"password varchar(20) not null," +"sex varchar(8) not null,"+"age varchar(4) ,"+"birth varchar(20) not null
14、,"+"telephone varchar(12),"+"email varchar(40) not null," +"primary key (id)");创建表discuss:stmt.executeUpdate("create table discuss(name char(20) not null,"+"email char(40) not null,"+"subject char(60) not null,"+"content text not
15、null,"+"time char(40),"+"username char(20),"+"id int not null auto_increment,primary key (id)");创建表reply:stmt.executeUpdate("create table reply(name char(20) not null,"+"content text not null,"+"time char(40),reply int,"+"id int n
16、ot null auto_increment,"+"primary key (id)");(二)、用户登录功能的实现1、 登陆功能的实现通过Login.html界面传递参数username 和 password 给Enter.jsp界面,然后查询数据库,判断用户名和密码是否正确。若判断正确则为用户建立一个session,并进入了用户主界面。<%String username = request.getParameter("username");/参数传递,用户名String password = request.getParameter(
17、"password");/参数传递,密码PreparedStatement pstmt = null;/ 数据库表达式sql = "select * from Student where username = ? and password= ?"/ SQL语句pstmt = conn.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);rs = pstmt.executeQuery();if (rs.next() /request.getSessi
18、on(true);/创建session/保存登录用户到session中session.putValue("username", username);session.putValue("password", password);session.putValue("userIP", request.getRemoteAddr();session.putValue("enter", "true");/登录成功主题页面response.sendRedirect("MainForm.jsp&qu
19、ot;); elseresponse.sendRedirect("login.html");/登陆失败转向登录页面%>(三)、浏览主题帖子功能的实现1、翻页功能的实现在这里可以实现翻页功能,根据你的实际需求进行选择。程序为:<%int MaxNum = 10;/每页容纳的主题论文的最大数目int count = 0, firstPage = 1, lastPage, firstNum, lastNum, prePage, nextPage, pageNO;/firstPage表示首页,lastPage表示末页,pageNO表示第几页,/firstNum表示该页的
20、起始贴的ID,lastNum表示该页的末帖的ID,/prePage表示前一页,nextPage表示后一页sql = "select * from discuss"rs = stm.executeQuery(sql);while (rs.next()count+;if (request.getParameter("pageNO") = null)pageNO = 0;elsepageNO = Integer.parseInt(request.getParameter("pageNO");lastPage = (int) Math.cei
21、l(double) count / MaxNum);if (pageNO = 0)pageNO = 1;if (pageNO > lastPage)pageNO = lastPage;firstNum = (pageNO - 1) * MaxNum + 1;lastNum = pageNO * MaxNum;if (pageNO = 1)prePage = 1;elseprePage = pageNO - 1;if (pageNO = lastPage)nextPage = pageNO;elsenextPage = pageNO + 1;sql = "select * fro
22、m discuss where id between " + firstNum+ " and " + lastNum;rs = stm.executeQuery(sql);%>(四)、主题帖子详细内容页面的制作 通过Discuss.jsp页面传递参数ID,然后进行数据库查询获得帖子的详细信息,并显示的页面上。<%int id = Integer.parseInt(request.getParameter("id");sql = "select * from discuss where id=" + id;Stri
23、ng name = null;String email = null;String subject = null;String content = null;String time = null;String replyto = null;rs = stm.executeQuery(sql);while (rs.next() name = rs.getString(1);email = rs.getString(2);subject = rs.getString(3);content = rs.getString(4);time = rs.getString(5);id = rs.getInt
24、(7);%>(五)、在帖子详细内容页面里实现回复功能 在Detail.jsp 页面里实现回复功能,让用户可以在同一页面实现浏览贴子、回复帖子和浏览别人回复的帖子的功能:1、 SaveRevert.jsp页面中的代码:此页面的功能保存由Detail.jsp页面传来的回帖信息,保存次信息到Reply数据库表中:<%String reply = request.getParameter("id");String name = request.getParameter("name");String content = request.getParam
25、eter("content");int year, month, day, hour, minute, second;String time;GregorianCalendar calendar;calendar = new GregorianCalendar();year = calendar.get(Calendar.YEAR);month = calendar.get(Calendar.MONTH) + 1;day = calendar.get(Calendar.DAY_OF_MONTH);hour = calendar.get(Calendar.HOUR_OF_DA
26、Y);minute = calendar.get(Calendar.MINUTE);second = calendar.get(Calendar.SECOND);time = year + "年" + month + "月" + day + "日" + hour + ":" + minute+ ":" + second;name = convert(name);content = convert(content);content = Replace(content);sql = "in
27、sert into reply(name,content,time,reply)values('" + name+ "','" + content + "','" + time + "'," + reply + ")"stm.executeUpdate(sql); /插入数据库中response.sendRedirect("detail.jsp?id=" + reply);%>(六)、用户发表新帖子页面的制作 1、SaveNewTi
28、tle.jsp页面用于保存由NewTitle.jsp页面传来的数据信息首先将传递来的数据进行转换,然后将其插入数据库Discuss中:<%String name = request.getParameter("name");String email = request.getParameter("email");String subject = request.getParameter("subject");String content = request.getParameter("content");in
29、t year, month, day, hour, minute, second;String time;GregorianCalendar calendar;calendar = new GregorianCalendar();year = calendar.get(Calendar.YEAR);month = calendar.get(Calendar.MONTH) + 1;day = calendar.get(Calendar.DAY_OF_MONTH);hour = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Cal
30、endar.MINUTE);second = calendar.get(Calendar.SECOND);time = year + "年" + month + "月" + day + "日" + hour + ":" + minute+ ":" + second;name = convert(name);subject = convert(subject);content = convert(content);content = Replace(content);String username
31、 = session.getValue("username").toString(); sql = "insert into discuss ( name, email, subject, content, time, username) values( '"+ name+ "','"+ email+ "','"+ subject+ "','"+ content+ "','" + time + "
32、;','" + username + "')"stm.executeUpdate(sql); /插入数据库中response.sendRedirect("discuss.jsp");%>(七)、新用户注册功能的实现 SaveRegister.jsp用于保存新用户的信息,这些信息是由Register.jsp页面传递而来,首先判断用户名是否已被注册过了,若被注册过则提示已注册。<%String username = request.getParameter("username");String
33、 password = request.getParameter("password");String sex = request.getParameter("sex");String age = request.getParameter("age");String year = request.getParameter("year");String month = request.getParameter("month");String day = request.getParameter(&
34、quot;day");String telephone = request.getParameter("telephone");String email = request.getParameter("email");String msg = null;username = convert(username);sql = "select * from student where username='" + username + "'"rs = stm.executeQuery(sql);
35、/查询数据库if (!rs.next() /如果不存在sex = convert(sex);age = convert(age);String birth;birth = year + "年" + month + "月" + day + "日"sql = "insert into student ( username, password, sex, birth, age, telephone , email )values('"+ username+ "','"+ pas
36、sword+ "','"+ sex+ "','"+ birth+ "','"+ age+ "','"+ telephone+ "','"+ email + "')"stm.executeUpdate(sql); /插入数据库中msg = "恭喜你,已注册成功!"response.sendRedirect("login.html"); else /如果
37、注册用户已存在msg = "你所注册的用户已经存在,请你重新注册!"out.println("<center><font color=green size=5>提示信息:out.println("<input type=button value=回上一页 onclick=history.back();>");%>(八)、用户取回密码功能的实现GetPassword.jsp页面用于取回密码,给该页面传递一些用户填写的信息,将该用户注册时的对应信息与此信息进行比较,当该信息与用户注册时填写的一样时,便能取回
38、密码,否则不能:<%if (request.getParameter("username") != null/username用户名&& request.getParameter("sex") != null/sex性别&& request.getParameter("email") != null) /email电子邮箱String username = request.getParameter("username");String sex = request.getPara
39、meter("sex");String email = request.getParameter("email");username = convert(username);sex = convert(sex);email = convert(email);sql = "select * from student where username='" + username+ "' and sex='" + sex + "' and email='" + em
40、ail + "'"rs = stm.executeQuery(sql);/从数据库中查找对应信息if (rs.next() /如果找到String password = rs.getString(3);String errmsg = "正确的填写信息,你的密码为:"out.println("<center><font color=green size=5>提示信息:<hr></font><font color=red size=4>"+ errmsg + passwo
41、rd + "</font><hr>");out.println("<input type=button value=回上一页 onclick=history.back();>"); else String errmsg = "对不起,你暂时还不能取回你的密码,原因是你没能正确的填写信息!"out.println("<center><font color=green size=5>提示信息:<hr></font><font color=r
42、ed size=4>"+ errmsg + "</font><hr>");out.println("<input type=button value=回上一页 onclick=history.back();>");%>(九)、用户和管理员删除帖子功能的实现 Delete.jsp页面用于删除帖子,在此页面获得两个参数id和replyid。其中id为帖子的标识符,replyid为是否是回帖,当replyid>0 时表示要删除的是回复贴,否则,当replyid<0,即等于0时表示要删除主帖:
43、<%int id = Integer.parseInt(request.getParameter("id");int replyid = Integer.parseInt(request.getParameter("replyid");if (replyid > 0) /当replyid>0 时表示要删除的是回复贴if (session.getValue("username").equals("TongYong") sql = "update reply set content='
44、;此回复已被删除!'"+ " where reply=" + id + " and id=" + replyid;stm.executeUpdate(sql);response.sendRedirect("detail.jsp?id=" + id); else /否则,当replyid=0时表示要删除主帖sql = "select * from discuss where username='"+ session.getValue("username") + "
45、;'"rs = stm.executeQuery(sql);if (rs.next()| session.getValue("username").equals("TongYong") sql = "delete from discuss where id=" + id;stm.executeUpdate(sql);sql = "alter table discuss drop id "stm.executeUpdate(sql);sql = "alter table discuss add id int not null auto_increme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年下半年浙江省卫生系统招聘模拟试题及答案
- 2026年通信工程师《通信网络规划》阶段测试卷
- 2026年市政道路绿化工程施工方案三篇
- 青岛版(六三制)数学二年级下册期中模拟卷1
- 树木年轮中不可交换有机氚的加速器质谱测定:方法、应用与展望
- 柳州市S中学教研组长领导力的深度剖析与提升路径
- 柔韧预浸炭纤维及Cf-C复合材料的制备工艺与抗氧化性能优化研究
- 柑橘黄龙病显色诊断技术:原理、应用与展望
- 枯草杆菌CobA和NasF的重组表达及活性解析:从基础到应用的深入探究
- 林州市农村小学“撤点并校”对学校体育的多维度影响与发展路径探究
- DB44∕T 2784-2025 居家老年人整合照护管理规范
- 湖北省十一校2026届高三第二次联考生物生物试卷(含答案)
- 2026年遥感技术助力生物多样性监测
- 园区卫生管理责任制度
- 幕墙施工噪音控制方案
- 弹载大容量多参数测试仪的关键技术与研制实践
- 2026年银行系统运维岗招聘笔试模拟题含答案
- 2026年河南省事业单位工勤技能考试考试题库及参考答案
- 保安门卫勤务培训课件
- 仓储库存周转率优化与呆滞物料清理报告
- 2025年复旦大学管理职员统一公开招聘备考题库含答案详解
评论
0/150
提交评论