【问题标题】:How do I send a list to the jsp that requested it?如何将列表发送到请求它的 jsp?
【发布时间】:2013-01-06 23:41:37
【问题描述】:

让我们假设有一个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 可以解析文件并显示数据。但这似乎不是一个好的选择。

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

【问题讨论】:

    标签: java jakarta-ee servlets jsp-tags


    【解决方案1】:

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

    编辑:

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

    resquest.setAttribute("listOfFiles",list);
    

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

    ${listOfFiles}
    

    这是 JSP 的一个内置特性。

    或者,您可以使用它访问它

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

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

    【讨论】:

    • 我不明白你的回答。你能详细说明一下吗
    • 远程服务器上的servlet如何转发到其他地方的jsp?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      其实要看jsp是怎么调用的。

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

      据此,有很多方法可以将数据发送到您的 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"); %>
      

      【讨论】:

      • @saplingPro 在 servlet 的 doGet() 或 doPost() 方法中,您必须选择如何调用 jsp。 servlet 也可以发出输出,但我认为最好使用“转发”到 jsp(参见上面的示例)。这样,在您的 JSP 中,您可以访问属性并执行您需要的操作。
      • 我不知道我们还可以在不属于同一系统的 servlet/jsp 之间发送属性。我的意思是一台机器上的 servlet 和某个远程服务器上的另一个 jsp :)
      • @saplingPro 这一切都取决于 servlet 如何实际调用 jsp,有很多方法可以让它们通信。我仍然不明白反对票。
      【解决方案4】:

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

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

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

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

      我会提出GET 请求和JSON encoding

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 2013-04-28
        • 2022-01-10
        • 2011-08-07
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多