将数据从servlet发送到jsp,显示在html表中。

时间:2013-02-11 19:37:08

标签: javascript jsp servlets

由于我在网络应用程序方面没有太多经验,所以我现在一直在努力解决这个问题。

我有一个index.jsp页面向Servlet发送请求,该请求会创建一个非常大的csv表(5列,500.000+行)。由于表已排序,我想获取前100行并将其显示在html表中。因此Servlet会将请求对象重定向到应该显示数据的table.jsp

我想我需要就这方面的一般方法提出一些建议。我想到了几种方法和问题:

  1. 创建csv文件时,将前100行存储在数组数组中,并通过请求对象将它们发送到jsp页面,在html table页面中显示它们csv 1}}。

  2. 只发送jsp文件的路径并直接在json页面中读取前100行。

  3. 选择jsp作为转移格式是否有用?

  4. 对象是否包含500个字符串太多而无法在请求对象中传输?

  5. 请求对象是否可以将数据传输到{{1}}页面?

  6. 感谢您的帮助

1 个答案:

答案 0 :(得分:2)

JSP页面由容器编译成servlet,因此它们最终是servlet,您可以在其中使用Java代码。因此,无需像使用Javascript解释数据时那样使用JSON作为传输格式。 JSP在服务器端进行评估。

所以,我会这样做:

  • 在您的servlet中,检索数据
  • 将请求转发给JSP(这发生在服务器端;客户端(浏览器)无法像重定向那样识别此步骤)
  • 在JSP中构建表(并呈现响应)

Servlet代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)             
                  throws ServletException, IOException {
    List<MyObject> listData = ...; // however you get the data
    // set the attribute in the request to access it on the JSP
    request.setAttribute("listData", listData);
    RequestDispatcher rd = getServletContext()
                               .getRequestDispatcher("/path/to/page.jsp");
    rd.forward(request, response);
}

JSP(使用JSTL taglib):

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- html, head and starting body tag ... -->
<table>
    <c:forEach var="element" items="${listData}">
        <tr>
            <td>${element.abc}</td> 
            <td>${element.def}</td> 
            <td>${element.ghi}</td>
        </tr> 
    </c:forEach>
</table>

其中MyObject是一个包含实例变量abcdefghi并且具有getter方法的对象。

请注意,如果您还没有JSTL jar(可以下载here),请将其放在WEB-INF / lib文件夹中。