2006-05-13

编写JSP/PHP+MySQL留言本

Views: 21748 | Add Comments

前几天想好基本框架,今天“形势与政治”课上把类的结构写好了。相信几天之内就可以做出。我先写JSP版本的,然后再写PHP版本。因为JSP代码相对PHP代码更好控制。

我将尽量把该留言本做得结构简单,开放,容易复用。然后别人通过使用CSS生成不同的版本。我希望它成为最流行的留言本,无论是用来学习JSP/PHP还是实际应用。

一条留言的结构是这样:

Message:
int id;
int status;//我定义status越大,权限越开放。
String time;
String ip;
String name;
String address;
String msg;
String reply;

留言本的使用者有游客(Visitor)和管理员(Admin),游客的方法有:

Visitor:
Message read(int id);
Message[] read(int from, int size);
int write(Message msg);

管理员的方法有:

Admin:
Message read(int id);
Message[] read(int from, int size);
int write(Message msg);
int delete(int id);
int delete(int[] ids);
int reply(int id, String reply);

虽然Visitor和Admin的方法有重复,不过我还是将它们分得很清晰。如果Admin想管理,那么他就应该到后台。只要在前台,所有人都是Visitor,而不是生成Visitor的前台和Admin的前台。

Visitor和Admin不直接运行SQL语句,而是调用一个DatabaseManager的方法。

DatabaseManager:
Message getMsg(int id);
Message[] getMsgArray(int from, int size, int minstatus);//这里的status是一个下界
int getMsgCount(int minstatus);
boolean saveMsg(Message msg);
boolean addReply(String reply);
boolean deleteMsg(int id);
int deleteMsgOf(int[] ids);
void close();

每使用DatabaseManager一次,用户必须手动运行close()。这样做而不是在getMsgArray()中关闭数据库的连接是因为创建连接的花销非常大。

还将建立一个Authority类进行权限管理,目前所知,这个类的功能将很简单,就是基于IP的anti spam。

Authority:
int getReadMod(String ip);
int getWriteMod(String ip);

到这里,一个留言本已经能工作了。为了处理格式化文本和防止恶意留言,增加两个类MsgFilter和MsgFormater。

MsgFilter:
String filterName(String name);
String filterAddress(String addr)
String filterMsg(String msg);
String filterReply(String reply);
String filter(String text);//如果是恶意内容,返回null

MsgFormater:
String formatMsg(String msg);
String formatReply(String reply);

因为留言的保存是间歇性的,所以即使我们把MsgFilter和MsgFormater写得复杂也不会影响速度。保存在数据库中的内容都是格式化好的HTML代码,所以浏览留言的速度应该非常快。

2006-05-13,以后将补充。

2006-05-15,已经写好,剩下的只有排版了。

2006-05-17,已经在 http://www.ideawu.net/person/ideabook/ 测试!

Related posts:

  1. Web应用中基于组的用户权限管理在Spring框架下的实现
  2. 软件体系结构模式-层
  3. C++ const& 的坑
  4. 在Linux进行IO的正确姿势
  5. 要记得清除 sockaddr_in
Posted by ideawu at 2006-05-13 21:21:16

Leave a Comment