I’m not able to figure out this problem.
My error:
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 28
Line 28: <c:forEach items="${data.visit}" var="visit">
java class:
public class DataBean implements Serializable, ServletContextListener { private static final String nameOfLogger = DataBean.class.getName(); private static final Logger logger = Logger.getLogger(nameOfLogger); public class Visit { public Visit(String dateOfTheVisit, String category, String idClient, String idInsrurer, String idDoctor, String idVisit,String accepted) { this.dateOfTheVisit = dateOfTheVisit; this.category = category; this.idClient = idClient; this.idInsrurer = idInsrurer; this.idDoctor = idDoctor; this.idVisit = idVisit; this.accepted = accepted; } public String getIdVisit() { return idVisit; } public void setIdVisit(String idVisit) { this.idVisit = idVisit; } public String getDateOfTheVisit() { return dateOfTheVisit; } public void setDateOfTheVisit(String dateOfTheVisit) { this.dateOfTheVisit = dateOfTheVisit; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getIdClient() { return idClient; } public void setIdClient(String idClient) { this.idClient = idClient; } public String getIdInsrurer() { return idInsrurer; } public void setIdInsrurer(String idInsrurer) { this.idInsrurer = idInsrurer; } public String getIdDoctor() { return idDoctor; } public void setIdDoctor(String idDoctor) { this.idDoctor = idDoctor; } String idVisit; String dateOfTheVisit; String category; String idClient; String idInsrurer; String idDoctor; String accepted; public String getAccepted() { return accepted; } public void setAccepted(String accepted) { this.accepted = accepted; } } public class Insurer { public Insurer(String idInsurer, String name) { this.idInsurer = idInsurer; this.name = name; } public String getIdInsurer() { return idInsurer; } public void setIdInsurer(String idInsurer) { this.idInsurer = idInsurer; } public String getName() { return name; } public void setName(String name) { this.name = name; } String idInsurer; String name; } //public List<Visit> visitArray = new ArrayList<>(); public List<Insurer> insurerArray = new ArrayList<>(); private java.sql.Connection psqlCon = null; private boolean psqlConnectionCreated = false; synchronized public ArrayList<Visit> getVisit() throws ClassNotFoundException, SQLException { Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "password"); Statement stm; stm = conn.createStatement(); String sql = "Select * From Customer"; ResultSet rst; rst = stm.executeQuery(sql); ArrayList<Visit> visitArray = new ArrayList<>(); while (rst.next()) { Visit visit = new Visit(rst.getString("dateOfTheVisit"), rst.getString("category"), rst.getString("idClient"), rst.getString("idInsurer"), rst.getString("idDoctor"), rst.getString("idVisit"),rst.getString("accepted")); visitArray.add(visit); } return visitArray; } @Override public void contextInitialized(ServletContextEvent sce) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void contextDestroyed(ServletContextEvent sce) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }
jsp:
<%@page import="java.util.List"%>
<HTML> <HEAD> </HEAD> <BODY> <jsp:useBean id="data" class="sevenet.DataBean" scope="application"/> <H1>The tableName Database Table </H1> <TABLE BORDER="1"> <TR> <TH>Date</TH> <TH>Category</TH> <TH>IdClient</TH> <TH>IdInsurer</TH> <TH>IdDoctor</TH> <TH>Accepted</TH> <TH>ID</TH> </TR> <tbody> <c:forEach items="${data.visit}" var="visit"> <tr> <td><c:out value="${visit.dateOfTheVisit}"/></td> <td><c:out value="${visit.category}"/></td> <td><c:out value="${visit.idClient}"/></td> <td><c:out value="${visit.idInsrurer}"/></td> <td><c:out value="${visit.idDoctor}"/></td> <td><c:out value="${visit.idVisit}"/></td> <td><c:out value="${visit.accepted}"/></td> </tr> </c:forEach> </tbody> </TABLE> </BODY> </HTML>
I’m not sure what I did wrong, but I think that it is something about the definition of the bean.
I appreciate every attempt to help!
Advertisement
Answer
Here’s what I did to get your app running.
FolderStructure(image of folder structure) ApplicationExample(App running example)
Create 2 new Java Packages
(1)Servlet (2)lists
add 2 classes to lists (1)Visit.java (2)VisitListVariables.java add 1 class to Servlet (1)Servlet.java
Inside Visit.java
package lists; import java.util.ArrayList; import java.util.List; public class Visit{ public static List<VisitListVariables> BuildVisitList(){ List<VisitListVariables> BuildVisitList = new ArrayList<>(); //creates List to return try{ //Database connection variables //Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "password"); //Statement stm; //stm = conn.createStatement(); //String sql = "Select * From Customer"; //ResultSet rs; //rs = stm.executeQuery(sql); //while(rs.next()){ VisitListVariables buildList = new VisitListVariables(); //Gets variables needed for list //String visitDate = rs.getString("visitDate"); String dateOfTheVisit = "today"; buildList.setDateOfTheVisit(dateOfTheVisit); buildList.setCategory("Doctor Visit"); buildList.setIdClient("666"); buildList.setIdInsrurer("999"); buildList.setIdDoctor("1001"); buildList.setIdVisit("001"); buildList.setAccepted("yes"); BuildVisitList.add(buildList); //} //rs.close();stm.close();conn.close(); }catch(Exception e){} return BuildVisitList; } }
Inside VisitListVariables.java
package lists; public class VisitListVariables { private String dateOfTheVisit; private String category; private String idClient; private String idInsrurer; private String idDoctor; private String idVisit; private String accepted; public String getDateOfTheVisit() { return dateOfTheVisit; } public void setDateOfTheVisit(String dateOfTheVisit) { this.dateOfTheVisit = dateOfTheVisit; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getIdClient() { return idClient; } public void setIdClient(String idClient) { this.idClient = idClient; } public String getIdInsrurer() { return idInsrurer; } public void setIdInsrurer(String idInsrurer) { this.idInsrurer = idInsrurer; } public String getIdDoctor() { return idDoctor; } public void setIdDoctor(String idDoctor) { this.idDoctor = idDoctor; } public String getIdVisit() { return idVisit; } public void setIdVisit(String idVisit) { this.idVisit = idVisit; } public String getAccepted() { return accepted; } public void setAccepted(String accepted) { this.accepted = accepted; } }
Inside Servlet.java
package Servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lists.Visit; import lists.VisitListVariables; public class Servlet extends HttpServlet { /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<VisitListVariables> visit = Visit.BuildVisitList(); request.setAttribute("visitParam", visit); // Will be available as ${visitParam} in JSP request.getRequestDispatcher("/test.jsp").forward(request, response); } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }
Inside jsp I named test.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <TITLE>The tableName Database Table </TITLE> </head> <body> <H1>The tableName Database Table </H1> <table BORDER="1"> <tr> <th>Date</th> <th>Category</th> <th>IdClient</th> <th>IdInsurer</th> <th>IdDoctor</th> <th>Accepted</th> <th>ID</th> </tr> <tbody> <c:forEach items="${visitParam}" var="visit"> <tr> <td><c:out value="${visit.dateOfTheVisit}"/></td> <td><c:out value="${visit.category}"/></td> <td><c:out value="${visit.idClient}"/></td> <td><c:out value="${visit.idInsrurer}"/></td> <td><c:out value="${visit.idDoctor}"/></td> <td><c:out value="${visit.idVisit}"/></td> <td><c:out value="${visit.accepted}"/></td> </tr> </c:forEach> </tbody> </table> </body> </html>
Web.xml (normally you would have an index page with a link
<a href='/Servlet'>Visits</a>
and that would point to your servlet, but for testing you can type in the servlet into url //localhost:8080/ProjectName/Servlet)
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>Servlet.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/Servlet</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>Servlet</welcome-file> </welcome-file-list> </web-app>