【问题标题】:Java: Upload file and get back string (contents) of fileJava:上传文件并取回文件的字符串(内容)
【发布时间】:2011-09-22 16:17:57
【问题描述】:

您好,我有带有标准服务器端 Servlet 的 GWT 客户端。

  • 我可以从 GWT 客户端上传文件并在服务器端读取其内容
  • 我可以将它作为字符串发送回客户端

但是

我有 GWT FormPanel 带有操作 (myModule+"import")。 FormPanel 从 servlet 调用 POST。然后浏览器将我重定向到 myurl/import 以便我可以看到上传文件的内容。

不是我想要的。我只想让我的字符串回来。我添加了 submitCompleteHandler 到我的 FormPanel,但它不记录任何结果。

我注意到 servlet 有 setContentType 这样的方法,所以我尝试了 text/html、text/plain ...我不知道应该有什么 ...

一句话,我想将String从servlet发送回客户端,而无需浏览器将我重定向到其他地方。可能吗?

【问题讨论】:

    标签: java gwt servlets


    【解决方案1】:

    由于您正在提交表单,因此您可以通过浏览器更改导航。为了使其按照您希望的方式工作,您必须使用 ajax 发送文件。对于 GWT,有一个 GWTUpload 库允许您这样做。

    【讨论】:

      【解决方案2】:

      如果浏览器重定向你,那是因为你给了 FormPanel 一个“目标”。默认情况下,它在隐藏的 iframe 中提交(也称为“ajax 上传”)。

      正如in the javadoc 所说,如果您希望可靠地调用onSubmitComplete,则必须在您的servlet 中使用setContentType("text/html")

      onSubmitCompleteresults 是返回的 HTML 的 body innerHTML,因此在返回带有 <& 的值时必须非常小心。让它们恢复的唯一可靠方法是在服务器端转义它们,并在客户端取消它们的转义。您可以使用自己的转义机制,也可以使用<&。在后一种情况下,要在客户端取消转义,您可以使用 String#replace,或者创建一个 HTML 元素,使用返回的字符串设置它的 innerHTML,然后获取它的 innerText:

      public String htmlUnescape(String htmlEscaped) {
         Element tmp = Document.get().createDivElement();
         tmp.setInnerHTML(htmlEscaped);
         return tmp.getInnerText();
      }
      

      在服务器端,你会使用:

      escaped = content.replace("&", "&amp;").replace("<", "&lt;")
      

      (如果您不希望&amp;amp;lt;s 变成&amp;amp;lt;,请在此处订购;另外,替换&amp;amp;lt;&amp;amp; 就足够了,&gt;" 不会在这里造成任何问题)

      但是,在您的情况下,请首先确保文件的内容是“文本”而不​​是“二进制”,因为将其作为字符串返回是没有意义的,这可能会导致问题,具体取决于您在客户端上使用该值的方式一边。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 2011-10-20
        • 2023-03-16
        • 1970-01-01
        • 2010-09-24
        相关资源
        最近更新 更多