java 簡易チャット サーブレットについて
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 3,333
前提・実現したいこと
名前と内容をテキストフィールドに書き込み投稿ボタンを押すと下に
投稿番号、名前、内容が表示されるようなサーブレットを書きたいのですがうまくいきません。
実行するとトップのページは表示されるのですが内容を入力して投稿を押しても何も変わらないままです。
javaを勉強中なのですがjspは使わずサーブレットだけで作りたいです。
どのように訂正したらいいでしょうか。
ご教授お願いします。
サーブレット
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Chat")
public class Chat extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public Chat() {
super();
}
@Override
protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
this.doPost( request, response );
}
@SuppressWarnings("unused")
@Override
protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" ); //HTML出力
request.setCharacterEncoding( "UTF-8" );
ArrayList<Chatclass> chatList = new ArrayList<>(); //ArrayListの生成
ServletContext chatapp = this.getServletContext(); //ServletContextインスタンスの取得
String name = "";
String body;
String setting;
if ( chatapp.getAttribute( "chatList" ) != null ) {
chatList = (ArrayList<Chatclass>) chatapp.getAttribute( "chatList" ); //アプリケーションスコープからインスタンスを取得
name = request.getParameter( "Name" );
body = request.getParameter( "Body" );
setting = request.getParameter( "setting" );
if ( request.getParameter( "Name" ) != "" && request.getParameter( "Body" ) != "" && request.getParameter( "Name" ) != null && request.getParameter( "Body" ) != null ) {
chatList.add( new Chatclass( name, body ) );
}
}
int number = 5;
if ( request.getParameter( "num" ) != null ) {
number = Integer.parseInt( request.getParameter( "num" ) );
}
PrintWriter out = response.getWriter();
out.println( "<html>" );
out.println( "<head>" );
out.println( "<title>Chat</title>" );
out.println( "</head>" );
out.println( "<body>" );
out.println( "<h1>簡易チャット</h1>" );
out.println( "<form action='/TomcatTest/Chat' method='post'>" );
out.println( "名前 : <input type=text name=\"name\" size=15>" );
out.println( "<br>" );
out.println( "<input type=text name=\"body\" size=30>" );
out.println( "<input type=submit value=\"投稿\" name=do >" );
out.println( "<input type=submit value=\"再読み込み\" name=reload>" );
out.println( "<br>" );
out.println( "表示件数:<input type ='number' name='num' value ='5' min='1' max='30' step='1'>行" );
out.println( "<input type ='submit' value ='設定' name='setting' >" );
out.println( "</form>" );
System.out.println( "dd" );
System.out.println( chatList.size() );
for ( int i = 0; i < chatList.size(); i++ ) {
System.out.println( "ss" );
out.println( ( chatList.size() - i ) + "" + chatList.get( chatList.size() - i ).getName() + "" + chatList.get( chatList.size() - i ).getBody() );
System.out.println( "mm" );
if ( i == number - 1 ) {
break;
}
}
out.println( "</body>" );
out.println( "</html>" ); //HTMLを終了
chatapp.setAttribute( "chatList", chatList ); //アプリケーションスコープにインスタンスを保存
}
}
クラス
public class Chatclass {
private String name = "";
private String body = "";
public Chatclass( String name, String body ) {
this.name = name;
this.body = body;
}
public String getBody() {
return body;
}
public String getName() {
return name;
}
}
補足情報(言語/FW/ツール等のバージョンなど)
java
eclipse
Tomcat
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
HTMLでの<input>タグのname属性と、受け取るservlet側でのgetAttributeの指定が異なることで、想定しているように動かないようです。
- <input>タグのname属性: name
- servletのgetAttribute指定: Name
※大文字、小文字の問題
まずは上記の指定をそろえてみると前進するかと思います。
またeclipseではデバッグ実行(ステップ実行)という機能があり、処理中の変数の中身などが処理中に確認できます。こちらの機能を利用するとよりデバッグがしやすいかと思います。
- http://www.javaroad.jp/opensource/js_eclipse7.htm
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/18 14:11
回答ありがとうございます。
大文字小文字の間違いと記述ミスがありました。
デバッグがあまり使い方がわからなくほとんど使っていなかったのでこれを機に
勉強しデバッグを利用しながら勉強していきます。
2016/05/18 14:20
使い方を覚えると開発やデバッグがとても早くなりますのでおすすめですよ。