BBS项目初步总结
今天终于把一个很简单的BBS大概模式做出来了,虽然程序的健壮性还没有做很深入的推敲,可恶的乱码问题也还kill掉,但也抑制不住心里的激动,决定写一篇blog,总结并犒劳上一阶段的辛苦学习。
这个项目采用了两种形式进行展示,一个是属性结构,一个便是平板结构。树状结构的演示图如
管理员enter 的页面如下(可删除帖子)
平板结构演示图如下:
估计看了的人要开始嘲笑了,但是不在乎,反正刚学嘛,小菜鸟仍需继续努力才对。
这个小型项目包括8个jsp页面,分别是ShowArticleTree.jsp;ShowArticleFlat.jsp;ShowArticleDetail.jsp;Reply.jsp;ReplyOK.jsp;Login.jsp;post.jsp;Delete.jsp。
下面我们分页面总结:
1.ShowArticleTree.jsp,主要用于做树形展示。运用递归从数据库里依次取出结果集追加到一个全局string 里,最后运用表达式输出打印string。也许你会奇怪问什么会出现表格,应为我们的这个string 里面含有<tr><td>帮助调整格式。这里的两点空恐怕也就只有这个string 了吧,但是首先也要可以用递归来实现,尽管网上也有很多实现相同功能的方法,在这里姑且先用这种方法吧----递归。
在第一个页面还有一点值得一提,就是如何写一个很健壮的数据库连接的异常处理代码:先将其复制贴在下面
try{
JDBC的具体操作;
}catch(SQLException se)
{
se.printStackTrace();
}finally{
try{
if(rs != null)
{
rs.close();
rs = null ;
}
if(stmt != null)
{
stmt.close();
stmt = null ;
}
}catch(SQLException se1)
{
se1.printStackTrace();
}
}
即先判定是否为空,再将其关闭,以免出现NullPointerException
2.ShowArticleFlat.jsp,主要用来做平板演示。实现比其上面的复杂了一些,因为采用了分页技术。如图所示,显示了共多少页,目前所处的是第几页,并采用三种方法达到转换页面的效果。一种是常见的“上一页”或“下一页”的链接。而是利用的一个下拉条,三是利用了一个文本框直接输入页码跳转,但是第三种方法在实际情况中很少见,原因据猜测可能是用户使用不方便吧,但是个人觉得还挺好,记住页码就直接跳转,速度岂不是很快啊!
分页技术主要分为三步:
1).计算总的帖子数,利用select count(*) from table
2).计算页码:记住不能简单的就利用totalPage/pageSize +1来实现,而要实际分析,有些情况不需要+1.
3).利用sql语句select* from article where pid=0 order by pdata desc limit "+ startPos +","+pageSize)进行分页
具体实现代码如下,(注意数据库使用的是mysql)
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/bbs?user=root&password=root" ;
Connection conn = DriverManager.getConnection(url);
Statement stmtCount = conn.createStatement();
ResultSet rsCount = stmtCount.executeQuery("select count(*) from article");
rsCount.next();
int totalPage = rsCount.getInt(1) ;
pageNu = totalPage%pageSize==0?totalPage/pageSize:totalPage/pageSize+1;
int startPos= (pageNu - 1)*pageSize;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select* from article where pid=0 order by pdata desc limit "+ startPos +","+pageSize);
3.ShowArticleDetail.jsp,由于树形结构展示的只是帖子中的id和其title,每一个title做成了链接,连接到了其具体的内容并在ShowArticleDetail作一个展示而已。
4.Reply.jsp,根据帖子的具体内容做一个回复。主要展现为一个回复框,演示图如下:
值得一提的是一个去掉空格的函数javascript,用于防止用户输入的内容为空,蓄意破坏。具体实现如下:
<!--
//去空格函数
//去掉字符串左边的空格
function LTrim(str)
{
var i;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i) != " ")
break ;
}
str = str.substring(i,str.length);
return str ;
}
function RTrim(str)
{
var i ;
for(i = str.length()-1 ;i>=0;i--)
{
if(str.charAt(i) != " "&&str.charAt(i) != " " )
break ;
}
str = str.subString(0,i+1)
return str ;
}
function check()
{
if(Trim(document.reply.title.value) == "")
{
alert("Please input the content !")
document.reply.cont.focus() ;
return false ;
}
return true ;
}
-->
最后还想做一个小小的说明,对于注释<!-- -->,这是jsp的一个隐式注释,有些html编辑器可能不支持这种格式的显示,所以加上注释,为了是不影响html代码的显示。
5.ReplyOK.jsp,主要用于将回复的内容填入数据库,主要采用了批处理技术,并返回页面ShowArticleTree.jsp,也在服务器段监测了用户输入是否为空的现象。
6.Login.jsp,用于用户登录。采用session对象来判定是否为管理员登录,若为管理员也登录带有删除功能的ShowArticleTree页面。对于这个Login页面是自己写得一个很简陋的很平常的登录框,原想从网上当一个下来,再把代码改改,但最后以失败而告终,在项目进阶阶段争取完成这个心愿。
从网上当下来的登陆页面的代码主要要改两个地方,一个是编码很有可能不统一,到时无法正确显示中文,二是当下来的页面一般都有一个存放图片的文件夹,要把代码中的文件链接都修改到正确的地址。最主要是找到form所在的位置快速的修改,别的代码读不懂也没关系,学会利用Ctrl+f来寻找,也可以利用Negitive视图进行结构分析。最好的方法当然是放到Dreamwear里面直接修改页面即可。
7.Post.jsp,主要用于发表新帖,根据链接做数据库连接,采用批处理。但是还存在的一个问题,这个帖子提交后我如果采用response.sendRedirect()重定向则不能出现发表帖子的页面,在ShowArticleTree下面直接添加新的帖子上面全写着“Null”,无奈之下只好采用超链接实现,但是看上去很别扭。
8.Delete.jsp,该页面只允许管理员进入,利用session对象实现。并采用递归写del 函数。其中有一点非常值得注意,就是若删除的帖子还有别的回复怎么办,我们需要从数据库里取出以这个帖子为父帖子的帖子总共有多少条,进而进行分别处理。
快要断电了,今天先写到这里了,下一篇先做一个整体的总结后再写进阶阶段需要对这个项目做出哪些改进。