2

让我们假设有一个需要显示由特定IPjsp共享的文件列表。客户端在他的本地服务器上打开它,并将请求发送到远程服务器以获取列表。jsp

Servlet服务器上处理请求并获取该 IP 共享的文件列表。现在 servlet 如何将该列表发送到请求它的 jsp 页面?

JSP :

connection.openConnection(); // Connection sends IP as the query parameter to the 
                             // remote servlet

Servlet :

doGet(..parameters..) {
 list = getList(forThatIP);
 // NOW HOW DO I SEND THIS LIST ?
}

我认为的一种方法是将整个数据作为查询字符串发送到客户端的 servlet(运行诸如 tomcat 之类的服务器),然后将该列表存储到某个文件中。稍后 jsp 可以解析文件并显示数据。但这似乎不是一个好的选择。

注意:成功发送 IP 到远程 servlet 后,servlet 转发时调用 JSP

4

4 回答 4

1

您可以在 Servlet 中使用 request.setAttribute()。然后,您可以使用 JSP 标记来检索 JSP 中的值。对此进行一些调查。

编辑 :

在 Servlet doGet 方法中,您可以设置一个属性,例如 listOfFiles 为:

resquest.setAttribute("listOfFiles",list);

然后在 JSP 中,您可以使用 EL 表达式检索它:

${listOfFiles}

这是 JSP 的一个内置特性。

或者,您可以使用

<% request.getAttribute("listOfFiles")%>

但是在 JSP 中嵌入 Java scriptlet 是不好的。

于 2013-01-23T13:18:32.257 回答
0

实际上这取决于如何调用jsp。

你在上面发帖吗?servlet 是否执行转发?还是一个 sendRedirect() ?

根据this有很多方法可以将数据发送到您的jsp。一种是使用请求属性或更好,使用请求范围的 bean。另一个可以将您的列表的某种表示形式作为发布参数发布(无论是 json、xml 还是您的某种自定义格式)。

要考虑的另一件事是,您在使用什么?杰夫? 一些Spring库?据此,可能有其他更好(或更差)的方式来发送数据。

如果在一个小项目上使用简单的 JSP/Servlet,我会亲自使用 request.setAttribute() 方式,确实这将迫使我通过类似的方式调用 jsp

request.setAttribute("myList", yourListObject);
request.getRequestDispatcher("yourjsp.jsp").forward(request, response);

然后在jsp中你可以:

<% Object myListObj = pageContext.getRequest().getAttribute("myList"); %>
于 2013-01-23T13:23:57.303 回答
0

如果您通过连接传递复杂数据(列表等),您可以考虑使用 JSON 或 XML。您的 JSP 代码应该能够使用正确的库轻松解析。

于 2013-01-23T13:19:56.290 回答
0

当您从代码调用 servlet 时,最好的方法是使用 HttpServlet 并模仿浏览器行为。

传递 URL 中的数据是一个GET请求。仅对相对较小的数据块有用,但语义看起来像您想要的(“获取一点数据”)。类似的东西http://myremoteserver.com/myServlet?ip=...。您需要对参数进行正确编码(Java API 可以处理)。

通过写入流来传递数据将是一个POST请求。它对传递给服务器的数据没有限制,但语义不同(“更改系统中的某些内容”)。您可以在写入的内容中将数据作为参数传递,我不确定如何解码。另一种选择是使用Servlet(no HttpServlet) 并只处理原始数据。

在这两种情况下,响应都将在连接输出流中返回。你可以使用任何你喜欢的格式(像 JSON 这样的标准格式可能是最好的,即使是定义你自己的 XML)。在这种情况下,一个可行的替代方案是文件名由“安全”字符(如\n|)分隔。很快,但将来会变得不那么灵活。

我会去GET请求和JSON encoding

于 2013-01-23T13:33:56.390 回答