Java:簡易BBSサーブレット [勉強]
以前から何度か当ブログに名前だけ登場している「簡易BBSサーブレット」ですが、とりあえずソースをUPしますかねぇ。
入力画面は、こんな感じです。
(tomcat起動して、localhost:8080/mores/BBSServletへアクセス)
以下、簡易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();
}
}
}
と、職業訓練で授業中に、課題として「文字に色をつける」、「発言者名がクッキーにあったら発言者名の入力フォームを非表示」、「その再表示用ボタンを実装」、「過去ログも各色で表示」、「緑削除機能の実装」を出されて、それを追加したモノです。
こんな感じの画面になる・・・ハズです。
さて・・・しゃくれアゴKnowledgeDatabaseができる日は、いつだっ!?
コメント 0