3

我最近有一个问题要解决RequestDispatcher.forward并找到了一个解决方案,但如果我能以某种方式将请求转发到媒体 URL ,则该解决方案可能会大大简化。

从文档中,它说它只支持servlet、JSP 文件或 HTML 文件。无论如何,我尝试了一个媒体 URL,它没有抱怨,但是它没有返回正确的标题(例如 mime 类型),也许还有其他错误的东西,但无论如何它没有按预期工作。

有没有一种方法可以RequestDispatcher.forward与媒体 URL 一起使用,以便像直接向 Web 服务器请求媒体 URL 一样提供响应?

编辑:

我可以证明至少这Content-Type是正确的,因为它正在返回Content-Type text/html; charset=iso-8859-1任何媒体文件。另外,我尝试过直接在 Window Media Player 中打开 url,它似乎在开始播放之前下载了整个视频,这是不可接受的。因此,我可以放心地假设这forward不仅仅是将控制权交还给 IIS,或者至少对媒体文件不正确。

4

1 回答 1

2

您找到的解决方案指向了正确的方向,但我不知道coldfusion,但是使用 servlet 可以很容易地完成同样的事情。

如果你想使用RequestDispatcher.forward方法,那么你可以在 forward 方法中指定一个 servlet url。在该 servlet 中,您需要做的就是读取媒体并将其OutputStream作为响应发送。

例如:

在您的 servletdoGetdoPost方法中,您只需要根据您的媒体设置内容类型,阅读并发送它。

下面是一个简单的示例,您可以使用该示例将媒体作为来自 servlet 的响应发送:

public void doGet(HttpServletRequest request, HttpServletResponse response)  {
    response.setContentType("video/x-ms-wmx");
    ServletContext ctx = getServletContext();

    InputStream is = ctx.getResourceAsStream("/path/to/media/file");

    int read = 0;
    byte bytes[] = new byte[1024];

    OutputStream os = response.getOutputStream();
    while((read = is.read(bytes)) != -1) {
        os.write(bytes, 0, read);
    }
    os.flush();
    os.close();
}
于 2013-10-30T16:31:11.587 回答