我想将我的查询结果,即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属性。
答案 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());
....
....
}