当前位置: 首页 > 知识库问答 >
问题:

通过Spring MVC Web应用程序向客户端发送文本文件

太叔英锐
2023-03-14

在网上做了一些关于这个主题的研究后,我目前设法让事情与此代码一起工作:

@RequestMapping(value = "/report040Generated", method = RequestMethod.GET)
    public String index(Model model, HttpServletResponse response, HttpServletRequest request) throws IOException {

        String myString = "Hello";
        response.setContentType("text/plain");
        response.setHeader("Content-Disposition","attachment;filename=myFile.txt");
        ServletOutputStream out = response.getOutputStream();
        out.println(myString);
        out.flush();
        out.close();

        return "index";
    }

我的问题是,当我点击我的JSP按钮时,文件会被下载,但方法不会重定向到“索引”。jsp视图,并给我一个非法状态例外:

严重:Servlet。servlet jsp的service()引发了异常java。lang.IllegalStateException:已为此响应调用getOutputStream()

关于可能导致此问题的原因有何建议?

共有3个答案

松锐藻
2023-03-14

在返回“index”之前,需要首先清除默认的JSPWriter

out.close();out.clear (); //清除默认的JSPWriter返回索引;

云何平
2023-03-14

我认为你程序中的逻辑应该分成两部分,一部分用于下载,一部分用于重定向,因为一旦你写了一些东西到响应#输出流属性,响应应该被认为是提交的,不应该被写入,例如用网址重定向。

大多数网站习惯于先重定向到下载页面以获取文件,然后让用户单击某个按钮/链接以重定向回任何其他页面(本例中为index.jsp)。

在该下载页面中,您可以使用JS进行下载:

<script type="text/javascipt">
function startDownload()
{
var url='http://server.com/app/url?file=file.ext';  
window.open(url,'Download');
}
 
setTimeout("startDownload(), "2000"); // 2 seconds
</script>
古起运
2023-03-14

返回文件时,无法重定向到另一个页面,因为文件本身是http响应。这里有很好的解释:Spring-下载文件并重定向

 类似资料:
  • 问题内容: 我只能在用户的套接字ID直接存储在io.sockets.on(’connect’)函数中时向用户发出消息。我不知道为什么在登录后尝试存储其套接字ID时为什么不起作用。 加工: 无法运作: JavaScript客户端代码段 解决方案:感谢@alessioalex, 我不得不从登录页面中删除对socket.io的引用,并将以下内容添加到io.sockets.on(’connection’)

  • 我正在从服务器向客户端发送自定义web套接字帧。我成功地实现了无缝握手,但发送常规文本帧会给我带来问题(客户端的消息未被接收)。这是我发送的: 数据发送正确(握手成功,jj值为6)。我的代码基于这里的解释,如何在服务器端发送和接收WebSocket消息?。 我的客户非常简单,我只是为了完成发布: 我从客户端获得的Web套接字版本是13。 知道为什么握手有效而普通文本无效吗?

  • 我尝试将Spring与websocket一起使用。我从本教程开始调查。 在我的侧客户端,我有类似的东西来初始化到服务器的连接: 它工作得很好,在我的控制器中,我可以在下面的类中执行我的过程: 现在我想做的是让一个线程向监听“/主题/问候”的客户端发送消息。我这样写Runnable类: 这样完成了我的控制器: 该方法采用光电控制器。fireGreeting按我的要求调用,但客户端没有发生任何事情。有

  • 问题内容: 您好,我一直在尝试将文件从node.js发送到客户端。 我的代码有效,但是当客户端转到指定的url()时,它将流式传输文件。 从Google Chrome浏览器访问该文件可使文件(.mp3)在播放器中播放。 我的目标是让客户的浏览器下载文件,然后问客户他想在哪里存储文件,而不是在网站上流式传输。 问题答案: 您需要设置一些标题标志。 用下载代替流媒体;

  • 我后来理解对了。实际上,我需要一条来自android客户端的MQTT消息发送到所有其他客户端,所以我想在消息正文中包含publish关键字,这是非常错误的。MQTT本身将接收到的消息发送给所有提供的客户端,如果客户端订阅了该主题的话。

  • 问题内容: 所以现在,我正在制作一个基于客户端服务器应用程序的多线程。在服务器端,我为接受的每个连接创建了一个线程。 在线程类中,我创建了一种将命令发送到客户端的方法。我只想要的是如何将参数发送到所有正在运行的客户端?为简单起见,我只想使此服务器向所有连接的客户端发送消息。 我已经阅读了这篇文章,并从此链接中找到方法。但是,当我尝试使用自己的代码时,中没有类似的方法。 好的,这是我的服务器和线程示