Q&A
###オブジェクトをキャストしたい
サーブレットで得た結果をjspで受け取り、表示したいのですがなかなかうまくいきません。お分かりの方がいらっしゃれば、何卒よろしくお願いいたします。
###元々発生していた例外レポート
HTTPステータス 500 - JSPのクラスをコンパイルできません: type 例外レポート メッセージ JSPのクラスをコンパイルできません: 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /DB/select.jsp の中の19行目でエラーが発生しました Type mismatch: cannot convert from Object to List<Learning> 16: <TH>Address</TH> 17: </TR> 18: <% 19: List<Learning> list =/*(List<learning>)*/request.getAttribute("list"); 20: %> 21: 22: <c:forEach var="learning" items="${list}"> Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:490) org.apache.jasper.compiler.Compiler.compile(Compiler.java:379) org.apache.jasper.compiler.Compiler.compile(Compiler.java:354) org.apache.jasper.compiler.Compiler.compile(Compiler.java:341) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) DB.SelectDb.doGet(SelectDb.java:79) javax.servlet.http.HttpServlet.service(HttpServlet.java:624) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) filter.EncodingFilter.doFilter(EncodingFilter.java:26)
###変化した例外レポート
java
1HTTPステータス 500 - An exception occurred processing JSP page /DB/select.jsp at line 26 2 3メッセージ An exception occurred processing JSP page /DB/select.jsp at line 26 4 5説明 The server encountered an internal error that prevented it from fulfilling this request. 6 7例外 8org.apache.jasper.JasperException: An exception occurred processing JSP page /DB/select.jsp at line 26 9 1023: 1124: <c:forEach var="learning" items="${list}"> 1225: <TR> 1326: <TD>${learning.id}</TD> 1427: <TD>${learning.name}</TD> 1528: <TD>${learning.address}</TD> 1629: </TR> 17 18 19Stacktrace: 20 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:575) 21 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477) 22 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 23 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 24 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 25 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 26 DB.SelectDb.doGet(SelectDb.java:79) 27 javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 28 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 29 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 30 filter.EncodingFilter.doFilter(EncodingFilter.java:26) 31 32 33 34原因 35javax.el.PropertyNotFoundException: Property 'id' not readable on type DB.Learning 36 javax.el.BeanELResolver$BeanProperty.read(BeanELResolver.java:357) 37 javax.el.BeanELResolver$BeanProperty.access$000(BeanELResolver.java:305) 38 javax.el.BeanELResolver.getValue(BeanELResolver.java:97) 39 org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104) 40 org.apache.el.parser.AstValue.getValue(AstValue.java:184) 41 org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 42 org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:950) 43 org.apache.jsp.DB.select_jsp._jspx_meth_c_005fforEach_005f0(select_jsp.java:160) 44 org.apache.jsp.DB.select_jsp._jspService(select_jsp.java:113) 45 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 46 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 47 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 48 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 49 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 50 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 51 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 52 DB.SelectDb.doGet(SelectDb.java:79) 53 javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 54 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 55 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 56 filter.EncodingFilter.doFilter(EncodingFilter.java:26) 57 58
###該当のソースコード
java
1<% 2 List<Learning> list =(List<learning>)request.getAttribute("list"); 3%> 4
以下がソースの全文です。
java
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4<%@ page import="java.util.*, DB.Learning"%> 5<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6<html> 7<head> 8<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9<title>JSPとServletとデータベースの組み合わせ</title> 10</head> 11<body> 12<TABLE border="1"> 13 <TR> 14 <TH>CustomerId</TH> 15 <TH>CustomerName</TH> 16 <TH>Address</TH> 17 </TR> 18 <% 19 List<Learning> list =(List<learning>)request.getAttribute("list"); 20 %> 21 22 <c:forEach var="learning" items="${list}"> 23 <TR> 24 <TD>${learning.id}</TD> 25 <TD>${learning.name}</TD> 26 <TD>${learning.address}</TD> 27 </TR> 28 </c:forEach> 29 30 31</TABLE> 32</body> 33</html>
java
1package DB; 2 3import java.io.IOException; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6import java.sql.Statement; 7import java.util.ArrayList; 8import java.util.List; 9 10import javax.servlet.RequestDispatcher; 11import javax.servlet.ServletException; 12import javax.servlet.annotation.WebServlet; 13import javax.servlet.http.HttpServlet; 14import javax.servlet.http.HttpServletRequest; 15import javax.servlet.http.HttpServletResponse; 16 17import com.mysql.jdbc.Connection; 18 19import Dbsample.MySql; 20 21@WebServlet("/SelectDb") 22public class SelectDb extends HttpServlet 23{ 24 25 protected void doGet(HttpServletRequest request, 26 HttpServletResponse response) throws ServletException, IOException 27 { 28 String sql = "select * from customers"; 29 30 Connection con = null; 31 Statement smt = null; 32 33 try 34 { 35 // MySQLに接続 36 con = MySql.getConnection(); 37 smt = (Statement) con.createStatement(); 38 ResultSet rs =smt.executeQuery(sql); 39 40 List<Learning> list =new ArrayList<Learning>(); 41 42 while(rs.next()) 43 { 44 Learning learning = new Learning(); 45 learning.setId(rs.getInt("CustomerId")); 46 learning.setName(rs.getString("CustomerName")); 47 learning.setAddress(rs.getString("Address")); 48 49 list.add(learning); 50 } 51 request.setAttribute("list", list); 52 } 53 catch(SQLException e) 54 { 55 throw new ServletException(e); 56 } 57 finally 58 { 59 if(smt != null) 60 { 61 try 62 { 63 smt.close(); 64 } 65 catch(SQLException ignore) 66 {} 67 } 68 if(con != null) 69 { 70 try 71 { 72 con.close(); 73 } 74 catch(SQLException ignore) 75 {} 76 } 77 } 78 RequestDispatcher dispatcher =request.getRequestDispatcher("/DB/select.jsp"); 79 dispatcher.forward(request, response); 80 } 81 82}
java
1package DB; 2 3public class Learning 4{ 5 private int id; 6 private String name; 7 private String address; 8 9 public int getId() 10 { 11 return id; 12 } 13 public void setId(int id) 14 { 15 this.id =id; 16 } 17 18 public String getName() 19 { 20 return name; 21 } 22 public void setName(String name) 23 { 24 this.name =name; 25 } 26 27 public String getAddress() 28 { 29 return address; 30 } 31 public void setAddress(String address) 32 { 33 this.address =address; 34 } 35}
###補足情報(言語/FW/ツール等のバージョンなど)
eclisp 4.5
win10
jdk1.7
tomcat1.7
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/08/02 11:21
2016/08/02 11:25
2016/08/02 11:30 編集
2016/08/02 12:00
2016/08/02 12:02
2016/08/02 12:05
2016/08/02 13:52