質問編集履歴

4 追記情報

退会済みユーザー

退会済みユーザー

2016/08/02 15:09  投稿

サーブレット/jspについて
お世話になります。
表題について質問です。
いまMySQLに保存してある{int型 id, string型 name, string型 text}の3つを取得し、jspで出力を行おうとしています。
使用しているファイルは、
GetMutterListLogic.java(BO)
Mutter.java(javaBeans)
Main.java(サーブレット)
MutterDAO.java(DAO)
main.jsp
です。
流れとして、
①GetMutterListLogic.javaとMutterDAO.javaを使用して、DBから情報を取得し、Main.javaで受け取ります。そして、②受け取ったものをリクエストスコープに登録し、jspで登録したものを取り出す。といった流れです。
しかし、②で情報は取得できているのかがわかりません。
というのも、jsp側で、
List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
として受け取っているつもりなのですが、<%= mutterList %>をすると[]とだけ表示されます。また、<%= mutterList.size() %>とすると0と表示されます。
これは恐らく情報が取得できていないんだろうなと思うのですが、ディレクトリ構造のmodelパッケージの同階層にtestパッケージを作り、その中にテスト用のクラスを作り下記のように実行したところ、しっかりと出力されました。
何か原因がわかる方ご教授のほどお願い致します。
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       
       for( Mutter mutter : mutterList ) {
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
出力結果
接続...ok
rin:wanwanwan!!!
pun:wan!
*/
```
------
**__ここから実際のソースコード__**
```java
// Main.java
GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
```
```java
// GetMutterListLogic.java
package model;
import java.util.List;
import dao.MutterDAO;
public class GetMutterListLogic{
   public List< Mutter > execute(){
       MutterDAO dao = new MutterDAO();
       List< Mutter > mutterList = dao.findAll();
       return mutterList;
   }
   
}
```
```java
// main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
   
<%@ page import="model.User, java.util.List, model.Mutter" %>
<%
   User loginUser = (User) request.getAttribute( "loginUser" );
   List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
   String errorMsg = (String) request.getAttribute( "errorMsg" );
%>
   
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>つぶやくやつ</title>
</head>
<body>
<h3>メイン</h3>
<a href="/docoTsubu/Logout">ログアウト</a>
<p><a href="/docoTsubu/Main">更新</a></p>
<form action="/docoTsubu/Main" method="post">
   <input type="text" name="text"/>   
   <input type="submit" value="つぶやく"/>
</form>
<% if(mutterList != null){%>
       つぶやきはあります。
       <%= mutterList.size()%> 件
<% } else { %>
       <p>つぶやいてみよう!</p>
<% } %>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
/********
出力結果
つぶやきはあります。 0 件
******/
```
---
追記情報です。
```java
package servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.GetMutterListLogic;
import model.Mutter;
import model.PostMutterLogic;
import model.User;
@WebServlet( "/Main" )
public class Main extends HttpServlet{
   private static final long serialVersionUID = 1L;
   
   protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       // DBからつぶやきリストを取得→リクエストスコープに保存
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       // ここでセッションIDをキーにインスタンスを取得
       HttpSession session = request.getSession();
       User loginUser = ( User ) session.getAttribute( "loginUser" );
       
       if( loginUser == null ) {
           response.sendRedirect( "/docoTsubu/" );
       } else {
           RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
           dispatcher.forward( request, response );
       }
       
   }
   
   protected void doPost( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       String text = request.getParameter( "text" );
       
       if( text != null && text.length() != 0 ) {
           HttpSession session = request.getSession();
           User loginUser = ( User ) request.getAttribute( "loginUser" );
           
           Mutter mutter = new Mutter( loginUser.getName(), text );
           PostMutterLogic pm = new PostMutterLogic();
           pm.execute( mutter );
           
       } else {
           request.setAttribute( "errorMsg", "つぶやきが入力されていません" );
       }
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
       
   }
   
}
コード
```
---
追記2
下記にデバッグ結果を書きます
```java
protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       // ↑ブレークポイント
   }
/*
*   mutterList : ArrayList<E>
*      elementData : Object[0]
*      modCount : 0
*      size : 0
*
*/
```
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterLista = gm.execute();
       
       for( Mutter mutter : mutterLista ) {
                // ↑ブレークポイント
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
*
*    mutterList
*      elementData : Object[10]
*      modCount : 2
*      size : 2
*
*/
```
こう見ると、そもそもサーブレットクラスのMain.javaで取得ができていないようですね、、。
---
追記3
DAOクラスのfindAll()までデバッグを行いました。
結果、Test.javaではfindAll()でDBからの情報を取得し、しっかりと返り値を返しています。しかし、Main.javaではfindAll()ではtry{}が全てスキップしており、finally{}のみ実行されていました。(コードは最後に書きます)
関係しているファイルは最初に記載した通りで、今回の流れではDBにSELECT文しか送っておらず、かなり簡単なもののはずですが、どこがおかしいのか、、、。
```java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Mutter;
public class MutterDAO{
   private final String   DRIVER_NAME   = "com.mysql.jdbc.Driver";
   private final String   JDBC_URL   = "jdbc:mysql://localhost:8889/docoTsubu";
   private final String   DB_USER       = "○○○○○○○";
   private final String   DB_PASS       = "○○○○○○○";
   
   public List< Mutter > findAll(){
       Connection con = null;
       List< Mutter > mutterList = new ArrayList<>();
       
       try {
           Class.forName( DRIVER_NAME );
           con = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );
           
           // SQLの準備
           String sql = "SELECT id, name, text FROM mutter ORDER BY id DESC";
           PreparedStatement pstmt = con.prepareStatement( sql );
           ResultSet rs = pstmt.executeQuery();
           
           while( rs.next() ) {
               int id = rs.getInt( "id" );
               String userName = rs.getString( "name" );
               String text = rs.getString( "text" );
               Mutter mutter = new Mutter( id, userName, text );
               mutterList.add( mutter );
           }
           
       } catch ( ClassNotFoundException e ) {
           e.printStackTrace();
       } catch ( SQLException e ) {
           e.printStackTrace();
       } finally {
           if( con != null ) {
               try {
                   con.close();
                   
               } catch ( SQLException e ) {
                   e.printStackTrace();
               }
           }
       }
       
       return mutterList;
   }
   
   public boolean create( Mutter mutter ){
       Connection con = null;
       try {
           con = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );
           
           String sql = "INSERT INTO mutter( name, text ) VALUES( ?, ? )";
           PreparedStatement pstmt = con.prepareStatement( sql );
           pstmt.setString( 1, mutter.getUserName() );
           pstmt.setString( 2, mutter.getText() );
           
           int result = pstmt.executeUpdate();
           
           if( result != 1 ) {
               return false;
           }
           
       } catch ( SQLException e ) {
           e.printStackTrace();
       } finally {
           if( con != null ) {
               try {
                   con.close();
                   
               } catch ( SQLException e ) {
                   e.printStackTrace();
               }
           }
       }
       
       return true;
   }
   
}
```
```
追記4
Main.javaとTest.javaではDAOのfindAll()内の処理が異なるようです。
1 : Main.java、Test.javaはともにClass.forName( DRIVER_NAME );までは読み込む
2 : Main.javaはその後finally{}へ飛ぶ
3 : Test.javaは順調にcon = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );を読み込む
4 : 仮にClass.forName()でエラーを出していた場合、ClassNotFoundExceptionでエラーを捕捉していない
もはやソースコード上の問題なのか不明です。
  • Java

    17726 questions

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

  • JSP

    1173 questions

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

  • servlet

    588 questions

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

3 追記

退会済みユーザー

退会済みユーザー

2016/07/31 15:46  投稿

サーブレット/jspについて
お世話になります。
表題について質問です。
いまMySQLに保存してある{int型 id, string型 name, string型 text}の3つを取得し、jspで出力を行おうとしています。
使用しているファイルは、
GetMutterListLogic.java(BO)
Mutter.java(javaBeans)
Main.java(サーブレット)
MutterDAO.java(DAO)
main.jsp
です。
流れとして、
①GetMutterListLogic.javaとMutterDAO.javaを使用して、DBから情報を取得し、Main.javaで受け取ります。そして、②受け取ったものをリクエストスコープに登録し、jspで登録したものを取り出す。といった流れです。
しかし、②で情報は取得できているのかがわかりません。
というのも、jsp側で、
List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
として受け取っているつもりなのですが、<%= mutterList %>をすると[]とだけ表示されます。また、<%= mutterList.size() %>とすると0と表示されます。
これは恐らく情報が取得できていないんだろうなと思うのですが、ディレクトリ構造のmodelパッケージの同階層にtestパッケージを作り、その中にテスト用のクラスを作り下記のように実行したところ、しっかりと出力されました。
何か原因がわかる方ご教授のほどお願い致します。
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       
       for( Mutter mutter : mutterList ) {
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
出力結果
接続...ok
rin:wanwanwan!!!
pun:wan!
*/
```
------
**__ここから実際のソースコード__**
```java
// Main.java
GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
```
```java
// GetMutterListLogic.java
package model;
import java.util.List;
import dao.MutterDAO;
public class GetMutterListLogic{
   public List< Mutter > execute(){
       MutterDAO dao = new MutterDAO();
       List< Mutter > mutterList = dao.findAll();
       return mutterList;
   }
   
}
```
```java
// main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
   
<%@ page import="model.User, java.util.List, model.Mutter" %>
<%
   User loginUser = (User) request.getAttribute( "loginUser" );
   List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
   String errorMsg = (String) request.getAttribute( "errorMsg" );
%>
   
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>つぶやくやつ</title>
</head>
<body>
<h3>メイン</h3>
<a href="/docoTsubu/Logout">ログアウト</a>
<p><a href="/docoTsubu/Main">更新</a></p>
<form action="/docoTsubu/Main" method="post">
   <input type="text" name="text"/>   
   <input type="submit" value="つぶやく"/>
</form>
<% if(mutterList != null){%>
       つぶやきはあります。
       <%= mutterList.size()%> 件
<% } else { %>
       <p>つぶやいてみよう!</p>
<% } %>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
/********
出力結果
つぶやきはあります。 0 件
******/
```
---
追記情報です。
```java
package servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.GetMutterListLogic;
import model.Mutter;
import model.PostMutterLogic;
import model.User;
@WebServlet( "/Main" )
public class Main extends HttpServlet{
   private static final long serialVersionUID = 1L;
   
   protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       // DBからつぶやきリストを取得→リクエストスコープに保存
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       // ここでセッションIDをキーにインスタンスを取得
       HttpSession session = request.getSession();
       User loginUser = ( User ) session.getAttribute( "loginUser" );
       
       if( loginUser == null ) {
           response.sendRedirect( "/docoTsubu/" );
       } else {
           RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
           dispatcher.forward( request, response );
       }
       
   }
   
   protected void doPost( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       String text = request.getParameter( "text" );
       
       if( text != null && text.length() != 0 ) {
           HttpSession session = request.getSession();
           User loginUser = ( User ) request.getAttribute( "loginUser" );
           
           Mutter mutter = new Mutter( loginUser.getName(), text );
           PostMutterLogic pm = new PostMutterLogic();
           pm.execute( mutter );
           
       } else {
           request.setAttribute( "errorMsg", "つぶやきが入力されていません" );
       }
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
       
   }
   
}
コード
```
---
追記2
下記にデバッグ結果を書きます
```java
protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       // ↑ブレークポイント
   }
/*
*   mutterList : ArrayList<E>
*      elementData : Object[0]
*      modCount : 0
*      size : 0
*
*/
```
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterLista = gm.execute();
       
       for( Mutter mutter : mutterLista ) {
                // ↑ブレークポイント
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
*
*    mutterList
*      elementData : Object[10]
*      modCount : 2
*      size : 2
*
*/
```
こう見ると、そもそもサーブレットクラスのMain.javaで取得ができていないようですね、、。
こう見ると、そもそもサーブレットクラスのMain.javaで取得ができていないようですね、、。
---
追記3
DAOクラスのfindAll()までデバッグを行いました。
結果、Test.javaではfindAll()でDBからの情報を取得し、しっかりと返り値を返しています。しかし、Main.javaではfindAll()ではtry{}が全てスキップしており、finally{}のみ実行されていました。(コードは最後に書きます)
関係しているファイルは最初に記載した通りで、今回の流れではDBにSELECT文しか送っておらず、かなり簡単なもののはずですが、どこがおかしいのか、、、。
```java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Mutter;
public class MutterDAO{
   private final String   DRIVER_NAME   = "com.mysql.jdbc.Driver";
   private final String   JDBC_URL   = "jdbc:mysql://localhost:8889/docoTsubu";
   private final String   DB_USER       = "○○○○○○○";
   private final String   DB_PASS       = "○○○○○○○";
   
   public List< Mutter > findAll(){
       Connection con = null;
       List< Mutter > mutterList = new ArrayList<>();
       
       try {
           Class.forName( DRIVER_NAME );
           con = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );
           
           // SQLの準備
           String sql = "SELECT id, name, text FROM mutter ORDER BY id DESC";
           PreparedStatement pstmt = con.prepareStatement( sql );
           ResultSet rs = pstmt.executeQuery();
           
           while( rs.next() ) {
               int id = rs.getInt( "id" );
               String userName = rs.getString( "name" );
               String text = rs.getString( "text" );
               Mutter mutter = new Mutter( id, userName, text );
               mutterList.add( mutter );
           }
           
       } catch ( ClassNotFoundException e ) {
           e.printStackTrace();
       } catch ( SQLException e ) {
           e.printStackTrace();
       } finally {
           if( con != null ) {
               try {
                   con.close();
                   
               } catch ( SQLException e ) {
                   e.printStackTrace();
               }
           }
       }
       
       return mutterList;
   }
   
   public boolean create( Mutter mutter ){
       Connection con = null;
       try {
           con = DriverManager.getConnection( JDBC_URL, DB_USER, DB_PASS );
           
           String sql = "INSERT INTO mutter( name, text ) VALUES( ?, ? )";
           PreparedStatement pstmt = con.prepareStatement( sql );
           pstmt.setString( 1, mutter.getUserName() );
           pstmt.setString( 2, mutter.getText() );
           
           int result = pstmt.executeUpdate();
           
           if( result != 1 ) {
               return false;
           }
           
       } catch ( SQLException e ) {
           e.printStackTrace();
       } finally {
           if( con != null ) {
               try {
                   con.close();
                   
               } catch ( SQLException e ) {
                   e.printStackTrace();
               }
           }
       }
       
       return true;
   }
   
}
```
  • Java

    17726 questions

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

  • JSP

    1173 questions

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

  • servlet

    588 questions

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

2 デバッグ結果追記

退会済みユーザー

退会済みユーザー

2016/07/31 15:16  投稿

サーブレット/jspについて
お世話になります。
表題について質問です。
いまMySQLに保存してある{int型 id, string型 name, string型 text}の3つを取得し、jspで出力を行おうとしています。
使用しているファイルは、
GetMutterListLogic.java(BO)
Mutter.java(javaBeans)
Main.java(サーブレット)
MutterDAO.java(DAO)
main.jsp
です。
流れとして、
①GetMutterListLogic.javaとMutterDAO.javaを使用して、DBから情報を取得し、Main.javaで受け取ります。そして、②受け取ったものをリクエストスコープに登録し、jspで登録したものを取り出す。といった流れです。
しかし、②で情報は取得できているのかがわかりません。
というのも、jsp側で、
List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
として受け取っているつもりなのですが、<%= mutterList %>をすると[]とだけ表示されます。また、<%= mutterList.size() %>とすると0と表示されます。
これは恐らく情報が取得できていないんだろうなと思うのですが、ディレクトリ構造のmodelパッケージの同階層にtestパッケージを作り、その中にテスト用のクラスを作り下記のように実行したところ、しっかりと出力されました。
何か原因がわかる方ご教授のほどお願い致します。
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       
       for( Mutter mutter : mutterList ) {
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
出力結果
接続...ok
rin:wanwanwan!!!
pun:wan!
*/
```
------
**__ここから実際のソースコード__**
```java
// Main.java
GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
```
```java
// GetMutterListLogic.java
package model;
import java.util.List;
import dao.MutterDAO;
public class GetMutterListLogic{
   public List< Mutter > execute(){
       MutterDAO dao = new MutterDAO();
       List< Mutter > mutterList = dao.findAll();
       return mutterList;
   }
   
}
```
```java
// main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
   
<%@ page import="model.User, java.util.List, model.Mutter" %>
<%
   User loginUser = (User) request.getAttribute( "loginUser" );
   List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
   String errorMsg = (String) request.getAttribute( "errorMsg" );
%>
   
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>つぶやくやつ</title>
</head>
<body>
<h3>メイン</h3>
<a href="/docoTsubu/Logout">ログアウト</a>
<p><a href="/docoTsubu/Main">更新</a></p>
<form action="/docoTsubu/Main" method="post">
   <input type="text" name="text"/>   
   <input type="submit" value="つぶやく"/>
</form>
<% if(mutterList != null){%>
       つぶやきはあります。
       <%= mutterList.size()%> 件
<% } else { %>
       <p>つぶやいてみよう!</p>
<% } %>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
/********
出力結果
つぶやきはあります。 0 件
******/
```
---
追記情報です。
```java
package servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.GetMutterListLogic;
import model.Mutter;
import model.PostMutterLogic;
import model.User;
@WebServlet( "/Main" )
public class Main extends HttpServlet{
   private static final long serialVersionUID = 1L;
   
   protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       // DBからつぶやきリストを取得→リクエストスコープに保存
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       // ここでセッションIDをキーにインスタンスを取得
       HttpSession session = request.getSession();
       User loginUser = ( User ) session.getAttribute( "loginUser" );
       
       if( loginUser == null ) {
           response.sendRedirect( "/docoTsubu/" );
       } else {
           RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
           dispatcher.forward( request, response );
       }
       
   }
   
   protected void doPost( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       String text = request.getParameter( "text" );
       
       if( text != null && text.length() != 0 ) {
           HttpSession session = request.getSession();
           User loginUser = ( User ) request.getAttribute( "loginUser" );
           
           Mutter mutter = new Mutter( loginUser.getName(), text );
           PostMutterLogic pm = new PostMutterLogic();
           pm.execute( mutter );
           
       } else {
           request.setAttribute( "errorMsg", "つぶやきが入力されていません" );
       }
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
       
   }
   
}
コード
```
```
---
追記2
下記にデバッグ結果を書きます
```java
protected void doGet( HttpServletRequest request, HttpServletResponse response )
           throws ServletException, IOException{
       
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       // ↑ブレークポイント
   }
/*
*   mutterList : ArrayList<E>
*      elementData : Object[0]
*      modCount : 0
*      size : 0
*
*/
```
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterLista = gm.execute();
       
       for( Mutter mutter : mutterLista ) {
                // ↑ブレークポイント
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
*
*    mutterList
*      elementData : Object[10]
*      modCount : 2
*      size : 2
*
*/
```
こう見ると、そもそもサーブレットクラスのMain.javaで取得ができていないようですね、、。
  • Java

    17726 questions

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

  • JSP

    1173 questions

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

  • servlet

    588 questions

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

1 追加情報

退会済みユーザー

退会済みユーザー

2016/07/31 12:47  投稿

サーブレット/jspについて
お世話になります。
表題について質問です。
いまMySQLに保存してある{int型 id, string型 name, string型 text}の3つを取得し、jspで出力を行おうとしています。
使用しているファイルは、
GetMutterListLogic.java(BO)
Mutter.java(javaBeans)
Main.java(サーブレット)
MutterDAO.java(DAO)
main.jsp
です。
流れとして、
①GetMutterListLogic.javaとMutterDAO.javaを使用して、DBから情報を取得し、Main.javaで受け取ります。そして、②受け取ったものをリクエストスコープに登録し、jspで登録したものを取り出す。といった流れです。
しかし、②で情報は取得できているのかがわかりません。
というのも、jsp側で、
List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
として受け取っているつもりなのですが、<%= mutterList %>をすると[]とだけ表示されます。また、<%= mutterList.size() %>とすると0と表示されます。
これは恐らく情報が取得できていないんだろうなと思うのですが、ディレクトリ構造のmodelパッケージの同階層にtestパッケージを作り、その中にテスト用のクラスを作り下記のように実行したところ、しっかりと出力されました。
何か原因がわかる方ご教授のほどお願い致します。
```java
package test;
import java.util.List;
import model.GetMutterListLogic;
import model.Mutter;
public class Test{
   
   public static void main( String[] args ){
       GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       
       for( Mutter mutter : mutterList ) {
           System.out.print( mutter.getUserName() + ":" );
           System.out.println( mutter.getText() );
       }
       
   }
   
}
/*
出力結果
接続...ok
rin:wanwanwan!!!
pun:wan!
*/
```
------
**__ここから実際のソースコード__**
```java
// Main.java
GetMutterListLogic gm = new GetMutterListLogic();
       List< Mutter > mutterList = gm.execute();
       request.setAttribute( "mutterList", mutterList );
       
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );
       dispatcher.forward( request, response );
```
```java
// GetMutterListLogic.java
package model;
import java.util.List;
import dao.MutterDAO;
public class GetMutterListLogic{
   public List< Mutter > execute(){
       MutterDAO dao = new MutterDAO();
       List< Mutter > mutterList = dao.findAll();
       return mutterList;
   }
   
}
```
```java
// main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
   
<%@ page import="model.User, java.util.List, model.Mutter" %>
<%
   User loginUser = (User) request.getAttribute( "loginUser" );
   List< Mutter > mutterList = (List< Mutter >) request.getAttribute( "mutterList" );
   String errorMsg = (String) request.getAttribute( "errorMsg" );
%>
   
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>つぶやくやつ</title>
</head>
<body>
<h3>メイン</h3>
<a href="/docoTsubu/Logout">ログアウト</a>
<p><a href="/docoTsubu/Main">更新</a></p>
<form action="/docoTsubu/Main" method="post">
   <input type="text" name="text"/>   
   <input type="submit" value="つぶやく"/>
</form>
<% if(mutterList != null){%>
       つぶやきはあります。
       <%= mutterList.size()%> 件
<% } else { %>
       <p>つぶやいてみよう!</p>
<% } %>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
/********
出力結果
つぶやきはあります。 0 件
******/
```  
 
---  
追記情報です。  
```java  
package servlet;  
 
import java.io.IOException;  
import java.util.List;  
 
import javax.servlet.RequestDispatcher;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
 
import model.GetMutterListLogic;  
import model.Mutter;  
import model.PostMutterLogic;  
import model.User;  
 
@WebServlet( "/Main" )  
public class Main extends HttpServlet{  
   private static final long serialVersionUID = 1L;  
     
   protected void doGet( HttpServletRequest request, HttpServletResponse response )  
           throws ServletException, IOException{  
         
       // DBからつぶやきリストを取得→リクエストスコープに保存  
       GetMutterListLogic gm = new GetMutterListLogic();  
       List< Mutter > mutterList = gm.execute();  
       request.setAttribute( "mutterList", mutterList );  
         
       // ここでセッションIDをキーにインスタンスを取得  
       HttpSession session = request.getSession();  
       User loginUser = ( User ) session.getAttribute( "loginUser" );  
         
       if( loginUser == null ) {  
           response.sendRedirect( "/docoTsubu/" );  
       } else {  
           RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );  
           dispatcher.forward( request, response );  
       }  
         
   }  
     
   protected void doPost( HttpServletRequest request, HttpServletResponse response )  
           throws ServletException, IOException{  
         
       String text = request.getParameter( "text" );  
         
       if( text != null && text.length() != 0 ) {  
           HttpSession session = request.getSession();  
           User loginUser = ( User ) request.getAttribute( "loginUser" );  
             
           Mutter mutter = new Mutter( loginUser.getName(), text );  
           PostMutterLogic pm = new PostMutterLogic();  
           pm.execute( mutter );  
             
       } else {  
           request.setAttribute( "errorMsg", "つぶやきが入力されていません" );  
       }  
         
       GetMutterListLogic gm = new GetMutterListLogic();  
       List< Mutter > mutterList = gm.execute();  
       request.setAttribute( "mutterList", mutterList );  
         
       RequestDispatcher dispatcher = request.getRequestDispatcher( "/WEB-INF/jsp/main.jsp" );  
       dispatcher.forward( request, response );  
         
   }  
     
}  
 
コード  
```
  • Java

    17726 questions

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

  • JSP

    1173 questions

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

  • servlet

    588 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る