Servlet日記(1999/07/10)

本日の成果

 ひさびさに、更新してみました。今回は、以前作成した簡易掲示板もどきを、もう少し、ましな実装にしたつもりです。機能的には変わりません。

 変更点としては、メッセージの管理を独自の連結リストの代わりにVectorを使うようして、それに伴い色々な点をそれに合わせたことと、メッセージのメソッドにsynchronizedを指定したことがあります。それ以外は変更していないので、相変わらず使い物にならないことに変わりはありません ^^;

import  java.io.*;
import  java.util.*;
import  javax.servlet.*;
import  javax.servlet.http.*;

class BbsMsg {
        private static Vector msgVec = new Vector();

        private String msgName;
        private String msgSubject;
        private String msgContent;
        private Date msgDate;

        BbsMsg(String nam, String subj, String cont) {
                msgVec.addElement(this);
                setName(nam);
                setSubject(subj);
                setContent(cont);
                setDate(new Date());
        }

        synchronized static void deleteMsg(int msgNo) {
                msgVec.removeElementAt(msgNo);
        }

        synchronized static BbsMsg getMsg(int msgNo) {
                return (BbsMsg)msgVec.elementAt(msgNo);
        }

        synchronized static Enumeration getAllMsgs() {
                return msgVec.elements();
        }

        synchronized static int getMsgNo(BbsMsg msg) {
                return msgVec.indexOf(msg);
        }

        synchronized String getName() {
                return msgName;
        }
        synchronized void setName(String nam) {
                msgName = nam;
        }
        synchronized String getSubject() {
                return msgSubject;
        }
        synchronized void setSubject(String subj) {
                msgSubject = subj;
        }
        synchronized String getContent() {
                return msgContent;
        }
        synchronized void setContent(String cont) {
                msgContent = cont;
        }
        synchronized Date getDate() {
                return msgDate;
        }
        synchronized private void setDate(Date date) {
                msgDate = date;
        }
}

public class Bbs04 extends HttpServlet {
        public void doGet(
                HttpServletRequest req,
                HttpServletResponse res
        ) throws ServletException, IOException
        {
                String cmd = req.getParameter("cmd");
                String msgNoStr = req.getParameter("msgno");
                String url;
                BbsMsg msg;
                BbsMsg refMsg;

                refMsg = null;
                if ("delete".equals(cmd))
                        BbsMsg.deleteMsg(Integer.parseInt(msgNoStr));
                else if ("reply".equals(cmd))
                        refMsg = BbsMsg.getMsg(Integer.parseInt(msgNoStr));

                res.setContentType("text/html");
                PrintWriter out = res.getWriter();
                out.println("<html><head><title>BBS Servlet Ver 0.4</title></head>");
                out.println("<body><form method=post action=\"" + req.getRequestURI() + "\">");
                out.println("<table><tr><th>name<td><input type=text name=\"uName\">");
                out.println("<tr><th>subject<td><input type=text name=\"uSubject\"");
                if ("reply".equals(cmd))
                        out.println(" value=\"Re: " + refMsg.getSubject() + "\"");
                out.println(">");
                out.println("<tr><th>content<td><textarea name=\"uContent\"rows=5 cols=40>");
                if ("reply".equals(cmd))
                        out.println("\n----------\n" + refMsg.getContent());
                out.println("</textarea></table>");
                out.println("<input type=submit value=\"Post\"></form><hr>");

                url = req.getRequestURI();
                Enumeration e = BbsMsg.getAllMsgs();
                while (e.hasMoreElements()) {
                        msg = (BbsMsg)e.nextElement();
                        out.println(
                            "No. " + BbsMsg.getMsgNo(msg)
                          + " <a href=\"" + url + "?cmd=reply&msgno=" + BbsMsg.getMsgNo(msg) + "\">reply</a>"
                          + " <a href=\"" + url + "?cmd=delete&msgno=" + BbsMsg.getMsgNo(msg) + "\">delete</a><br>"
                          + "<dl><dt>Name:<dd>" + msg.getName()
                          + "<dt>Subject:<dd>" + msg.getSubject()
                          + "<dt>Date:<dd>" + msg.getDate()
                          + "<dt>Content:<dd><pre>" + msg.getContent()
                          + "</pre></dl><hr>"
                        );
                }

                out.println("</body></html>");
                out.close();
        }

        public void doPost(
                HttpServletRequest req,
                HttpServletResponse res
        ) throws ServletException, IOException
        {
                new BbsMsg(
                        req.getParameter("uName"),
                        req.getParameter("uSubject"),
                        req.getParameter("uContent")
                );

                doGet(req, res);
        }

        public String getServletInfo() {
                return "BBS Servlet Ver 0.4";
        }
}

本日の教訓

 あまりにもひさしぶりなので、操作方法などをすっかり忘れてしまい、この日記の最初の方を読み直して思い出しました。やはり、記録は残すものです。

Servlet日記(1999/04/25) Servlet日記の目次 Servlet日記(1999/07/17)