BBS论坛系统概要设计说明书
一.软件概要设计
1. 数据库的建立
下载并装MySql5.5.24数据库,设置它的默认编码为GB2312,设置的账户和密码分别为root和root,把编写好的sql语句导入到数据库中并保存为BBS.sql文档。
2. 下载web静态页面并修改成动态jsp页面
下载javaworld论坛的静态页面,保存到本地,用Macromedia Dreamweaver 8打开,删除不必要的页面代码。最后包含的jsp文件有
帖子的树形展现:article.jsp 帖子的详细信息:articleDetial.jsp 帖子的平板展现:articleFlat.jsp 帖子的删除:delete.jsp 管理员的登陆:login.jsp 帖子的修改:modify.jsp 发表新的帖子:post.jsp 回复帖子:reply.jsp 搜索帖子:search.jsp
会话检测:sessionCheck.jsp
所使用的图标文件都在images文件夹中,控件文件在FCKeditor文件夹中。
3. DB,USER和Article的封装
(1)把连接数据库常用的代码都封装在DB.java中。例如创建一个数据库连接Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/bbs”,”root”,”root”);创建 Statement 、ResultSet 和一些常用的方法,在数据库使用完后一定要关闭资源调用close方法。
(2)在用户模块中把用户的基本属性都封装User.java中。例如用户的username,password,add,email,qq等等。
(3)在帖子的基本属性也封装在Article.java中,如定义:
private int id;
private int pid; private int rootid; private String title; private String cont; private Date pdate; private boolean isleaf;
每个成员变量都Getts和Setts方法等等!
以上的bean文件都是为了方便在jsp文件中调用而开发的!
4. 发帖的树形展现
帖子的树形展现,需要用到递归函数,自身调用自身,在article.jsp文件中实现,首先检查这个帖子的pid,为0的是父贴,通知检查它是不是叶子节点,当isleaf为0时,循环结束,否者继续执行直到帖子全部输出!树形代码实现如下:
private void tree(List articles ,Connection conn,int id,int grade){
String sql="select * from article where pid =" + id; Statement stmt=DB.getStmt(conn); ResultSet rs=DB.getRs(stmt,sql); try{
while(rs.next()){
Article a=new Article(); a.initFromRs(rs); a.setGrade(grade); articles.add(a); if(!a.isIsleaf()){
tree(articles,conn,a.getId(),grade+1); } }
}catch(SQLException e){ e.printStackTrace(); }finally{ DB.close(rs); } }
DB.close(stmt);
5. 帖子的详细情况
该功能比较简单,但是articleDetial.jsp要接受帖子的id参数,一定要注意接受到得参数id是String类型,需要转换成Int类型,实现:Int id = Integer.parseInt(request.getParameter(“id”)); 把接受到的id传给sql的select语句,就可把帖子a取出来放在Artile列表中。在相应的页面位置调用即可,例如在显示主题时,主题:。
在处理以上问题时一定要注意传递的id有可能是空值,做好Catch Exception 的准备。
6. 回复帖子
在回复帖子replay.jsp的实现中也要接受id和rootid两个参数,都需要相应的转换;同时为了解决中文的乱码问题,一定要要加上request.setCharacterEncoding(“GBK”);,本页面不处理接受到的id和rootid两个参数,同时把要发表的title和cont以post的方式提交给replayDeal.jsp页面处理,form表格实现如下:
"/>
"/>
标题:
内容:
而在replayDeal.jsp 文件中就要做相应的数据库update处理了代码如下:
int pid=Integer.parseInt(request.getParameter("pid"));
int rootid=Integer.parseInt(request.getParameter("rootid"));
String title=request.getParameter("title"); System.out.print(title);
String cont=request.getParameter("cont");
System.out.print(cont); Connection conn=DB.getConn();
boolean autoCommit=conn.getAutoCommit(); conn.setAutoCommit(false);
String sql="insert into article values(null,?,?,?,?,now(),?)"; PreparedStatement pstmt=DB.praStmt(conn,sql); pstmt.setInt(1,pid); pstmt.setInt(2,rootid); pstmt.setString(3,title); pstmt.setString(4,cont); pstmt.setInt(5,0); pstmt.executeUpdate();
Statement stmt=DB.getStmt(conn);
stmt.executeUpdate("update article set isleaf =1 where id="+pid); conn.commit();
conn.setAutoCommit(autoCommit);
DB.close(pstmt); DB.close(stmt);
DB.close(conn); %>
回复成功后可以用javaScript实现以下自动跳转功能代码如下:
5秒钟后自动跳转,如果不跳转,请点击下面链接
主题列表
7. FCKeditor控件的应用
为了实现文本cont多样化,可以使用著名的编辑控件FCKeditor,调用的文件可以从网上下载,而实现的代码为:
{
var sBasePath
=""; }
BBS论坛系统概要设计说明书
一.软件概要设计
1. 数据库的建立
下载并装MySql5.5.24数据库,设置它的默认编码为GB2312,设置的账户和密码分别为root和root,把编写好的sql语句导入到数据库中并保存为BBS.sql文档。
2. 下载web静态页面并修改成动态jsp页面
下载javaworld论坛的静态页面,保存到本地,用Macromedia Dreamweaver 8打开,删除不必要的页面代码。最后包含的jsp文件有
帖子的树形展现:article.jsp 帖子的详细信息:articleDetial.jsp 帖子的平板展现:articleFlat.jsp 帖子的删除:delete.jsp 管理员的登陆:login.jsp 帖子的修改:modify.jsp 发表新的帖子:post.jsp 回复帖子:reply.jsp 搜索帖子:search.jsp
会话检测:sessionCheck.jsp
所使用的图标文件都在images文件夹中,控件文件在FCKeditor文件夹中。
3. DB,USER和Article的封装
(1)把连接数据库常用的代码都封装在DB.java中。例如创建一个数据库连接Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/bbs”,”root”,”root”);创建 Statement 、ResultSet 和一些常用的方法,在数据库使用完后一定要关闭资源调用close方法。
(2)在用户模块中把用户的基本属性都封装User.java中。例如用户的username,password,add,email,qq等等。
(3)在帖子的基本属性也封装在Article.java中,如定义:
private int id;
private int pid; private int rootid; private String title; private String cont; private Date pdate; private boolean isleaf;
每个成员变量都Getts和Setts方法等等!
以上的bean文件都是为了方便在jsp文件中调用而开发的!
4. 发帖的树形展现
帖子的树形展现,需要用到递归函数,自身调用自身,在article.jsp文件中实现,首先检查这个帖子的pid,为0的是父贴,通知检查它是不是叶子节点,当isleaf为0时,循环结束,否者继续执行直到帖子全部输出!树形代码实现如下:
private void tree(List articles ,Connection conn,int id,int grade){
String sql="select * from article where pid =" + id; Statement stmt=DB.getStmt(conn); ResultSet rs=DB.getRs(stmt,sql); try{
while(rs.next()){
Article a=new Article(); a.initFromRs(rs); a.setGrade(grade); articles.add(a); if(!a.isIsleaf()){
tree(articles,conn,a.getId(),grade+1); } }
}catch(SQLException e){ e.printStackTrace(); }finally{ DB.close(rs); } }
DB.close(stmt);
5. 帖子的详细情况
该功能比较简单,但是articleDetial.jsp要接受帖子的id参数,一定要注意接受到得参数id是String类型,需要转换成Int类型,实现:Int id = Integer.parseInt(request.getParameter(“id”)); 把接受到的id传给sql的select语句,就可把帖子a取出来放在Artile列表中。在相应的页面位置调用即可,例如在显示主题时,主题:。
在处理以上问题时一定要注意传递的id有可能是空值,做好Catch Exception 的准备。
6. 回复帖子
在回复帖子replay.jsp的实现中也要接受id和rootid两个参数,都需要相应的转换;同时为了解决中文的乱码问题,一定要要加上request.setCharacterEncoding(“GBK”);,本页面不处理接受到的id和rootid两个参数,同时把要发表的title和cont以post的方式提交给replayDeal.jsp页面处理,form表格实现如下:
"/>
"/>
标题:
内容:
而在replayDeal.jsp 文件中就要做相应的数据库update处理了代码如下:
int pid=Integer.parseInt(request.getParameter("pid"));
int rootid=Integer.parseInt(request.getParameter("rootid"));
String title=request.getParameter("title"); System.out.print(title);
String cont=request.getParameter("cont");
System.out.print(cont); Connection conn=DB.getConn();
boolean autoCommit=conn.getAutoCommit(); conn.setAutoCommit(false);
String sql="insert into article values(null,?,?,?,?,now(),?)"; PreparedStatement pstmt=DB.praStmt(conn,sql); pstmt.setInt(1,pid); pstmt.setInt(2,rootid); pstmt.setString(3,title); pstmt.setString(4,cont); pstmt.setInt(5,0); pstmt.executeUpdate();
Statement stmt=DB.getStmt(conn);
stmt.executeUpdate("update article set isleaf =1 where id="+pid); conn.commit();
conn.setAutoCommit(autoCommit);
DB.close(pstmt); DB.close(stmt);
DB.close(conn); %>
回复成功后可以用javaScript实现以下自动跳转功能代码如下:
5秒钟后自动跳转,如果不跳转,请点击下面链接
主题列表
7. FCKeditor控件的应用
为了实现文本cont多样化,可以使用著名的编辑控件FCKeditor,调用的文件可以从网上下载,而实现的代码为:
{
var sBasePath
=""; }