java サーブレット JSP
解決したいこと
サーブレットからJSPにリストを渡して表示させたい
JavaのWebアプリケーションで、サーブレットからJSPにリストを渡そうとしています。しかし、JSPでリストを取得しようとすると、nullが返ってきてしまいます。サーブレットとJSPのコードは以下の通りです。
import java.io.IOException;
import java.util.ArrayList;
import bean.HumanBean;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/ListServlet")
public class ListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
UserDao dao = new UserDao();
ArrayList<HumanBean> list = dao.getList();
//デバッグログ
if (list != null) {
System.out.println("List size in Servlet: " + list.size());
} else {
System.out.println("List is null in Servlet.");
}
request.setAttribute("list", dao.getList());
// デバッグログ:リストが設定されたか確認
if (request.getAttribute("list") != null) {
System.out.println("List attribute is set in Servlet.");
} else {
System.out.println("List attribute is null in Servlet.");
}
RequestDispatcher rd = request.getRequestDispatcher("/jsp/list.jsp");
rd.forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="bean.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>リスト表示</title>
</head>
<body>
<%
ArrayList<HumanBean> list = (ArrayList<HumanBean>) request.getAttribute("list");
// デバッグログ
if (list != null) {
System.out.println("List size in JSP: " + list.size());
} else {
System.out.println("List is null in JSP.");
}
%>
<table align="center" border="1">
<tr>
<th>ID</th><th>NAME</th><th>AGE</th>
</tr>
<%
if (list != null && !list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
HumanBean bean = list.get(i);
%>
<tr>
<td><%= bean.getId() %></td>
<td><%= bean.getName() %></td>
<td><%= bean.getAge() %></td>
</tr>
<%
}
} else {
out.println("<tr><td colspan='3'>リストがnullです</td></tr>");
}
%>
</table>
</body>
</html>
ArrayList<HumanBean> list = new ArrayList<>();
String sql ="SELECT id,name,age FROM id_tbl ORDER BY id";
connect();
try {
PreparedStatement ps = getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
// Beanの生成
HumanBean bean = new HumanBean();
// 生成したBeanのフィールドにidをセット
bean.setId(rs.getString("id"));
// 生成したBeanのフィールドにnameをセット
bean.setName(rs.getString("name"));
// 生成したBeanのフィールドにageをセット
bean.setAge(rs.getInt("age"));
// ArrayListにBeanを格納する
list.add(bean);
}
} catch(SQLException e) {
e.printStackTrace();
} finally {
disconnect(); // DB切断
}
return list; //完成したリストを返す
}
例)
```ruby
def greet
puts Hello World
end
自分で試したこと
UserDao.javaでアプリケーションで実行をするとリストが表示されます。
ListServlet.javaで実行してもリストが表示され、コンソール上にも
List size in Servlet: 10
List attribute is set in Servlet.
List size in JSP: 10
と表示されます。
list.jspで実行すると、nullになり、コンソール上も
List is null in JSP.
と表示されるので、受け渡しの際に問題があるのかとは思います。
打ち間違え、カラム名などが間違ってないかの確認や、コピーして貼り付けてますが、nullのままです。
サーバを停止して、再開したりしてますが、変わらないです。
jspへのパスの誤りもないです。
エラーログの表示なども特にいです。
他の原因となるところはありますか?
検索や訂正をしたのですが、一向に解決しません。