由于我在网络应用程序方面没有太多经验,所以我现在一直在努力解决这个问题。
我有一个index.jsp
页面向Servlet
发送请求,该请求会创建一个非常大的csv
表(5列,500.000+行)。由于表已排序,我想获取前100行并将其显示在html
表中。因此Servlet
会将请求对象重定向到应该显示数据的table.jsp
。
我想我需要就这方面的一般方法提出一些建议。我想到了几种方法和问题:
创建csv
文件时,将前100行存储在数组数组中,并通过请求对象将它们发送到jsp
页面,在html table
页面中显示它们csv
1}}。
只发送jsp
文件的路径并直接在json
页面中读取前100行。
选择jsp
作为转移格式是否有用?
对象是否包含500个字符串太多而无法在请求对象中传输?
请求对象是否可以将数据传输到{{1}}页面?
感谢您的帮助
答案 0 :(得分:2)
JSP页面由容器编译成servlet,因此它们最终是servlet,您可以在其中使用Java代码。因此,无需像使用Javascript解释数据时那样使用JSON
作为传输格式。 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
是一个包含实例变量abc
,def
和ghi
并且具有getter方法的对象。
请注意,如果您还没有JSTL jar(可以下载here),请将其放在WEB-INF / lib文件夹中。