• 2006-05-13

    编写JSP/PHP+MySQL留言本

    Views: 16354 | No 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/ 测试!

    Posted by ideawu at 2006-05-13 21:21:16
|<<<2345678910>>>| 10/10 Pages, 55 Results.