2

我正在尝试动态创建一个 RSS 提要并将其存储在服务器上,以便访问创建的 RSS 提要,我只需从浏览器中输入 URL。有可能这样做吗?

我可以创建 RSS 提要,但是当我尝试将其保存在服务器上时,FileOutputStream("WebContent/filename.xml")它会给我FileNotFoundException. 我的方法是否正确,或者是否有任何其他方法可以将文件存储在服务器上并使用简单的 URL 访问它?

我正在使用 spring 调度程序每分钟运行我的应用程序以动态创建 RSS 提要。

4

5 回答 5

4

通常,您不会“生成和存储”此类东西。您动态地提供服务并缓存它们(http 缓存(用于客户端)和内部缓存(这样您就不会多次获取))。Spring 3.1 缓存抽象很容易做到这一点。

为了将文件存储到服务器,您需要知道 webapp 的根目录是什么。你可以得到它request.getServletContext().getRealPath("/")。请注意,这些文件将在取消部署后消失,因此您可以考虑将它们存储在应用程序外部的绝对位置。另请注意,您不能将它们写入未爆炸的战争档案中。还有一件事 -WebContent默认情况下没有 - 它直接是项目,但它不对应于可分发的 Web 应用程序中的目录。

于 2011-07-12T18:27:55.177 回答
2

我的建议是使用您的 HTTP 守护程序(可能是 Apache)在服务器上公开一个目录,然后让应用程序在那里写入。据我所知,您不能在 WAR/EAR 中写入文件。

于 2011-07-12T18:24:09.393 回答
1

您混淆了用于存储项目源文件的目录和在服务器上部署应用程序的目录。

首先定义部署应用程序的方式和位置(如果它是一个war文件,你甚至没有根目录),然后相应地设计你的应用程序。

如果您想保持可移植性,您应该定义一个配置参数(在您的 web.xml 中)定义外部文件的存储位置,并让一个 servlet 从该目录读取文件并将其内容写入响应输出流。

但是您也可以将服务器配置为从特定目录提供静态文件并将 XML 文件写入该目录。阅读您的服务器的文档以了解是否以及如何做到这一点。

于 2011-07-12T18:28:18.703 回答
0

贾斯汀说的是对的,但我会更进一步说你真的需要将它存储在磁盘上吗?

如果文件不是那么大(我敢打赌不会),那么只需将 url 指向一个 servlet,该 servlet 从缓存的内存中返回它,然后让该 servlet 也每分钟重建它。

于 2011-07-12T18:28:14.133 回答
0

这是我在 Servlet 方法 doGet(...) 中的解决方案。它不会将RSS保存在文件系统中,每次(有请求时)都会创建它。我把它写成 HTTP 响应。

response.setContentType("application/rss+xml");
response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
response.setHeader("Pragma", "no-cache"); // HTTP 1.0
response.setDateHeader("Expires", 0); // prevents caching at the proxy server

PrintWriter out = response.getWriter();
out.print("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
[...]
out.print("</xml>");
out.flush();
out.close();
// set header information

当需要将其写入文件系统时,这是一个解决方案,我用它在服务器上保存图像,它再次在 servlet 方法中:

String absoluteFilesystemPath = getServletContext().getRealPath("/");
System.out.println(absoluteFilesystemPath);
File f = new File(absoluteFilesystemPath+"file.xml")
于 2011-07-12T18:37:53.860 回答