こんにちは。現在JSPの学習をしています。
下記のようなソースコードを記述し、実行してみたところ例外が発生してしまいます。
何か気になる箇所などございましたらご教授いただければ幸いです。どうぞよろしくお願いいたします。
###実現したいこと
bookList.jspを実行するとGenreDAOに詰めたメインジャンルIDが画面に出力されるようにしたい。
//一つ目のメインジャンル情報をDTOにセット info.setMainGenresId("000014"); //2つ目のメインジャンル情報をDTOにセット info.setMainGenresId("000014");
の
info.setMainGenresId("000014");
の部分です。
###困っていること
現在の私のソースコードでは、bookList.jspを実行すると"HTTPステータス 500"が発生します。
私の想定では、bookList.jspを実行すると
000014
000014
と出力される想定なのですが、、、
**
理由はbookList.jspを実行した瞬間InitializationListener.javaがDAOからジャンルの情報を取得してくれると解釈しているからです。**
これは
ArrayList<GenreDTO> maingenreList = (ArrayList<GenreDTO>)application.getAttribute("maingenreList");
にてGenreDAOにセットした情報をInitializationListener.javaにてセットすることができていないために起きているのでしょうか。それとも、単純にbookList.jspの
<% for(int i=0;i<maingenreList.size();++i){ GenreDTO info = maingenreList.get(i); %>
の部分に何かしらの誤りがあるのでしょうか。赤波線などはEclipseでは確認できていません。
お手数をおかけしますが、どうぞよろしくお願いいたします。
###私のソースコード
bookList
1<%@ page import="java.util.ArrayList" %> 2<%@ page import="dto.GenreDTO" %> 3<%@ page import="javax.servlet.ServletContext" %> 4<%@ page import="javax.servlet.ServletContextEvent" %> 5<%@ page import="javax.servlet.ServletContextListener" %> 6<%@ page language="java" contentType="text/html; charset=UTF-8" 7 pageEncoding="UTF-8"%> 8<!DOCTYPE html> 9<html> 10<head> 11<meta charset="UTF-8"> 12<title>書籍情報一覧画面</title> 13</head> 14<body> 15 16<% 17 ArrayList<GenreDTO> maingenreList = (ArrayList<GenreDTO>)application.getAttribute("maingenreList"); 18 19%> 20 21<table> 22 <tr> 23 <th>メインジャンルID</th> 24 25 26 </tr> 27 28 <% for(int i=0;i<maingenreList.size();++i){ 29 GenreDTO info = maingenreList.get(i); 30 %> 31 <tr> 32 <td> 33 <%= info.getMainGenresId() %> 34 </td> 35 36 </tr> 37 <%}%> 38</table> 39</body> 40</html>
InitializationListener
1package mutual; 2 3import java.util.ArrayList; 4 5import javax.servlet.ServletContext; 6import javax.servlet.ServletContextEvent; 7import javax.servlet.ServletContextListener; 8 9import common.LogManager; 10import dao.GenreDAO; 11import dto.GenreDTO; 12 13public class InitializationListener implements ServletContextListener { 14 public void contextInitialized(ServletContextEvent event) { 15 16 17 // ログの出力 18 LogManager lg = new LogManager(); 19 lg.outMethodLog("", null); 20 21 ServletContext context = event.getServletContext(); 22 23 try { 24 25 GenreDAO bn = new GenreDAO(); 26 ArrayList<GenreDTO> maingenreList = bn.searchAllMain(); 27 28 // genreListデータをapplicationスコープで保存 29 context.setAttribute("maingenreList", maingenreList); 30 31 ArrayList<GenreDTO> subGenreList = bn.searchAllSub(); 32 33 // genreListデータをapplicationスコープで保存 34 context.setAttribute("subGenreList", subGenreList); 35 36 // 投げた例外をException型の変数e1で受取る 37 } catch (Exception e1) { 38 // e1の中には例外に関する情報が詰まっている。それをログで出力してあげる 39 lg.outExceptionLog(e1, null, null); 40 41 } 42 } 43 44 public void contextDestoryed(ServletContextEvent event) { 45 ServletContext context = event.getServletContext(); 46 context.removeAttribute("allgenreList"); // 削除処理 47 } 48} 49
GenreDAO
1package dao; 2import java.io.Serializable; 3import java.sql.SQLException; 4import java.util.ArrayList; 5 6import javax.naming.NamingException; 7 8import dto.GenreDTO; 9 10public class GenreDAO implements Serializable { 11 12 //セットしたメインジャンル情報を取得 13 public ArrayList<GenreDTO> searchAllMain() 14 throws NamingException,SQLException{ 15 16 17 ArrayList<GenreDTO> genre = new ArrayList<GenreDTO>(); 18 GenreDTO info = new GenreDTO(); 19 20 //一つ目のメインジャンル情報をDTOにセット 21 info.setMainGenresId("000014"); 22 genre.add(info); 23 24 //2つ目のメインジャンル情報をDTOにセット 25 info.setMainGenresId("000014"); 26 genre.add(info); 27 28 // 戻り値の設定 29 return genre; 30 31 32 } 33 34 }
GenreDTO
1package dto; 2 3import javax.servlet.annotation.WebServlet; 4/** 5 * Servlet implementation class GenreDTO 6 */ 7@WebServlet("/dto/GenreDTO") 8// シリアライズを行う 9public class GenreDTO implements java.io.Serializable{ 10 11 //メンバ変数の定義 12 private String main_genres_id; 13 14 15 //---------------------以下getter処理------------------------------------------------- 16 17 //呼び出し元へメインジャンルIDを返す 18 public String getMainGenresId() { 19 return main_genres_id; 20 } 21 22 //---------------------以下setter処理------------------------------------------------- 23 24 //メインジャンルIDに呼び出し元から受け取った値を設定する 25 public void setMainGenresId(String main_genres_id) { 26 this.main_genres_id = main_genres_id; 27 } 28 29 30}
###追記
デバックをしてみた結果、InitializationListener.javaが動いていないことが判明しました。
ArrayList<GenreDTO> maingenreList = (ArrayList<GenreDTO>)application.getAttribute("maingenreList");
をしたときにmaingenreListには情報が何もセットされておらずnullになってしまいます。
これはいったいどうしてなのでしょうか、、、Tomcatに何か、ソースコードを記述しないといけないのでしょうか。それとも新しい何かをインポートする必要があるのでしょうか、、、、
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/31 12:21
2020/08/31 12:53
2020/09/01 01:57