目录
摘要 (1)
1、应用需求分析 (2)
1.1、用户登录和注册功能 (2)
1.2、注册功能 (3)
1.3、用户登录成功后就进入了论坛的主界面,用户可以新选择相应的功能 (4)
1.4、用户发表帖子 (4)
1.4.1、帖子的浏览 (5)
1.4.2、查看特定帖的详细信息 (6)
1.5、用户帖子的删除功能。 (6)
1.5.1、帖子的删除 (6)
1.6、管理员对帖子的查看/发表/删除功能 (7)
1.6.1、管理员查看或发表帖子 (7)
1.6.2、管理员删除帖子 (7)
2、系统总体设计 (7)
2.1、系统结构设计 (7)
2.1.1、各个页面的功能及示意图 (8)
2.1.2、各个页面之间的调用关系 (8)
2.2、数据库设计 (9)
2.2.1、用户信息表Student (9)
2.2.2、存储帖子所用的信息表DISCUSS (10)
2.2.3、存储回复帖子的信息表REPLY (10)
3、系统详细设计 (11)
3.1、建立数据库及数据库表 (11)
3.2、用户登录功能的实现 (12)
3.2.1、登陆界面的制作: (12)
3.2.2、登陆功能的实现 (13)
3.3、浏览主题帖子功能的实现 (14)
3.3.1、翻页功能的实现 (14)
3.4、主题帖子详细内容页面的制作 (17)
3.5、在帖子详细内容页面里实现回复功能 (18)
3.6、用户发表新帖子页面的制作 (21)
3.6.1、NewTitle.jsp页面发表新的主题文章 (21)
3.6.2、SaveNewTitle.jsp页面用于保存由NewTitle.jsp页面传来的数据信息 (22)
3.7、新用户注册功能的实现 (23)
3.8、用户取回密码功能的实现 (25)
3.9、用户和管理员删除帖子功能的实现 (27)
课程实习心得 (29)
参考文献: (29)
摘要
当今,随着网络的迅速发展,制作BBS论坛的技术和方法也越来越多。BS的英文全称是Bulletin Board System,翻译为中文就是“电子公告板”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果计算机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过电脑来传播或获得消息而已。一直到个人计算机开始普及之后,有些人尝试将苹果计算机上的BBS转移到个人计算机上,BBS才开始渐渐普及开来。近些年来,由于爱好者们的努力,BBS的功能得到了很大的扩充。
BBS论坛是一种比较好的交流平台,他能方便人们进行即时在线交流,发表各种信息,实现网络资源的共享。而且,也能促使人们敞开心扉去学习知识、追求进步,以至于能更好的利用网络资源。
随着计算机软件的迅速发展,BBS的界面效果越来越美观,功能、作用和范围也得到了迅速扩大。与此同时,制作BBS论坛的方法和所用的软件种类也越来越多了。而在这里,我将采用基于JSP网页技术的方法进行简单的BBS论坛制作。我所用的开发软件是Eclipse,它是一款可以做基础Java项目开发的工具;JDK1.6,当前进行Java 开发的最新版本;数据库是MySQL,它是一款当前比较流行的进行中小量数据开发的中小型数据库;服务器是Tomcat7.0,它也是一款当前比较流行的软件,主要用于网络服务器的开发。
本文主要讲述利用Java Web的相关技术来制作一个简单论坛。通过实际制作,实现了BBS论坛系统应有的一些基本功能,如:登陆功能,通过在登陆界面输入用户名和密码来实现会员的登录,用户只有登录成功了才能进行一系列的操作;注册功能,用户首次登陆,需要先注册,注册时需要用户填写个人信息;找回密码功能,当用户忘记密码时可以通过此功能找回密码,找回密码时需要用户记得注册时填写的个人信息。除此之外,还有浏览帖子、发表帖子、回复贴子以及删除帖子等等功能。制作本论坛所用的前台软件是MyEclipse,后台数据库是MySQL,运行时所用的服务器是Tomcat,综合运用了HTML、JSp。
关键词:BBS 论坛; JSP 技术; 登陆;注册; 找回密码;浏览贴子; 发表帖子; 回复贴子; 删除帖子
1、应用需求分析
作为一个BBS论坛,它应该具有BBS所有的一些基本功能,包括:用户登陆功能,用户取回密码功能,用户浏览帖子的功能以及用户发表、回复、修改和删除帖子的功能等。接下来,我将详细阐述一下这些功能。
1.1、用户登录和注册功能
进入登录页面后,对于第一次登陆的用户来说,首先需要注册,单击“新用户注册”按钮即可进入注册界面,注册完成后返回登录界面。然后,在对应的地方分别输入用户名和密码,点击“登录”按钮,系统即将用户名和密码发送到网络服务器上,与保存在服务器数据库中的信息进行核对。若核对正确,则进入帖子浏览的界面,若不正确,则重新返回登录界面。
登录页面:
1.2、注册功能
用户首次进入系统时候,需要填写注册信息进行用户注册。
1.3、用户登录成功后就进入了论坛的主界面,用户可以新选择相应的功能
1.4、用户发表帖子
当用户登录成功后便进入该页面,在该页面发表的主题帖子,
、
1.4.1、帖子的浏览
在主题页面中主要有两部分组成,一是用户的个人信息,再就是他人已经发表的主题帖子,每个帖子都包含了一些简单信息:主题、作者和时间,这里运用了分页功能。
1.4.2、查看特定帖的详细信息
如上所述,单击主题便进入该帖的详细内容页面。里面主要包含了该帖的详细内容和他人对此帖的回复,页面的最低处是用户的回复框架,用户在框架内直接输入要回复的内容即可。
1.5、用户帖子的删除功能。
1.5.1、帖子的删除
在主题帖子页面中,每幅帖子的最左面都有一个删除按钮点,击此按钮便可删除你所发表的帖子。
如果是非管理员即会提示非管理员不能删除帖子
1.6、管理员对帖子的查看/发表/删除功能
1.6.1、管理员查看或发表帖子
管理员查看或发表帖子与普通用户的一样。管理员可以对帖子和用户进行管理。
1.6.2、管理员删除帖子
管理员删除帖子与普通用户的区别在于,他可以删除任何人发表的贴子,另外他还有一项特权,就是可以删除任何人回复的垃圾帖子。只要以admin身份登录的用户都可
以点击帖子前面的就可以删除帖子
2、系统总体设计
2.1、系统结构设计
本BBS论坛系统共分为三大功能模块:
(1)登陆管理功能系统;
(2)注册功能系统;
(3)找回密码功能系统。
登陆管理功能系统,又包括四个子模块:单纯的用户登录模块,用户发表帖子模块,用户回复他人帖子模块和用户删除自己所发表的帖子模块。
2.1.1、各个页面的功能及示意图
2.1.2、各个页面之间的调用关系
各个页面之间的调用关系如下图所示:
2.2、数据库设计
2.2.1、用户信息表Student
表名:Student
用户信息表Student包括八个字段:即,ID(用户的标识符)、USERNAME(用户名)、PASSWORD(用户密码)、SEX(性别)、AGE(年龄)、BIRTH(生日)、TELEPHONE (联系电话)、EMAIL(电子邮箱)等。
STUDENT表的属性如下图所示:
STUDENT表的内容如下图所示:
2.2.2、存储帖子所用的信息表DISCUSS
表名:DISCUSS
信息表DISCUSS包括七个字段:即,NAME(发帖人的昵称)、EMAIL(电子邮箱)、SUBJECT(帖子的主题)、CONTENT(帖子的内容)、TIME(发帖的时间)、USERNAME(用户名)、ID(帖子的标识)等。
表的属性:
表的内容:
2.2.3、存储回复帖子的信息表REPL Y
表名:REPLY
信息表REPLY包括五个字段:即,NAME(回帖人的昵称)、CONTENT(回帖的内容)、TIME(回帖的时间)、REPLY(所回复的主贴的标识符)、ID(回复贴的标识符)等。
表的属性:
表的内容:
3、系统详细设计
3.1、建立数据库及数据库表
建立一个数据库Test和三个数据库表(STUDENT、DISCUSS和REPLY)。
首先在Eclipse软件里配置MySQL5.0,配置完成后在Eclipse界面里建立名为“Test”的数据库,然后再建立三个数据库表(STUDENT、DISCUSS和REPLY)。
创建表student:
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,
telephone varchar(12),
email varchar(40) not null,
primary key (id));
创建表discuss:
create table discuss(name char(20) not null,
email char(40) not null,
subject char(60) not null,
content text not null,
time char(40),
username char(20),
id int not null auto_increment,primary key (id));
创建表reply:
create table reply(name char(20) not null,
content text not null,
time char(40),reply int,
id int not null auto_increment,
primary key (id));
3.2、用户登录功能的实现
3.2.1、登陆界面的制作:
function checkFrom(form){
if(https://www.wendangku.net/doc/df14716795.html,ername.value==""){
alert("用户名不能为空");
https://www.wendangku.net/doc/df14716795.html,ername.focus();
return false}
if(form.password.value=""){
alert("密码不能为空");
form.password.focus();
return false;
}
return true;
}
3.2.2、登陆功能的实现
通过Login.html界面传递参数username 和 password 给Enter.jsp界面,然后
查询数据库,判断用户名和密码是否正确。若判断正确则为用户建立一个session,
并进入了用户主界面。
<%@page contentType="text/html; charset=GB2312"%>
<%@page import="java.sql.*"%>
<%
tr y{out.print("系统错误1");
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){ out.print("系统错误1");}//数据库的驱
Connection con;
ResultSet rs;
String sql;
String username=request.getParameter("username");
String password=request.getParameter("password");
try{
String database="test";
String uri="jdbc:mysql://localhost/"+database;
con=DriverManager.getConnection(uri,"root","root");//连接到数据库
PreparedStatement pstmt = null;// 数据库表达式
sql = "select * from Student where username = ? and password= ?";// SQL语
句
pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);//1代表上面的第一个问号。
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next())
{
request.getSession(true);//创建一个session
session.setAttribute("username",username);
session.setAttribute("password",password);
session.setAttribute("userIP",request.getRemoteAddr());//获取用户的ip地址 }
session.setAttribute("enter","true") ;
response.sendRedirect("MainForm.jsp");//登录成功
}else
response.sendRedirect("login.html");//登录失败返回!
}
catch(Exception e){
out.print("系统错误");
}%>
3.3、浏览主题帖子功能的实现
3.3.1、翻页功能的实现
功能的实现:首先确定每页所能容纳帖子的最大数目,在这里我设定MaxNum=5;然后连接数据库查询帖子的总数,从而判断总的页数,即lastPage,接着根据请求的页码pageNO判断出该页码是否合法,若pageNO<1则改正为pageNO=1,若pageNO>lastPage,即所求的页码超出了最大页数,则改正pageNO=lastPage,然后确定要显示的第一个帖子的标识码firstNum和最后一个帖子的标识码lastNum,最后连接数据库将标识码在firstNum和lastNum之间的帖子的信息查询出来,并在此页面显示帖子的主题、作者等粗略的信息,点击主题便能进入帖子的详细内容。
程序为:
<%@page import="javax.xml.soap.Detail"%>
<%@page contentType="text/html; charset=GB2312"%>
<%@page import="java.sql.*"%>
<%
Statement sql;
Connection con;
ResultSet rs;
int MaxNum = 5;//每页容纳的主题论文的最大数目
int count = 0, firstPage = 1, lastPage=1, firstNum=1, lastNum=1, prePage=1, nextPage=1, pageNO=1;
if(request.getParameter("pageNO") == null||request.getParameter("pageNO").equals(""))
pageNO = 1;
else
pageNO = Integer.parseInt(request.getParameter("pageNO"));
//firstPage表示首页,lastPage表示末页,pageNO表示第几页
//firstNum表示该页的起始贴的ID,lastNum表示该页的末帖的ID
//prePage表示前一页,nextPage表示后一页
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){
out.print(e);
};
try{
String database="test";
String uri="jdbc:mysql://localhost/"+database;
con = DriverManager.getConnection(uri,"root","root");
//翻页功能的实现
String condition="select * from discuss";
sql=con.createStatement();
rs=sql.executeQuery(condition);
while(rs.next())
{
count++;//计算数据库里一共有多少帖子;
}
/* if (request.getParameter("pageNO") == null)
pageNO = 0;
else
pageNO = Integer.parseInt(request.getParameter("pageNO")); */
lastPage=(int)Math.ceil((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;
else
prePage=pageNO-1;
if(pageNO>=lastPage)
nextPage=pageNO;
else
nextPage=pageNO+1;
ResultSet rs2;
String condition2 = "select * from discuss where id between " + firstNum + " and " + lastNum;
rs2=sql.executeQuery(condition2);
String name,subject,time;
int replyid,id;
while(rs2.next())
{
name=rs2.getString(1);
subject=rs2.getString(3);
time=rs2.getString(5);
id=rs2.getInt(7);
out.print("
"&replyid=0> | ">" + subject + " | ");" + name + " | ");" + time + " | ");
发表新帖子 | ");
/* out.print(result); */
}
out.print("
out.print("
out.print("
3.5、在帖子详细内容页面里实现回复功能
在Detail.jsp 页面里实现回复功能,让用户可以在同一页面实现浏览贴子、回复帖子和浏览别人回复的帖子的功能:
Detail.jsp页面中的代码:
此部分代码是显示该帖子的内容,并给用户提供了一个回帖框架,在框架内直接输入内容就可以进行回复
//回复帖子的
String condition2="select * from reply where reply = '"+ id +"'";
rs2=sql.executeQuery(condition2);
while(rs2.next())
{ out.print("
用户" + rs2.getString(1) + "的回复内容是: | ");" + rs2.getString(2) + " | ");
回复的时间是:" + rs2.getString(3) + " | ");
int reply=Integer.parseInt(rs2.getString(5));//提取回复贴的id;
out.print(" "&replyid="+reply+">删除回复请按-->
}
}
catch(Exception e){
out.print("尼玛");
}
%>