捕获 JSP 输出,保存到文件
Posted
技术标签:
【中文标题】捕获 JSP 输出,保存到文件【英文标题】:Capture JSP output, save to file 【发布时间】:2010-10-13 05:55:48 【问题描述】:我的任务是尝试创建一个可以创建自定义 html 模板的站点。定制是基于用户输入定制的。我目前在前端的其余部分使用 tomcat / JSP。我想要做的是在 JSP 中创建 HTML 模板以输出条件 HTML 代码,但我不想将此 HTML 输出显示给用户,而是将此代码保存到几个文件中(然后将其压缩并交付到用户,以及图像、css 文件、js 文件)。我需要知道如何创建一个将执行 JSP 文件的假容器(过程包括和评估变量)。
我阅读了有关使用服务器过滤器拦截 JSP 代码输出的信息,但我不确定这是否可行,因为 a) 我需要创建几个 HTML 文件 b) 我需要向用户显示不同的内容(即这里的你的 zip 文件,下载它)不是正在处理的 JSP 的输出。
谢谢!
【问题讨论】:
【参考方案1】:您也可以尝试使用专为此类工作设计的众多轻型模板引擎。当我有类似的任务并且从不回头时,这就是我所做的。以Velocity 为例。
【讨论】:
【参考方案2】:我真的不确定我是否理解你的问题,但我会试一试。为什么不创建一个 servlet 并使用以下命令调用您的 jsp 文件:
RequestDispatcher d = getServletContext().getRequestDispatcher(jspName);
d.forward(request, response);
让 jsp 显示带有表单/用户输入值的前端。表格完成后,提交表格。此时,jsp 会将上下文返回给 servlet,您可以在其中解析值,确定要创建哪些文件并将其返回给用户。确定要向用户显示的内容后,将其放入另一个 jsp 并将上下文传递给该 jsp。
您可以通过 2 种方式做到这一点。您可以为希望返回的不同文件类型创建不同的 jsp,然后调用正确的 jsp。或者,您可以通过将所需的任何结构/值嵌入到请求中,然后将它们放入您的 jsp 中,将它们传递到您的 jsp 中。您可以使用这个事实来创建一个基于传入参数(嵌入在请求中)的单个 jsp 将显示正确的信息。
如果我完全错过了您问题的重点,请随时删除此回复。
编辑:无论哪种方式,您都必须在请求中嵌入您的值。
【讨论】:
【参考方案3】:这是一个想法。创建一个 servlet 以接受来自用户的输入,从 servlet 使用 java.net.HttpURLConnection 将输入传递给 JSP 页面并获取结果。
URL urlPage = new URL(url);
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection();
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//then loop through lines of webpage with br.readLine();
然后在您的 servlet 中,您可以压缩所有拉取的文件并将其返回给用户
【讨论】:
【参考方案4】:您可以有一个 servlet,它通过打开 URLConnection 然后将输出读入临时文件或缓冲区来调用 JSP。然后它会压缩它并写出拉链。
【讨论】:
【参考方案5】:为什么不使用 wget?您可以将页面加载到真实容器中,然后使用 wget 从容器中检索生成的页面。
--input-file=FILE read URLs from file.
在 wget 中使用此选项将从文件中获取 URL 列表并为您下载它们,就像文本将显示在浏览器的 view-src 中一样。
wget 也可用于Windows 和 Linux。
【讨论】:
感谢您的想法,我喜欢 wget,但它不符合我的需求 @Roy 与压缩位有关,不是吗? @leeand00 不具体,更重要的是这是一个必须在多个环境中工作的 java 环境,我们有 windows、mac 和 linux 开发人员在同一个代码库上工作,所以解决方案需要基于java以上是关于捕获 JSP 输出,保存到文件的主要内容,如果未能解决你的问题,请参考以下文章