基于jsp的简单论坛制作含源代码_第1页
基于jsp的简单论坛制作含源代码_第2页
基于jsp的简单论坛制作含源代码_第3页
基于jsp的简单论坛制作含源代码_第4页
基于jsp的简单论坛制作含源代码_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录摘 要11、应用需求分析21.1、用户登录和注册功能21.2、注册功能31.3、用户登录成功后就进入了论坛的主界面,用户可以新选择相应的功能51.4、用户发表帖子51.4.1、帖子的浏览61.4.2、查看特定帖的详细信息71.5、用户帖子的删除功能。71.5.1、帖子的删除71.6、管理员对帖子的查看/发表/删除功能81.6.1、管理员查看或发表帖子81.6.2、管理员删除帖子82、系统总体设计82.1、系统结构设计82.1.1、各个页面的功能及示意图92.1.2、各个页面之间的调用关系92.2、数据库设计102.2.1、用户信息表Student102.2.2、存储帖子所用的信息表DISC

2、USS112.2.3、存储回复帖子的信息表REPLY113、系统详细设计123.1、建立数据库及数据库表123.2、用户登录功能的实现133.2.1、登陆界面的制作:133.2.2、登陆功能的实现143.3、浏览主题帖子功能的实现153.3.1、翻页功能的实现153.4、主题帖子详细内容页面的制作183.5、在帖子详细内容页面里实现回复功能193.6、用户发表新帖子页面的制作223.6.1、NewTitle.jsp页面发表新的主题文章223.6.2、SaveNewTitle.jsp页面用于保存由NewTitle.jsp页面传来的数据信息233.7、新用户注册功能的实现243.8、用户取回密码功

3、能的实现273.9、用户和管理员删除帖子功能的实现28课程实习心得30参考文献:33 摘 要当今,随着网络的迅速发展,制作BBS论坛的技术和方法也越来越多。BS的英文全称是Bulletin Board System,翻译为中文就是“电子公告板”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果计算机上运行。早期的BBS与一般街头和校园内的公告板性质相同,只不过是通过电脑来传播或获得消息而已。一直到个人计算机开始普及之后,有些人尝试将苹果计算机上的BBS转移到个人计算机上,BBS才开始渐渐普及开来。近些年来,由于爱好者们的努力,BBS的功能得到了很大的扩充

4、。BBS论坛是一种比较好的交流平台,他能方便人们进行即时在线交流,发表各种信息,实现网络资源的共享。而且,也能促使人们敞开心扉去学习知识、追求进步,以至于能更好的利用网络资源。 随着计算机软件的迅速发展,BBS的界面效果越来越美观,功能、作用和范围也得到了迅速扩大。与此同时,制作BBS论坛的方法和所用的软件种类也越来越多了。而在这里,我将采用基于JSP网页技术的方法进行简单的BBS论坛制作。我所用的开发软件是Eclipse,它是一款可以做基础Java项目开发的工具;JDK1.6,当前进行Java开发的最新版本;数据库是MySQL,它是一款当前比较流行的进行中小量数据开发的中小型数据库;服务器是

5、Tomcat7.0,它也是一款当前比较流行的软件,主要用于网络服务器的开发。本文主要讲述利用Java Web的相关技术来制作一个简单论坛。通过实际制作,实现了BBS论坛系统应有的一些基本功能,如:登陆功能,通过在登陆界面输入用户名和密码来实现会员的登录,用户只有登录成功了才能进行一系列的操作;注册功能,用户首次登陆,需要先注册,注册时需要用户填写个人信息;找回密码功能,当用户忘记密码时可以通过此功能找回密码,找回密码时需要用户记得注册时填写的个人信息。除此之外,还有浏览帖子、发表帖子、回复贴子以及删除帖子等等功能。制作本论坛所用的前台软件是MyEclipse,后台数据库是MySQL,运行时所用

6、的服务器是Tomcat,综合运用了HTML、JSp。关键词:BBS 论坛; JSP 技术; 登陆;注册; 找回密码;浏览贴子; 发表帖子; 回复贴子; 删除帖子1、应用需求分析作为一个BBS论坛,它应该具有BBS所有的一些基本功能,包括:用户登陆功能,用户取回密码功能,用户浏览帖子的功能以及用户发表、回复、修改和删除帖子的功能等。接下来,我将详细阐述一下这些功能。1.1、用户登录和注册功能进入登录页面后,对于第一次登陆的用户来说,首先需要注册,单击“新用户注册”按钮即可进入注册界面,注册完成后返回登录界面。然后,在对应的地方分别输入用户名和密码,点击“登录”按钮,系统即将用户名和密码发送到网络

7、服务器上,与保存在服务器数据库中的信息进行核对。若核对正确,则进入帖子浏览的界面,若不正确,则重新返回登录界面。登录页面:1.2、注册功能 用户首次进入系统时候,需要填写注册信息进行用户注册。1.3、用户登录成功后就进入了论坛的主界面,用户可以新选择相应的功能1.4、用户发表帖子 当用户登录成功后便进入该页面,在该页面发表的主题帖子,、 、帖子的浏览在主题页面中主要有两部分组成,一是用户的个人信息,再就是他人已经发表的主题帖子,每个帖子都包含了一些简单信息:主题、作者和时间,这里运用了分页功能。、查看特定帖的详细信息如上所述,单击主题便进入该帖的详细内容页面。里面主要包含了该帖的详细内容和他人

8、对此帖的回复,页面的最低处是用户的回复框架,用户在框架内直接输入要回复的内容即可。1.5、用户帖子的删除功能。、帖子的删除 在主题帖子页面中,每幅帖子的最左面都有一个删除按钮点,击此按钮便可删除你所发表的帖子。如果是非管理员即会提示非管理员不能删除帖子1.6、管理员对帖子的查看/发表/删除功能、管理员查看或发表帖子管理员查看或发表帖子与普通用户的一样。管理员可以对帖子和用户进行管理。、管理员删除帖子管理员删除帖子与普通用户的区别在于,他可以删除任何人发表的贴子,另外他还有一项特权,就是可以删除任何人回复的垃圾帖子。只要以admin身份登录的用户都可以点击帖子前面的就可以删除帖子2、系统总体设计

9、2.1、系统结构设计本BBS论坛系统共分为三大功能模块:(1) 登陆管理功能系统;(2) 注册功能系统;(3) 找回密码功能系统。登陆管理功能系统,又包括四个子模块:单纯的用户登录模块,用户发表帖子模块,用户回复他人帖子模块和用户删除自己所发表的帖子模块。、各个页面的功能及示意图各个模块页面名称页面功能开始登陆的界面Login.html系统启动时的首页登录管理功能系统Enter.jsp用于判断用户名和密码是否正确MainForm.jsp登陆成功后转入该页面Discuss.jsp浏览主题帖子的页面,在这可以查看各类帖子Person.jsp显示个人信息的页面NewTitle.jsp发表新的主题帖子

10、的页面SaveNewTitle.jsp将新发表的帖子存入数据库表Discuss中Detail.jsp用于显示帖子的内容及回复该帖的内容SaveRevert.jsp将回复内容存入数据库表Reply中Delete.jsp用于删除帖子注册功能系统Register.jsp该界面用于新用户注册SaveRegister.jsp保存新用户注册信息到数据库表Student中找回密码功能系统GetPassword.jsp用于用户找回密码、各个页面之间的调用关系各个页面之间的调用关系如下图所示:2.2、数据库设计、用户信息表Student表名:Student用户信息表Student包括八个字段:即,ID(用户的标

11、识符)、USERNAME(用户名)、PASSWORD(用户密码)、SEX(性别)、AGE(年龄)、BIRTH(生日)、TELEPHONE(联系电话)、EMAIL(电子邮箱)等。STUDENT表的属性如下图所示: STUDENT表的内容如下图所示:、存储帖子所用的信息表DISCUSS表名:DISCUSS信息表DISCUSS包括七个字段:即,NAME(发帖人的昵称)、EMAIL(电子邮箱)、SUBJECT(帖子的主题)、CONTENT(帖子的内容)、TIME(发帖的时间)、USERNAME(用户名)、ID(帖子的标识)等。表的属性: 表的内容:、存储回复帖子的信息表REPLY表名:REPLY信息表

12、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 au

13、to_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)

14、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、用户登录功能的实现、登陆界面的制作: <html><body

15、background=photo/123.jpg><table><form action="enter.jsp" method="post" onsubmit="return checkForm(this);"><tr><td><h3>用户名:</td><td><h4><input type="text" name="username"></td></tr>&

16、lt;tr><td><h3>密码:</td><td><h4><input type="password" name="password"></td></tr><tr><td><input type="submit" value="点击进入论坛" name="submit"></td><td><input type="re

17、set" value="重新设置" name="reset"></td></tr></form><tr><td><form action="GetPassWord.jsp" method="post"><input type="submit" value="找回密码" name="getpass"></form></td><td

18、><form action="register.jsp" method="post"><input type="submit" value="注册新用户" name="regist"></form></td></tr></table></body></html><script language="JavaScript">function checkFrom(for

19、m)if(form.username.value="")alert("用户名不能为空");form.username.focus();return falseif(form.password.value="")alert("密码不能为空");form.password.focus();return false;return true;</script>、登陆功能的实现通过Login.html界面传递参数username 和 password 给Enter.jsp界面,然后查询数据库,判断用户名和密码是否

20、正确。若判断正确则为用户建立一个session,并进入了用户主界面。<% page contentType="text/html; charset=GB2312" %><% page import="java.sql.*" %><html><body bgcolor=yellow><% tryout.print("系统错误1"); Class.forName("com.mysql.jdbc.Driver"); catch(Exception e) out.pri

21、nt("系统错误1");/数据库的驱 Connection con; ResultSet rs; String sql; String username=request.getParameter("username"); String password=request.getParameter("password");try String database="test" String uri=host/"+database; con=DriverManager.getConnection(uri,&quo

22、t;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.

23、next() request.getSession(true);/创建一个session session.setAttribute("username",username); session.setAttribute("password",password); session.setAttribute("userIP",request.getRemoteAddr();/获取用户的ip地址 session.setAttribute("enter","true") ; response.sendRe

24、direct("MainForm.jsp");/登录成功 else response.sendRedirect("login.html");/登录失败 返回! catch(Exception e) out.print("系统错误"); %> </body></html> 3.3、浏览主题帖子功能的实现、翻页功能的实现功能的实现:首先确定每页所能容纳帖子的最大数目,在这里我设定MaxNum=5;然后连接数据库查询帖子的总数,从而判断总的页数,即lastPage,接着根据请求的页码pageNO判断出该页码是否

25、合法,若pageNO<1则改正为pageNO=1,若pageNO>lastPage,即所求的页码超出了最大页数,则改正pageNO=lastPage,然后确定要显示的第一个帖子的标识码firstNum和最后一个帖子的标识码lastNum,最后连接数据库将标识码在firstNum和lastNum之间的帖子的信息查询出来,并在此页面显示帖子的主题、作者等粗略的信息,点击主题便能进入帖子的详细内容。程序为:<%page import="javax.xml.soap.Detail"%><% page contentType="text/htm

26、l; charset=GB2312" %><% page import="java.sql.*" %><html><body background=photo/07.jpg><%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

27、(request.getParameter("pageNO") = null|request.getParameter("pageNO").equals("")pageNO = 1;elsepageNO = Integer.parseInt(request.getParameter("pageNO");/firstPage表示首页,lastPage表示末页,pageNO表示第几页/firstNum表示该页的起始贴的ID,lastNum表示该页的末帖的ID/prePage表示前一页,nextPage表示后一页 try

28、 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 di

29、scuss"sql=con.createStatement();rs=sql.executeQuery(condition);while(rs.next() count+;/计算数据库里一共有多少帖子; /* if (request.getParameter("pageNO") = null)pageNO = 0;elsepageNO = Integer.parseInt(request.getParameter("pageNO"); */ lastPage=(int)Math.ceil(double)count/MaxNum); /向上取整

30、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 w

31、here 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("<table><tr ><td>&l

32、t;a href=Delete.jsp?id="+id+ "&replyid=0><img src=photo/110.jpg width=40 height=40></a></td><td width=300><a href=Detail.jsp?id="+ id + ">" + subject + "</a></td>");out.print("<td width=200>" + name +

33、 "</td>");out.println("<td width=200>" + time + "</td>");out.print("</tr><table>"); out.print("<td><a href=NewTitle.jsp>发表新帖子</a></td>"); catch(Exception e) out.println("捕捉的错误2"); %>&

34、lt;form action=dissess.jsp method=post><table border=0><tr><td>目前页数:<font color=red><%=pageNO%></font></td><td>总页数:<font color=red><%=lastPage%></font></td><td><a href=dissess.jsp?pageNO=<%=firstPage%>>【第一页】

35、</a></td><td><a href=dissess.jsp?pageNO=<%=prePage%>>【上一页】</a></td><td><a href=dissess.jsp?pageNO=<%=nextPage%>>【下一页】</a></td><td><a href=dissess.jsp?pageNO=<%=lastPage%>>【最后一页】</a></td><td>输入

36、页次:<input type=text size=3 name=pageNO value="<%=pageNO %>"></td><td><input type=submit name=send value="送出"></td></tr></table></form> 3.4、主题帖子详细内容页面的制作通过discuss.jsp页面传递参数ID,然后进行数据库查询获得帖子的详细信息,并显示的页面上。<%Statement sql;Connec

37、tion con;ResultSet rs;ResultSet rs2; int id=Integer.parseInt(request.getParameter("id"); try Class.forName(.Driver"); catch(Exception e) out.print("加载驱动错误"); ; try int replyid=0; String database="test" String uri="jdbc:mysql:/localhost/"+database; con = D

38、riverManager.getConnection(uri,"root","root"); String condition="select * from discuss where id = '"+ id +"'" /* StringBuffer result=null; */ sql=con.createStatement(); rs=sql.executeQuery(condition); while(rs.next() out.println("这是帖子的详细内容:n"

39、); out.print("</br>"); /* out.print("<table>"); out.print("<tr>"); */ out.print(rs.getString(4); /* out.print("</tr>"); out.print("</table>"); */ /* out.print(result); */ out.print("<tr>"); out.print(&quo

40、t;<hr>"); out.print("</tr>");3.5、在帖子详细内容页面里实现回复功能 在Detail.jsp 页面里实现回复功能,让用户可以在同一页面实现浏览贴子、回复帖子和浏览别人回复的帖子的功能:Detail.jsp页面中的代码:此部分代码是显示该帖子的内容,并给用户提供了一个回帖框架,在框架内直接输入内容就可以进行回复/回复帖子的 String condition2="select * from reply where reply = '"+ id +"'" rs2

41、=sql.executeQuery(condition2); while(rs2.next() out.print("<table>"); out.print("<tr>"); out.print("<td>用户" + rs2.getString(1) + "的回复内容是:</td>"); out.print("<td>" + rs2.getString(2) + "</td>"); out.print(

42、"</tr>"); out.print("<tr>"); out.print("<td>回复的时间是:" + rs2.getString(3) + "</td>"); out.print("</tr>"); out.print("</table>"); int reply=Integer.parseInt(rs2.getString(5);/提取回复贴的id; out.print("<a

43、href=delete.jsp?id="+id+ "&replyid="+reply+">删除回复请按-><img src=photo/guan.jpg width=50 height=50></a>"); catch(Exception e) out.print("尼玛"); %><form name=form2 action=saveRevert.jsp?id=<%=id%> method="post" onsubmit="

44、return checkForm(this);"> <table border=1><tr><td>输入你要回复的内容</td><td><textarea rows=15 cols=110 name=content></textarea></td></tr><tr align=center><td colspan=2><input type=submit value=确认回复 name=send><input type=reset

45、 value=清除重写>SaveRevert.jsp页面中的代码:此页面的功能保存由Detail.jsp页面传来的回帖信息,保存次信息到Reply数据库表中:<% page contentType="text/html; charset=GB2312" %><% page import="java.util.Calendar"%><% page import="java.util.GregorianCalendar"%><% page import="java.sql.*&qu

46、ot; %><%Statement sql;Connection con;ResultSet rs; 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","

47、root"); String reply = request.getParameter("id"); String name = (session.getAttribute("username").toString(); String content = request.getParameter("content"); int year, month, day, hour, minute, second; String time; GregorianCalendar calendar; calendar = new Greg

48、orianCalendar(); 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(Calendar.MINUTE); second = calendar.get(Calendar.SECOND); time = year + "年" + month + &

49、quot;月" + day + "日" + hour + ":" + minute+ ":" + second; byte bb=content.getBytes("iso-8859-1"); content=new String(bb); String updateCondition = "insert into reply ( name, content, time, reply )values('"+ name+ "','"+ cont

50、ent+ "','"+ time+ "','"+ reply+"')" sql=con.createStatement(); out.print(updateCondition); sql.executeUpdate(updateCondition); out.print("内部失败"); response.sendRedirect("Detail.jsp?id=" + reply); catch (Exception e) out.print("

51、;更新回复失败"); %> 3.6、用户发表新帖子页面的制作 、NewTitle.jsp页面发表新的主题文章 此界面提供用户输入功能,输入完成后“发表心得主题”按钮便可提交数据给SaveNewTitle.jsp页面:<<% page contentType="text/html; charset=GB2312"%><html><body background=photo/06.gif><form action=SaveNewsTitle.jsp?pageNO=1 method=post onsubmit=&qu

52、ot;return checkForm(this);"><table border=3><tr ><td>姓名</td><td><input type="text" size=60 name=name></td></tr><tr ><td>E-mail</td><td><input type=text size=60 name=email></td></tr><tr >

53、 <td><pre>主题</td><td><input type=text size=60 name=subject></td> </tr> <tr valign=top > <td><pre>内容</td><td><textarea rows=10 cols=60 name=content></textarea></td> </tr> <tr align=center> <td col

54、span=2><input type=submit value=发送心得主题 name=send > <input type=reset value="重置"></td> </tr> </table> <hr> <a href=dissess.jsp?pageNO=1>返回主题页</a> </form> </body></html> 、SaveNewTitle.jsp页面用于保存由NewTitle.jsp页面传来的数据信息首先将传递来的数

55、据进行转换,然后将其插入数据库Discuss中:<% page import="java.util.Calendar"%><% page import="java.util.GregorianCalendar"%><% page import="java.sql.*" %><% page import="java.util.*" %><% page contentType="text/html; charset=GB2312" %>&l

56、t;html><body><%Statement sql;Connection con;ResultSet rs; 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

57、","root"); String name=request.getParameter("name"); String email=request.getParameter("email"); String subject = request.getParameter("subject"); String content = request.getParameter("content"); int year,month,day,hour,minute,second; String ti

58、me; 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(Calendar.MINUTE); second=calendar.get(Calendar.SECOND); time

59、 = year + "年" + month + "月" + day + "日" + hour + ":" + minute+ ":" + second; byte bb=content.getBytes("iso-8859-1"); content=new String(bb); byte cc=subject.getBytes("iso-8859-1"); subject=new String(cc); String username = session

60、.getAttribute("username").toString(); String updateCondition1="insert into discuss ( name, email, subject, content, time, username) values( '"+ name+ "','"+ email+ "','"+ subject+ "','"+ content+ "','"+ t

61、ime + "','" + username + "')" sql=con.createStatement(); sql.executeUpdate(updateCondition1); out.print("更新成功"); response.sendRedirect("dissess.jsp"); catch(SQLException e)out.print("更新失败"); %> </body></html> 3.7、新用户注册功能的实现

62、 SaveRegister.jsp用于保存新用户的信息,这些信息是由Register.jsp页面传递而来,首先判断用户名是否已被注册过了,若被注册过则提示已注册。这是注册页面:<% page contentType="text/html; charset=GB2312" %><html><body background=photo/0.jpg><table><tr><td><center>您好,欢迎登陆注册页面,请详细填写您的资料。</td></tr></table><form action=SaveRegister.jsp method="post"><table><tr><td>姓名</td><td><input type="text"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论