在没有JSTL的JSP中使用ResultSet对象

时间:2012-10-16 14:47:40

标签: model-view-controller jsp servlets resultset

我想将我的查询结果,即ResultSet传递给JSP,仅用于显示,因为我正在使用MVC框架。

我的Servlet代码:

Connection c=Connectivity.dbConnect();
       PreparedStatement ps=c.prepareStatement("select role from login where userid=? and password=?");
       ps.setString(1,userid);
       ps.setString(2,pass);
       ResultSet rs=ps.executeQuery();

     if(rs.next())
     {

          if(rs.getString(1).equals("admin"))
                   {

           ps=c.prepareStatement("select * from user where userid=?");
           ps.setString(1,userid);
           rs=ps.executeQuery();   
           Result r=ResultSupport.toResult(rs);          
           request.setAttribute("res",r);       

           rs.close();
           c.close();
           return mapping.findForward("us");//to User.jsp


                   }
      }

我使用ResultSupport.toResult()将其转发到JSP(由'us'映射转发),但这需要JSP中的JSTL代码:

User.jsp -

<c:forEach var="data" items="${requestScope.res.rows}">
      <h1>${data.userid}</h1>
               <h2>${data.name}</h2>
               <h2>${data.password}</h2>
               <h2>${data.emailid}</h2>
  </c:forEach>

此外,如果我像request.setAttribute("ResultSet",rs);那样直接传递ResultSet,我将无法在JSP中关闭连接。

此代码工作正常,但我不想使用JSTL / EL或Lists,我想在JSP中使用scriplets,它可以处理来自Servlet的Result或ResultSet属性。

1 个答案:

答案 0 :(得分:0)

您可以像这样克服您的问题:

1)在数据库操作类中,使用POJO从ResultSet中添加结果。

Contacts myContact = new Contacts();
myContact.setOffice(rs.getString("office1"));
myContact.setMail(rs.getString("xx@xx.com"));

2)然后使用List来存储结果

List<Contacts> myList = new ArrayList<Contacts>();
myList.add(myContact);

3)将列表传递给您的请求/会话对象并关闭ResultSet / Connection那里

request.setAttribute("LIST",myList);
rs.close(); 
conn.close()

4)在JSP中获取List并按需要迭代它

ArrayList<Contacts> myList = (ArrayList<Contacts>) request.getAttribute("LIST");
for(Contacts obj: myList){
  out.print(obj.getMail());
  ....
  ....
}