SSブログ

Java:簡易BBSサーブレット [勉強]

以前から何度か当ブログに名前だけ登場している「簡易BBSサーブレット」ですが、とりあえずソースをUPしますかねぇ。

入力画面は、こんな感じです。
(tomcat起動して、localhost:8080/mores/BBSServletへアクセス)

20101003_Java_Enshu[00].JPG 

 

以下、簡易BBSサーブレットのソースです。
---------------------------

▼BBSMessage.java



package init;

public class BBSMessage {

 private String user;
 private String message;
 private String color;

 public BBSMessage() {
 }
 public String getMessage() {
  return message;
 }
 public void setMessage(String message) {
  this.message = message;
 }
 public String getUser() {
  return user;
 }
 public void setUser(String user) {
  this.user = user;
 }
 public String getColor() {
  return color;
 }
 public void setColor(String color) {
  this.color = color;
 }
}

 

↑のソースが、Beansみたいな感じ?

で・・・以下が本体のBBSサーブレットのソースです。
▼BBSServlet.java


package init;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BBSServlet extends HttpServlet {

 private List chatList;

 final static String FILE_PATH = "WEB-INF/bbs.dat";

 public void init() throws ServletException {

  chatList = new Vector();

  String path = getServletContext().getRealPath(FILE_PATH);

  File file = new File(path);
  if (!file.exists()) {
   try {
    PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(path)));
    writer.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  try {
   BufferedReader reader = new BufferedReader(new FileReader(path));
   String line;
   while((line = reader.readLine()) != null) {
    String[] log = line.split(":");
    BBSMessage newBM = new BBSMessage();
    newBM.setUser(log[0]);
    newBM.setMessage(log[1]);
    newBM.setColor(log[2]);
    chatList.add(newBM);
   }

  reader.close();

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  response.setContentType("text/plain; charset=Windows-31J");
  PrintWriter out = response.getWriter();

  //入力パラメータの取得
  String user = request.getParameter("user");   //発言者
  String message = request.getParameter("message"); //発言内容(メッセージ)
  String color = request.getParameter("color");  //文字の色
  String delete = request.getParameter("delete");  //ユーザー入力フォームの表示/非表示用
  String logdel = request.getParameter("logdel");  //発言ログの削除

  //クッキーの取得(なければ作成)
  if (user == null || user.length() == 0) {
   Cookie[] cookies = request.getCookies();
   if (cookies != null) {
    for (int i = 0; i < cookies.length; i++) {
     Cookie cookie = cookies[i];
     if (cookie.getName().equals("user")) {
      if ("true".equals(delete)) {
       cookie.setMaxAge(0); //クッキー削除
       response.addCookie(cookie);
       user = null;
      } else {
       String value = cookie.getValue();
       user = URLDecoder.decode(value, "Windows-31J");
      }
     }
    }
   }
  } else {
   String value = URLEncoder.encode(user, "Windows-31J");
   Cookie cookie = new Cookie("user", value);
   cookie.setMaxAge(60 * 60 * 24 * 5);
   response.addCookie(cookie);
  }

  //入力があったときは、chatListに入力の発言を追加
  if (message != null && message.length() != 0) {
   BBSMessage newBM = new BBSMessage();
   newBM.setUser(user);
   newBM.setMessage(message);
   newBM.setColor(color);
   chatList.add(newBM);
  }

  //ログ削除
  if (logdel != null ) {
   BBSMessage newBM = new BBSMessage();
   chatList.clear();
  }

  //以下は出力
  out.println("<html><body>");
  String uri = request.getRequestURI();
  out.println("<a href=\"" + uri + "\">リロード</a>");
  out.println("<form action=\"" + uri + "\">");
  if (user == null || user.length() == 0) {
   out.println("名前<input type=\"text\" name=\"user\" " + "value=\"" + (user != null ? user : "") + "\"><br>");
  }

  out.println("メッセージ<input type=\"text\" name=\"message\" size=\"60\"><br>");

  if ("black".equals(color) || color == null) {
   out.println("文字の色: 黒<input type=\"radio\" name=\"color\" value=\"black\" checked>");
  } else {
   out.println("文字の色: 黒<input type=\"radio\" name=\"color\" value=\"black\">");
  }
  if ("red".equals(color)) {
   out.println("赤<input type=\"radio\" name=\"color\" value=\"red\" checked>");
  } else {
   out.println("赤<input type=\"radio\" name=\"color\" value=\"red\">");
  }
  if ("blue".equals(color)) {
   out.println("青<input type=\"radio\" name=\"color\" value=\"blue\" checked>");
  } else {
   out.println("青<input type=\"radio\" name=\"color\" value=\"blue\">");
  }
  if ("green".equals(color)) {
   out.println("緑<input type=\"radio\" name=\"color\" value=\"green\" checked>");
  } else {
   out.println("緑<input type=\"radio\" name=\"color\" value=\"green\">");
  }

  out.println("<br>");
  out.println("<input type=\"hidden\" name=\"delete\" value=\"false\"><br>");
  out.println("<input type=\"submit\" value=\"発言\">");
  out.println("</form>");

  out.println("<form action=\"" + uri + "\">");
  out.println("<input type=\"hidden\" name=\"delete\" value=\"true\">");
  out.println("<input type=\"submit\" value=\"名前削除\">");
  out.println("</form>");

  out.println("<form action=\"" + uri + "\">");
  out.println("<input type=\"checkbox\" name=\"logdel\" value=\"delall\">全てのログ削除");
  out.println("<input type=\"hidden\" name=\"delete\" value=\"false\">");
  out.println("<input type=\"submit\" name=\"logdel\" value=\"ログ削除\">");
  out.println("</form>");


  //chatListの一覧をテーブル出力
  out.println("<table>");
  for (int i = chatList.size() - 1; i >= 0; i--) {
   BBSMessage cm = (BBSMessage)chatList.get(i);
   color = cm.getColor();
   out.println("<tr>");
   out.println("<td><font color=\"" + color + "\">" + cm.getUser());
   out.println("<td><font color=\"" + color + "\">:" + cm.getMessage());
  }
  out.println("</table>");
  out.println("</body></html>");
 }

 public void destroy() {

  String path = getServletContext().getRealPath(FILE_PATH);

  try {
   PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(path)));

   for (int i = 0; i < chatList.size(); i++) {
    BBSMessage cm = (BBSMessage)chatList.get(i);
    writer.println(cm.getUser() + ":" + cm.getMessage() + ":" + cm.getColor());
   }

   writer.close();

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }

 }

}

 

と、職業訓練で授業中に、課題として「文字に色をつける」、「発言者名がクッキーにあったら発言者名の入力フォームを非表示」、「その再表示用ボタンを実装」、「過去ログも各色で表示」、「緑削除機能の実装」を出されて、それを追加したモノです。

こんな感じの画面になる・・・ハズです。
20101003_Java_Enshu[01].JPG

 

 

さて・・・しゃくれアゴKnowledgeDatabaseができる日は、いつだっ!?

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:資格・学び

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。