如何在来自Servlet的JSP中从ArrayList打印对象

时间:2014-02-12 02:13:15

标签: javascript jsp servlets scriptlet

所以我有一个从数据库中检索一些数据的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: 包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>

}

谢谢!

1 个答案:

答案 0 :(得分:0)

  • 顺便说一下,在获取表数据后没有设置任何Attrubute(request.setAttribute("<somename>",DataArray))而不是从servlet转发到correspoting页面[

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

]。

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

        function myFunction(){
       ------
        ---- 
          -----
            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&lt;%查询数据库,如此之后在Servlet页面中提到的那样        下面提到的代码来自你的servlet页面,只需将它应用到你的Jsp页面,如图所示:

     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然后在服务器的ur Jsp页面中运行你的jsp。它完成了。

    希望这可以帮助你。