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

Model view controller 在没有JSTL的JSP中使用ResultSet对象,model-view-controller,jsp,servlets,resultset,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.setSt

我想将我的查询结果(即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>

${data.userid}
${data.name}
${data.password}
${data.emailid}
此外,如果我直接传递ResultSet,比如
request.setAttribute(“ResultSet”,rs)我将无法在JSP中关闭连接


这段代码工作得很好,但我不想使用JSTL/EL或列表,我想在JSP中使用scriplets来处理Servlet中的Result或ResultSet属性

您可以这样解决您的问题:

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

Contacts myContact = new Contacts();
myContact.setOffice(rs.getString("office1"));
myContact.setMail(rs.getString("xx@xx.com"));
2) 然后使用列表存储结果

List<Contacts> myList = new ArrayList<Contacts>();
myList.add(myContact);
4) 在JSP中,获取列表,并根据需要对其进行迭代

ArrayList<Contacts> myList = (ArrayList<Contacts>) request.getAttribute("LIST");
for(Contacts obj: myList){
  out.print(obj.getMail());
  ....
  ....
}
ArrayList myList=(ArrayList)request.getAttribute(“列表”);
用于(联系人对象:myList){
out.print(obj.getMail());
....
....
}

为什么。你为什么要这么做。“因为我在使用MVC框架?”但你只是想跳过M?为什么,不可能将表的视图部分转移到JSP并使用简单的scriplets?当然,这有点可能——这只是一个可怕的想法,在多个层次上。Scriptlet很糟糕。在JSP呈现期间保持结果集打开是不好的。我想结果至少更好;不知道为什么不能在scriptlet中使用结果。我也不知道你为什么要这么做,但那是另一个问题。
ArrayList<Contacts> myList = (ArrayList<Contacts>) request.getAttribute("LIST");
for(Contacts obj: myList){
  out.print(obj.getMail());
  ....
  ....
}