基于jsp的简单论坛制作含源代码.docx

上传人:b****5 文档编号:11890086 上传时间:2023-04-08 格式:DOCX 页数:39 大小:542.98KB
下载 相关 举报
基于jsp的简单论坛制作含源代码.docx_第1页
第1页 / 共39页
基于jsp的简单论坛制作含源代码.docx_第2页
第2页 / 共39页
基于jsp的简单论坛制作含源代码.docx_第3页
第3页 / 共39页
基于jsp的简单论坛制作含源代码.docx_第4页
第4页 / 共39页
基于jsp的简单论坛制作含源代码.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

基于jsp的简单论坛制作含源代码.docx

《基于jsp的简单论坛制作含源代码.docx》由会员分享,可在线阅读,更多相关《基于jsp的简单论坛制作含源代码.docx(39页珍藏版)》请在冰豆网上搜索。

基于jsp的简单论坛制作含源代码.docx

基于jsp的简单论坛制作含源代码

 

摘要

当今,随着网络的迅速发展,制作BBS论坛的技术和方法也越来越多。

BS的英文全称是BulletinBoardSystem,翻译为中文就是“电子公告板”。

BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果计算机上运行。

早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过电脑来传播或获得消息而已。

一直到个人计算机开始普及之后,有些人尝试将苹果计算机上的BBS转移到个人计算机上,BBS才开始渐渐普及开来。

近些年来,由于爱好者们的努力,BBS的功能得到了很大的扩充。

BBS论坛是一种比较好的交流平台,他能方便人们进行即时在线交流,发表各种信息,实现网络资源的共享。

而且,也能促使人们敞开心扉去学习知识、追求进步,以至于能更好的利用网络资源。

随着计算机软件的迅速发展,BBS的界面效果越来越美观,功能、作用和范围也得到了迅速扩大。

与此同时,制作BBS论坛的方法和所用的软件种类也越来越多了。

而在这里,我将采用基于JSP网页技术的方法进行简单的BBS论坛制作。

我所用的开发软件是Eclipse,它是一款可以做基础Java项目开发的工具;JDK1.6,当前进行Java开发的最新版本;数据库是MySQL,它是一款当前比较流行的进行中小量数据开发的中小型数据库;服务器是Tomcat7.0,它也是一款当前比较流行的软件,主要用于网络服务器的开发。

本文主要讲述利用JavaWeb的相关技术来制作一个简单论坛。

通过实际制作,实现了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、各个页面的功能及示意图

各个模块

页面名称

页面功能

开始登陆的界面

Login.html

系统启动时的首页

登录管理

功能系统

Enter.jsp

用于判断用户名和密码是否正确

MainForm.jsp

登陆成功后转入该页面

Discuss.jsp

浏览主题帖子的页面,在这可以查看各类帖子

Person.jsp

显示个人信息的页面

NewTitle.jsp

发表新的主题帖子的页面

SaveNewTitle.jsp

将新发表的帖子存入数据库表Discuss中

Detail.jsp

用于显示帖子的内容及回复该帖的内容

SaveRevert.jsp

将回复内容存入数据库表Reply中

Delete.jsp

用于删除帖子

注册功能系统

Register.jsp

该界面用于新用户注册

SaveRegister.jsp

保存新用户注册信息到数据库表Student中

找回密码功能系统

GetPassword.jsp

用于用户找回密码

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、存储回复帖子的信息表REPLY

表名:

REPLY

信息表REPLY包括五个字段:

即,NAME(回帖人的昵称)、CONTENT(回帖的内容)、TIME(回帖的时间)、REPLY(所回复的主贴的标识符)、ID(回复贴的标识符)等。

表的属性:

表的内容:

3、系统详细设计

3.1、建立数据库及数据库表

建立一个数据库Test和三个数据库表(STUDENT、DISCUSS和REPLY)。

首先在Eclipse软件里配置MySQL5.0,配置完成后在Eclipse界面里建立名为“Test”的数据库,然后再建立三个数据库表(STUDENT、DISCUSS和REPLY)。

创建表student:

createtablestudent(

idintnotnullauto_increment,

usernamevarchar(20)unique,

passwordvarchar(20)notnull,

sexvarchar(8)notnull,

agevarchar(4),

birthvarchar(20)notnull,

telephonevarchar(12),

emailvarchar(40)notnull,

primarykey(id));

创建表discuss:

createtablediscuss(namechar(20)notnull,

emailchar(40)notnull,

subjectchar(60)notnull,

contenttextnotnull,

timechar(40),

usernamechar(20),

idintnotnullauto_increment,primarykey(id));

创建表reply:

createtablereply(namechar(20)notnull,

contenttextnotnull,

timechar(40),replyint,

idintnotnullauto_increment,

primarykey(id));

3.2、用户登录功能的实现

3.2.1、登陆界面的制作:

用户名:

密码:

functioncheckFrom(form){

if(form.username.value==""){

alert("用户名不能为空");

form.username.focus();

returnfalse}

if(form.password.value=""){

alert("密码不能为空");

form.password.focus();

returnfalse;

}

returntrue;

}

3.2.2、登陆功能的实现

通过Login.html界面传递参数username和password给Enter.jsp界面,然后查询数据库,判断用户名和密码是否正确。

若判断正确则为用户建立一个session,并进入了用户主界面。

<%@pagecontentType="text/html;charset=GB2312"%>

<%@pageimport="java.sql.*"%>

<%

try{out.print("系统错误1");

Class.forName("com.mysql.jdbc.Driver");

}

catch(Exceptione){out.print("系统错误1");}//数据库的驱

Connectioncon;

ResultSetrs;

Stringsql;

Stringusername=request.getParameter("username");

Stringpassword=request.getParameter("password");

try{

Stringdatabase="test";

Stringuri="jdbc:

mysql:

//localhost/"+database;

con=DriverManager.getConnection(uri,"root","root");//连接到数据库

PreparedStatementpstmt=null;//数据库表达式

sql="select*fromStudentwhereusername=?

andpassword=?

";//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(Exceptione){

out.print("系统错误");

}%>

3.3、浏览主题帖子功能的实现

3.3.1、翻页功能的实现

功能的实现:

首先确定每页所能容纳帖子的最大数目,在这里我设定MaxNum=5;然后连接数据库查询帖子的总数,从而判断总的页数,即lastPage,接着根据请求的页码pageNO判断出该页码是否合法,若pageNO<1则改正为pageNO=1,若pageNO>lastPage,即所求的页码超出了最大页数,则改正pageNO=lastPage,然后确定要显示的第一个帖子的标识码firstNum和最后一个帖子的标识码lastNum,最后连接数据库将标识码在firstNum和lastNum之间的帖子的信息查询出来,并在此页面显示帖子的主题、作者等粗略的信息,点击主题便能进入帖子的详细内容。

程序为:

<%@pageimport="javax.xml.soap.Detail"%>

<%@pagecontentType="text/html;charset=GB2312"%>

<%@pageimport="java.sql.*"%>

<%

Statementsql;

Connectioncon;

ResultSetrs;

intMaxNum=5;//每页容纳的主题论文的最大数目

intcount=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(Exceptione){

out.print(e);

};

try{

Stringdatabase="test";

Stringuri="jdbc:

mysql:

//localhost/"+database;

con=DriverManager.getConnection(uri,"root","root");

//翻页功能的实现

Stringcondition="select*fromdiscuss";

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;

ResultSetrs2;

Stringcondition2="select*fromdiscusswhereidbetween"+firstNum

+"and"+lastNum;

rs2=sql.executeQuery(condition2);

Stringname,subject,time;

intreplyid,id;

while(rs2.next())

{

name=rs2.getString

(1);

subject=rs2.getString(3);

time=rs2.getString(5);

id=rs2.getInt(7);

out.print("

id="+id+

">"+subject+"");

out.print(""+name+"");

out.println(""+time+"");

out.print("

id="+id+

"&replyid=0>

");

}

out.print("

");

}

catch(Exceptione){

out.println("捕捉的错误2");}

%>

   

发表新帖子

目前页数:

<%=pageNO%>

总页数:

<%=lastPage%>

pageNO=<%=firstPage%>>【第一页】

pageNO=<%=prePage%>>【上一页】

pageNO=<%=nextPage%>>【下一页】

pageNO=<%=lastPage%>>【最后一页】

输入页次:

">

3.4、主题帖子详细内容页面的制作

通过discuss.jsp页面传递参数ID,然后进行数据库查询获得帖子的详细信息,并显示的页面上。

<%

Statementsql;

Connectioncon;

ResultSetrs;

ResultSetrs2;

intid=Integer.parseInt(request.getParameter("id"));

try{

Class.forName("com.mysql.jdbc.Driver");

}

catch(Exceptione){

out.print("加载驱动错误");

};

try{

intreplyid=0;

Stringdatabase=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1