【问题标题】:Sending information from servlets to jsp pages将信息从 servlet 发送到 jsp 页面
【发布时间】:2012-10-04 07:43:36
【问题描述】:

我的任务要求我们将信息从 java servlet 发送到 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); 
}

这里是jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Mars University Lab System</title>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen">
</head>

<body>
<jsp:include page="headerStudent.jsp"/>


<tr>
<td>
</td>
</tr>

<tr>
<td>
<div id = "centrecontent">
<br>
<h3>Manage Timetable</h3>

  TESTING THE NO FORM REDIRECTION HERE:<br>

<% String data1 = String.valueOf(request.getAttribute("data1")); %>
 <% String data2 = String.valueOf(request.getAttribute("data2")); %>
<%=data1 %>
<%=data2 %>


</div>

<jsp:include page="footer.jsp"/>


</body>

</html>

我相信我需要在 jsp 页面中使用某种 do 语句来逐步检查每个结果。

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    你的逻辑错了

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

    因此,您只剩下rs 的最后一个值。

    我认为将结果存储在Collection 中会更好,然后将Collection 存储在request 对象中

    更新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);
    }
    

    这会将List 添加到名为results 的请求属性中

    然后您可以使用检索列表

    List <MyObject> results = (List<MyObject>) request.getAttribute("results");
    

    更新2

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

        while(res.next()){
              obj.setData1("data1", res.getString(1));
              obj.setData2("data2", res.getString(2));
              list.add(obj);
        }
    

    UPDATE3

    像这样打印到jsp

    <%@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 循环.. 在你的脚本中.. 因为你必须使用它.. 没有其他方法..
    • 你可以使用 JSTL 进行迭代
    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2018-08-20
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多