gpt4 book ai didi

java - RequestDispatcher.forward 到媒体文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:27:35 25 4
gpt4 key购买 nike

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

根据文档,它说它只支持 servlet, JSP file, or HTML file .无论如何,我尝试使用媒体 URL,它没有提示,但它没有返回正确的 header (例如 mime 类型),也许还有其他错误的东西,但无论如何它没有按预期工作。

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

编辑:

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

最佳答案

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

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

例如:

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

下面是一个简单的示例,您可以使用它来发送媒体作为来自 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();
}

关于java - RequestDispatcher.forward 到媒体文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com