3

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////

2 Answers 2

3

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:

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.