繁体   English   中英

如何将列表发送到请求它的jsp?

[英]How do I send a list to the jsp that requested it?

让我们假设有一个jsp ,它需要显示特定IP共享的共享文件列表。 客户端在其本地服务器上打开该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。

您可以在Servlet中使用request.setAttribute()。 然后,您可以使用JSP标记来检索JSP中的值。 研究一下。

编辑:

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

resquest.setAttribute("listOfFiles",list);

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

${listOfFiles}

这是JSP的内置功能。

另外,您也可以使用

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

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

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

实际上,这取决于jsp的调用方式。

您是否在其上张贴文章? Servlet是否执行转发? 还是sendRedirect()?

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

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

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

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

然后在jsp中,您可以:

<% Object myListObj = pageContext.getRequest().getAttribute("myList"); %>

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

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

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

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

我会去一个GET请求和JSON encoding

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM