【问题标题】:How to print objects from ArrayList in a JSP coming from the Servlet [duplicate]如何在来自Servlet的JSP中打印ArrayList中的对象[重复]
【发布时间】:2014-03-10 03:33:28
【问题描述】:

所以我有一个从数据库中检索一些数据的 Servlet。对于这些数据的每一行,我创建了一个对象并将所有对象添加到该对象的 ArrayList 中。

现在,我需要 Servlet 将 ArrayList 传递回调用者 JSP,并打印 ArrayList 中每个对象的每个属性。

你们会建议最好的方法吗?我这样做的方式显然行不通。

这是我的 JSP:

<%-- 
    Document   : ChartData
    Created on : Feb 11, 2014, 11:44:09 PM
    Author     : fabiolanza
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>

        <script>
            function myFunction() {

                var request = new XMLHttpRequest();
                request.open("GET", "http://localhost:8080/Test/Servlet2", true);
                request.onreadystatechange = function() {
                    if (request.readyState === 4) {

                        <%
                        java.util.ArrayList<objects.Data> DataArray = (java.util.ArrayList<objects.Data>) request.getAttribute("DataArray");

                        for(objects.Data d: DataArray){
                            out.print(d.type);
                            out.print(d.value);
                            out.print(d.month);
                        }
                        %>
                    }
                };

                request.send(null);

            }
        </script>

        <button onclick="myFunction()">Try it</button>


        <br><a href="/Test/index.html">Home</a>

    </body>
</html>

这是我的 Servlet: 包小服务程序;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author fabiolanza
 */

public class Servlet2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        ArrayList<objects.Data> DataArray = new ArrayList<objects.Data>();

        request.setAttribute("DataArray", DataArray);

        // JDBC driver name and database URL
        String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        String DB_URL = "jdbc:mysql://localhost:3306/Tests";

        //  Database credentials
        String USER = "fabio";
        String PASS = "hacking";

        Connection conn = null;
        Statement stmt = null;

        // Set response content type
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();



        try {
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            // Open a connection
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // Execute SQL query
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT * FROM data";
            ResultSet rs = stmt.executeQuery(sql);


            out.println("<html><body>");
            // Extract data from result set
            while (rs.next()) {
                objects.Data d = new objects.Data(rs.getString("Type"), rs.getInt("Value"), rs.getString("Month"));

                DataArray.add(d);
            }
            String link = "/Test/Database.html";
            out.println("<a href="+link+">Database</a>");
            out.println("</body></html>");

//            request.getRequestDispatcher("ChartData.jsp").forward(request, response);

            // Clean-up environment
            out.close();
            rs.close();
            stmt.close();
            conn.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

谢谢!

【问题讨论】:

    标签: javascript jsp servlets scriptlet


    【解决方案1】:
    • 顺便说一句,您在获取表数据后没有设置任何属性 (request.setAttribute("&lt;somename&gt;",DataArray)),也没有从 servlet 转发到相应的页面 [

      RequestDispatcher view=request.getRequestDispatcher("ChartData.jsp") view.forward(请求,响应)

    ]。

    • 您在 jsp 页面中通过 Ajax 方法完成了这个工作。 (很抱歉,我不知道这是否可能,我还没有看到任何 jsp pgmr 这样做)

      功能我的功能(){
         ------
          ---- 
            -----
              if (request.readyState === 4) { // ?--- what is meant by '===' (or) you mean '==' instead 
               -----
                 ----
      }
      

    无论如何..

    您可以通过两种方式做到这一点: 1.使用jstl 2.在jsp中使用scriptlet(现在已弃用或者不是标准)

    -使用 Jstl(如果没有得到下面提到的代码,请在 Google 中查询更多关于 Jstl 的信息)

     1.  In servlet
           request.setAttribute("dataArray",DataArray); // set array list 
            RequestDispatcher view=request.getRequestDispatcher("ChartData.jsp""); 
            view.forward(request, response);
     2.  In Jsp page
               <c:forEach items="${dataArray}" var="item">
                <tr>
                    <td><c:out value="${item.type}" /></td>  // 
                           ----
                             ---                          
            </c:forEach>              
    
    • 在 jsp 中使用 Scriptlet(再次声明它不是标准或这样做是已弃用。请参阅此链接 why JSTL, by BalusC (stackoverflow)):

      • 在jsp页面中:

      1

       while (rs.next()) { %>
            <tr>
               <td> <%= rs.getString("Type") %> </td> (or)  u could do column number of needed 'field' in u database ie: if "Type" is at 3rd column <%= rs.getString(3)  ) 
               <br> <td> <%= rs.getString("Value") %> </td>
               <br>  <td> <%= rs.getString("Month") %> </td>              
          %< } %>
      

      2 并在服务器的 Jsp 页面中运行你的 jsp。完成了。

      希望这对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多