1

由于我在 Web 应用程序方面没有太多经验,所以我整天都在为此苦苦挣扎。

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

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

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

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

  3. 选择json传输格式有用吗?

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

  5. 请求对象是向jsp页面传输数据的好习惯吗?

谢谢你的帮助

4

1 回答 1

2

JSP页面是由容器编译成servlet的,所以归根结底就是servlet,你可以在里面使用Java Code。JSON因此,当您想使用 Javascript 解释数据时,无需使用as 传输格式。JSP 在服务器端进行评估。

所以,我会这样做:

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

小服务程序代码:

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 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>

WhereMyObject是一个包含实例变量的对象abcdefghi为它们提供了 getter 方法。

Note that you need the JSTL jar (which can be downloaded here) in your WEB-INF/lib folder if you do not have it already.

于 2013-02-12T13:00:57.220 回答