[英]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.