自己动手做论坛(一)

编程爱好者

编者按:随着Web2.0大潮的兴起,各种动态Web页面开发技术也越来越火热了。什么样的动态网页功能更强大呢?无疑,它应该是后台有强大数据库支撑,前台能随用户心意调整显示样式以及定制特殊功能的网页,另外,它还必须有灵活的交互功能。论坛就是典型的动态网页,因此从本期开始,我们将教大家用Java Server Pages(简称JSP)来做一个具有目前主流功能的论坛。示例中的所有程序源代码可以到http://download.cpcw.com/下载。

论坛作为互联网上一个重要的交流平台,早已家喻户晓。今天我们就来做一个基于JSP的论坛,从而让你能够更深入地了解JSP技术和动态网页开发过程的知识。

一、为什么选择JSP

JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。 在传统的网页HTML文件(*htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式动态返回给客户。程序片段可以操作数据库、重新定向网页以及发送 E-mail 等等,这就是建立动态网页所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无Java Applet,甚至无Frame。

为什么我们选择JSP而不选择ASP等工具呢?因为JSP相对ASP有三大优势,这在后面的开发中大家将会看到:

1.JSP的效率和安全性更高;

2.JSP的组件(Component)方式更方便;

3.JSP的适应平台更广。

今天我们所用到的工具有:dreamwaver2004、Gel(an IDE for java)or Eclipse、resion3.0、Access2000

二、功能分析

让我们先来简单地分析一下作为一个论坛所应具备的主流功能,如图1所示。

37-f16-1.jpg

1.用户

可以注册、登录及更改自己的个人信息和密码,具有查看、修改、回复帖子的功能。

2.后台管理

可以添加、删除论坛模块;可以修改、删除用户信息;可以编辑删除论坛帖子。

3.发表的帖子

能够显示帖子的发表日期,点击数等。

三、改良的数据库设计

数据库是一个论坛系统中特别重要的部分,数据库设计的好坏直接影响到系统的稳定。举个不好的设计方式例子。标题行为数据库的各个字段,下面的为数据库中的内容(如表1所示):

37-f16-b1.jpg

这样的设计,有个非常大的缺陷,当数据库中的数据内容多到一定的程度,就会产生过多的数据冗余,严重时直接导致数据库崩溃,使得整个系统瘫痪。

在实际的系统开发中,为了解决上述问题,我们需要在数据库中多建立几张表,并使有联系的表与表之间产生关联。可以采用一对一、一对多,或者多对多的方式,按照上面的方法,我们可以把上面有问题的数据库改为下面几张表:

37-f16-b2.jpg

这样就使得我们的数据库性能有所提高而且易于管理与维护,当然我们还可以将数据库中的表分得更细一点,这里不再赘述了,此论坛系统也按照这样的方法去设计数据库,详细结构如下:

37-f16-b3.jpg

四、设计模块程序

37-f16-b4.jpg

1.数据库的连接

整个论坛系统中的每一步操作基本上都要对数据库进行读写,这需要频繁地连接数据库,为了安全、高效,实现代码的重用性,我们采用javaBean对数据库的连接、操作进行封装(注:在实际的软件开发中基本上都是采用连接池的方式来对数据库进行操作的),为了给大家演示起来方便,我们所用的数据库为Access2000,连接方式为jdbc-odbc桥的直连,代码如下:

DbConnect.java

package bbs;

import java.sql.*;

public class DbConnect

{public Connection con=null;

public ResultSet rs=null;

public Statement sta=null;

public DbConnect()

{try

{

//添加jdbc-odbc驱动,不同的数据库所要用到的驱动也是不同的

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//数据库的连接地址

con=DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\BBS\\WEB-INF\\classes\\bbs.mdb");

sta=con.createStatement();

}

catch(Exception e)

{System.out.println(e);

}

}

/* 查询数据库,返回结果集 */

public ResultSet getRs(String sql)

{try

{rs=sta.executeQuery(sql);}

catch(Exception e)

{System.out.println(e);}

return rs;}

/* 添加、删除、修改数据都可以用此方法进行操作 */

public void UpdateRecord(String sql) throws SQLException

{try

{sta.executeUpdate(sql);}

catch(Exception e)

{System.out.println(e);}

}

public void close()

{

try

{con.close();

sta.close();}

catch(Exception e)

{System.out.println(e);}

}

}

javaBean写好了之后,我们就可以在jsp文件中用动作指令来使用之,从而在极大程度上实现了静态内容与动态内容的分离,发挥了jsp的优点。