【问题标题】:Loading JSP pages from custom sources从自定义源加载 JSP 页面
【发布时间】:2008-10-12 12:36:50
【问题描述】:

是否可以在 Web 应用程序之外执行 JSP 页面并捕获其输出? 具体来说,在我的情况下,仍然存在一个普通的 Web 应用程序,但它不是从其类路径加载 JSP 页面,而是从任意源加载。似乎我不能简单地获取 RequestDispatcher 并将其指向磁盘上的 JSP 文件。

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

    我认为你最好使用像速度这样的模板引擎。这为动态内容提供了一个干净的基础架构,这明显不同于您所要求的 jsp/servlet 内容。

    也就是说,我已经看到应用程序将 jsps 复制到其部署的目录中,以便容器获取并翻译它们。如果您这样做,请注意这会限制您未来的选择:

    • 您依赖于您的应用程序被“爆炸” - 例如它不能直接从 WAR 存档中运行(这可能会限制您的部署选项)
    • 如果您不禁用 scriptlet,则在运行时使 jsps 可编辑可能会打开安全漏洞(如果您禁用了,但它会有点困难...)。禁用 scriptlet 会禁止在 jsps 中使用真正的 Java 代码,那么您将仅限于标记库。
    • 您需要一个在运行时可用的 Java 编译器,而您可能不希望在生产系统中拥有它 - 例如。你不能在部署之前预编译你的 jsps。此外,您还需要在生产系统的运行时支付通常的 jsp-translation-penalty。

    用于禁用脚本的 web.xml 配置:

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <scripting-invalid>true</scripting-invalid>
        </jsp-property-group>
    </jsp-config>
    

    我希望这个 web.xml sn-p 能通过,预览没有正确显示...

    更新:尝试让 xml-sn-p 正确显示。

    【讨论】:

      【解决方案2】:

      如果我错了,请纠正我,但我认为您的意思是要捕获 HTML……而不是 JSP。 JSP 在 servlet 引擎(Web 应用服务器)上处理(到 JAVA 文件),在 HTML 被格式化并通过 Web 服务器(与 Web APP 服务器不同)提供给请求者之后。您无法让 RequestDispatcher 从磁盘直接处理 JSP,因为它尚未被 Web 应用服务器处理。 现在,应该可以捕获 JSP 的输出(在 HTML 中),但我以前从未这样做过。可能有一些精巧的 API 比我能解决的知识更丰富,但 HTTP 通常在端口 80 上完成,所以我猜一个人可以读/写 TCPIP 套接字上的端口 80。在此之上可能还有一些事情要做,但至少这是开始研究的一些点。
      抱歉,我无法提供更多细节,但见鬼……这对我来说都是理论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        相关资源
        最近更新 更多