質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

5291閲覧

JSP submitの分岐 簡単なチャットアプリケーション

khr0404

総合スコア43

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/06/02 01:00

###前提・実現したいこと
閲覧頂きありがとうございます。

現在java研修中で、簡単なローカルホストで動くチャットアプリケーションをつくっています。

下のソースで(関係あるところだけ抜き出しています、足りない情報があれば仰ってください)実行すると投稿内容が表示されず投稿もされない状態です。

サーブレットクラスの

if ( "設定".equals( act ) ) {
を書かなければ実行はできるのですが、投稿ボタンと設定ボタンの区別がつかなくなってしまいます。
(同じsubmitでサーブレットで分岐を書いていないので当たり前なのですが。。。)
設定ボタンではJSPの<button type="submit" value=" 投稿 " name=act>投稿</button>
で入力した表示件数のみを変更する処理をしたいです。

javascriptは勉強を始めたばかりです

参考書などを見てもあまり例が書いていなく自分で訂正しても行き詰ってしまいました。

どうかご教授お願い致します。

###JSP

java

1<%ArrayList<Contribution> chatList = (ArrayList<Contribution>) application.getAttribute( "chatList" ); %> 2<% int aList =(Integer)application.getAttribute( "aList" ); %> 3<% %> 4<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5<html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>チャット</title> 9 <h1>チャットDAO</h1> 10 </head> 11<body> 12<% Date date = new Date(); 13 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, 14 DateFormat.MEDIUM); %> 15 <%=df.format(date) %> 16 17 18 <form action="/Test/Chat1" method="post"> 19 ID: <input type="text" name = "Id" value = "" size=20> 20 <br> 21 タイトル:<input type="text" name="Title" value="" size=20> 22 <br> 23 本文: <input type="text" name = "Body" value = "" size=40> 24 <br> 25 <br> 26 <button type="submit" value=" 投稿 " name=act>投稿</button> 27 <button type="button" onclick="location.replace(location.href)" value="ページを更新">ページを更新</button> 28 <br> 29 表示行数:<input type="number" name="num" value="5" min="1" max="100" step="1">30 <button type="submit" value=" 設定 " name=act>設定</button> 31 </form> 32 33 <% int CLS =chatList.size(); 34 for( int i = 0; i < chatList.size(); i++ ) {%> 35 36 37 <%="ID:"%><%=chatList.get(CLS-1-i).getId()%> 38 39 <%=" タイトル:"%><%=chatList.get( CLS - 1 - i ).getTitle()%> 40 <%=" "%><%=chatList.get( CLS-1-i ).getDatetime( ) %> 41 <br> 42 <%=chatList.get(CLS - 1 - i ).getBody()%> 43 <br> 44 45<br> 46<hr style="border-top: 2px dotted #ff9d9d;width: 100%;"> 47<%} 48%> 49<br> 50</body> 51</html>

###サーブレット

java

1public class Chat1 extends HttpServlet { 2 3 4 private static final long serialVersionUID = 1L; 5 6 7 public Chat1() { 8 9 super(); 10 11 } 12 13 14 @Override 15 protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { 16 17 this.doPost( request, response ); 18 19 } 20 21 22 @Override 23 protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { 24 25 26 response.setContentType( "text/html; charset=UTF-8" );//HTML出力 27 request.setCharacterEncoding( "UTF-8" ); 28 29 30 try { 31 ServletContext application = this.getServletContext();//ServletContextインスタンスの取得 32 33 ServletConfig sconfig = getServletConfig(); 34 String primary = sconfig.getInitParameter( "chat" ); 35 36 if ( primary == null ) { 37 primary = (String) application.getAttribute( "初期値" ); 38 } 39 40 ChatDataDAO_CHAT CDC = (ChatDataDAO_CHAT) Class.forName( primary ).newInstance(); 41 42 ArrayList<Contribution> chatList = new ArrayList<Contribution>();//ArrayListの生成 43 String id = request.getParameter( "Id" ); 44 String title = request.getParameter( "Title" ); 45 String body = request.getParameter( "Body" ); 46 Date date = new Date(); 47 48 String datetime = dateString( date ); 49 50 51 if ( title != "" && body != "" && title != null && body != null && id != "" && id != null ) { 52 53 54 CDC.addContribution( new Contribution( id, title, body, datetime ) ); 55 } 56 57 58 int number = 5; 59 String num = request.getParameter( "num" ); 60 61 int aList = CDC.dataList.size(); 62 63 String act = request.getParameter( "act" ); 64 65 if ( "設定".equals( act ) ) { 66 67 68 if ( num != null ) { 69 70 number = Integer.parseInt( num ); 71 } 72 73 chatList = CDC.getContribution( number ); 74 75 } 76 application.setAttribute( "chatList", chatList );//アプリケーションスコープにインスタンスを保存 77 78 application.setAttribute( "初期値", primary );//アプリケーションスコープにインスタンスを保存 79 80 81 application.setAttribute( "aList", aList ); 82 83 84 RequestDispatcher dispatch = request.getRequestDispatcher( "/ChatOutput.jsp" ); 85 dispatch.forward( request, response ); 86 87 88 } catch ( InstantiationException e ) { 89 90 e.printStackTrace(); 91 } catch ( IllegalAccessException e ) { 92 93 e.printStackTrace(); 94 } catch ( ClassNotFoundException e ) { 95 96 e.printStackTrace(); 97 } finally { 98 System.out.println( "finally処置" ); 99 } 100 101 } 102 103 static public final String DATE_PATTERN = "yyyy/MM/dd HH:mm:ss"; 104 105 106 public static String dateString( Date date ) { 107 108 String str; 109 if ( date == null ) { 110 str = null; 111 } else { 112 str = new SimpleDateFormat( DATE_PATTERN ).format( date ); 113 } 114 return str; 115 } 116 117} 118

###DAOクラス

java

1 public ChatDataDAO_CHAT() { 2 3 4 Connection conn = null; 5 6 try { 7 //データベースへ接続 8 Class.forName( DRIVER_NAME );//JDBCドライバーダウンロード 9 10 conn = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );//データベース接続 11 12 String sql = "SELECT * FROM CHAT"; //SELECT文の準備 13 14 PreparedStatement pStmt = conn.prepareStatement( sql );//preparedstatement作成 15 16 ResultSet result = pStmt.executeQuery(); 17 18 19 String id = ""; 20 String title = ""; 21 String body = ""; 22 String datetime = ""; 23 24 while ( result.next() ) { 25 id = result.getString( "ID" ); 26 title = result.getString( "TITLE" ); 27 body = result.getString( "BODY" ); 28 datetime = result.getString( "DATE" ); 29 30 dataList.add( new Contribution( id, title, body, datetime ) ); 31 32 33 } 34 35 36 } catch ( SQLException e ) { 37 e.printStackTrace(); 38 } catch ( ClassNotFoundException e ) { 39 e.printStackTrace(); 40 } finally { 41 try { 42 if ( conn != null ) { 43 conn.close(); //データベースの切断 44 45 46 } 47 } catch ( SQLException e ) { 48 e.printStackTrace(); 49 } 50 } 51 } 52 53 54 //投稿情報をdataListメンバに追加し、DBへ保存する 55 @Override 56 public void addContribution( Contribution c ) { 57 58 59 dataList.add( c ); 60 61 Connection conn = null; 62 63 try { 64 //データベースへ接続 65 Class.forName( DRIVER_NAME );//JDBCドライバーダウンロード 66 67 conn = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );//データベース接続 68 69 String sql = "INSERT INTO CHAT VALUES(? , ? , ? ,? )"; //INSERT文の準備 70 71 PreparedStatement pStmt = conn.prepareStatement( sql );//preparedstatement作成 72 73 74 pStmt.setString( 1, c.getId() ); 75 pStmt.setString( 2, c.getTitle() ); 76 pStmt.setString( 3, c.getBody() ); 77 78 pStmt.setString( 4, c.getDatetime() ); 79 80 System.out.println( c.getBody() ); 81 System.out.println(); 82 System.out.println( c.getDatetime() ); 83 84 int result = pStmt.executeUpdate(); 85 86 87 } catch ( SQLException e ) { 88 e.printStackTrace(); 89 } catch ( ClassNotFoundException e ) { 90 e.printStackTrace(); 91 } finally { 92 try { 93 if ( conn != null ) { 94 conn.close(); //データベースの切断 95 96 97 } 98 } catch ( SQLException e ) { 99 e.printStackTrace(); 100 } 101 } 102 } 103 104 105 //dataListからcount件数文の投稿データを保持したListに返却する 106 @Override 107 public ArrayList<Contribution> getContribution( int count ) { 108 109 ArrayList<Contribution> aList = new ArrayList<Contribution>(); 110 int DLS = dataList.size(); 111 112 if ( DLS < count ) { 113 for ( int j = 0; j < DLS; j++ ) 114 aList.add( dataList.get( j ) ); 115 } else { 116 for ( int j = DLS - count; j < DLS; j++ ) { 117 aList.add( dataList.get( j ) ); 118 119 } 120 } 121 return aList; 122 123 } 124 125} 126

###補足情報(言語/FW/ツール等のバージョンなど)
eclipse 4.3
JDK 1.7
Tomcat 7
DB = H2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

servletのchatListは投稿が押下された場合に、newされるだけでchatListには何も保存されていません。
何も保存されていないchatListをapplication.setAttributeに上書きしているだけです。

また設定押下に関しても以下が気になります。
以下のHTMLのvalueにspaceが入っているので"設定".equals( act )が真にならないと思います。

HTML

1<button type="submit" value=" 設定 " name=act>設定</button>

投稿2016/06/02 03:52

omochi

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khr0404

2016/06/03 05:16

omochiさん 回答ありがとうございます。 設定のほうではなく投稿のほうの記述をContributionに追加する記述の前に入れました。 設定だけの分岐処理が出来なかったのが心残りなので時間があるとき勉強してみようと思います。 ありがとうございました。
guest

0

解決できました。

設定のボタンで表示件数のみを変更する処理より
投稿ボタンを押したときのみ投稿する処理に変えました。

java

1 2 if ( title != "" && body != "" && title != null && body != null && id != "" && id != null ) { 3 4 if ( act.equals( "投稿" ) ) { 5 CDC.addContribution( new Contribution( id, title, body, datetime ) ); 6 } 7 } 8 9

投稿2016/06/03 05:14

khr0404

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問