Java 将信息从servlet发送到jsp页面

Java 将信息从servlet发送到jsp页面,java,jsp,servlets,Java,Jsp,Servlets,我的任务要求我们将信息从Javaservlet发送到jsp页面 我的问题是关于调用函数的。它有一个sql查询,可以找到多个结果。我遇到的问题是,它只将结果集中的最后一个结果返回到jsp页面,而不是所有结果 以下是servlet: private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession sess

我的任务要求我们将信息从Javaservlet发送到jsp页面

我的问题是关于调用函数的。它有一个sql查询,可以找到多个结果。我遇到的问题是,它只将结果集中的最后一个结果返回到jsp页面,而不是所有结果

以下是servlet:

private void sendBack(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);

    //Set data you want to send back to the request (will be forwarded to the page)
//Can set string, int, list, array etc.
String sql = "SELECT id, user_id" +
          " FROM lab" +
        " WHERE user_id=" + (Integer)session.getAttribute("id");

  try{
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/wae","root","");
    System.out.println("got boobs");
    System.out.println(session.getAttribute("id"));

  Statement stmt = con.createStatement();
  ResultSet res = stmt.executeQuery(sql);
  ArrayList<String> list1 = new ArrayList<String>();
  if (res.next()){
      do{
           list1.add(res.getString(1));
           list1.add(res.getString(2));
      }while(res.next());

      request.setAttribute("res", res);
      }
      for(int i=0;i<list1.size();i++){
          System.out.println(list1.get(i));
      }
  }catch (SQLException e) {
    } 
    catch (Exception e) {
    } 


    //Decides what page to send the request data to
    RequestDispatcher view = request.getRequestDispatcher("Student_manage.jsp");
    //Forward to the page and pass the request and response information
    view.forward(request, response); 
}
private void sendBack(HttpServletRequest请求、HttpServletResponse响应)抛出ServletException、IOException{
HttpSession session=request.getSession(true);
//设置要发送回请求的数据(将转发到页面)
//可以设置字符串、整数、列表、数组等。
String sql=“选择id,用户\u id”+
“来自实验室”+
“其中user_id=“+(整数)session.getAttribute(“id”);
试一试{
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/wae“,”根“,”);
System.out.println(“有乳房”);
System.out.println(session.getAttribute(“id”);
语句stmt=con.createStatement();
ResultSet res=stmt.executeQuery(sql);
ArrayList list1=新的ArrayList();
if(res.next()){
做{
列表1.add(res.getString(1));
列表1.add(res.getString(2));
}while(res.next());
setAttribute(“res”,res);
}
对于(inti=0;i你的逻辑是错误的

您迭代一行
rs
,并将其存储在请求属性
data1
data2
中。 然后,您将获得下一行,并一遍又一遍地覆盖相同的属性

因此,剩下的是
rs
的最后一个值

我认为最好将结果存储在
集合
中,然后将
集合
存储在
请求
对象中

更新1

考虑这个示例代码

public class MyObject{
  private String data1;
  private String data2;
    public void setData1(String data1) {
        this.data1 = data1;
    }

    public String getData1() {
        return data1;
    }

    public void setData2(String data2) {
        this.data2 = data2;
    }

    public String getData2() {
        return data2;
    }
}
这是你的目标

然后对上述代码进行如下更改:

List <MyObject> list = new List<MyObject>();
if (res.next()){
    MyObject obj = new MyObject();
    do{
          obj.setData1(res.getString(1));
          obj.setData2(res.getString(2));
          list.add(obj);
    }while(res.next());

request.setAttribute("results", list);
}
更新2

PS:删除
do/while
循环是一种很好的做法,因为它容易出错,并用
while
这样的循环替换它

    while(res.next()){
          obj.setData1("data1", res.getString(1));
          obj.setData2("data2", res.getString(2));
          list.add(obj);
    }
<%@page import="java.util.*"%>
<%
  List <MyObject> results = (List<MyObject>) request.getAttribute("results");
  for(MyObject obj : results){
    out.write(obj.getData1() + " "+ obj.getData2() + "<br/>";
  }
%>
更新3

像这样将其打印到jsp

    while(res.next()){
          obj.setData1("data1", res.getString(1));
          obj.setData2("data2", res.getString(2));
          list.add(obj);
    }
<%@page import="java.util.*"%>
<%
  List <MyObject> results = (List<MyObject>) request.getAttribute("results");
  for(MyObject obj : results){
    out.write(obj.getData1() + " "+ obj.getData2() + "<br/>";
  }
%>


我更新了我的代码,所以现在它获得了整个数组,我现在如何在jsp中打印它?/@user1393064..while loop..in您的scriplet..因为您必须使用它..没有其他方法..您可以使用JSTL进行迭代