NewBee
NewBee

Reputation: 839

Printing multiple rows of query output from servlet to jsp///

Following is the code of servlet and jsp file

Connect.java

@WebServlet("/calendar")
public class Connect extends HttpServlet {  

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse  response) throws ServletException, IOException {

    String fromDate = request.getParameter("fromDate");
    String toDate = request.getParameter("toDate");

    String query = "SELECT action_time,user_action,user_ip,user_id FROM di.login_detail where (action_time, action_time) OVERLAPS (DATE '"
                + fromDate+ "',DATE '"+ toDate+ "'+ integer '1')" +
                        " order by action_time desc";
    Connection conn = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    System.out.println("done4");
    try {

        conn = ConnectionUtil.getConnection();
        statement = conn.prepareStatement(query);           
        resultSet = statement.executeQuery();

           if (resultSet.next()) {                          
            while(resultSet.next()){
                String action_time=resultSet.getString("action_time");
                String user_action=resultSet.getString("user_action");
                String user_ip=resultSet.getString("user_ip");
                String user_id=resultSet.getString("user_id");


                request.setAttribute("action_time",action_time);
                request.setAttribute("user_action",user_action);
                request.setAttribute("user_ip",user_ip);
                request.setAttribute("user_id",user_id);
         RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");  
                        view.forward(request,response);
                       }


        } else {
            System.out.println("not found");
        }
    } catch (SQLException e) {
        throw new ServletException("DB interaction failed", e);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
    }
}
}

Calendar.jsp

<%@ page import="java.sql.*" %>
<%
String path = request.getContextPath();
%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <script src="<%=path%>/js/calendar.js"></script>
    <link href="<%=path %>/css/calendar.css" rel="stylesheet">
</head>
<body>
<form action="calendar">
            <div class="container">
            From:<input  name="fromDate" type="text"   class="calendarSelectDate" />
            To: <input   name="toDate"   type="text" class="calendarSelectDate" />
            <input type="submit" name="b1" value="Go">
        </div>          
<div id="calendarDiv"></div>

<%= request.getAttribute("action_time")%>
<%= request.getAttribute("user_action")%>
<%= request.getAttribute("user_ip")%>
<%= request.getAttribute("user_id")%>

</form> 

</body>
</html>

I am trying to display result to calender.jsp from my servlet , query passed in above produce multiple rows as result but in jsp page it only generates first row output and stop executing. What else could be done here to fetch full result on jsp. Thank you////

Upvotes: 3

Views: 5440

Answers (2)

Paulius Matulionis
Paulius Matulionis

Reputation: 23415

Create a class for e.g.:

public class User {
    private String actionTime;
    private String userAction;
    private String userIp;
    private String userId;

    //Getters and setters
}

Then you should change your code like this:

ArrayList<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setActionTime(resultSet.getString("action_time"));
    user.setUserAction(resultSet.getString("user_action"));
    user.setUserId(resultSet.getString("user_ip"));
    user.setUserIp(resultSet.getString("user_id"));
    users.add(user);
}
request.setAttribute("users", users);
RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");
view.forward(request, response);

In the loop always create new user, add it into the users list and when the loop is finished set the whole list as the request attribute.

Then in your JSP use JSTL to process the list:

<c:forEach var="user" items="${users}">
    <c:out value="${user.actionTime}"/>
    <c:out value="${user.userAction}"/>
    <c:out value="${user.userIp}"/>
    <c:out value="${user.userId}"/>
</c:forEach>

See also:

Upvotes: 3

Bizmarck
Bizmarck

Reputation: 2688

As mentioned, with each iteration you are overwriting the request attribute. You are also calling

 RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");  
                        view.forward(request,response);

which forwards the response in the first iteration. Create a list or hash and set that attribute, then access it from you JSP

Upvotes: 0

Related Questions