代码之家  ›  专栏  ›  技术社区  ›  Rainer Joswig

从自定义源加载JSP页面

  •  3
  • Rainer Joswig  · 技术社区  · 17 年前

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

    2 回复  |  直到 17 年前
        1
  •  3
  •   Olaf Kock    17 年前

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

    也就是说,我见过一些应用程序将JSP复制到它们部署的目录中,以便容器接收并翻译它们。如果你这样做,请注意这限制了你未来的选择:

    • 你依赖于你的应用程序被“分解”——例如,它不能直接从战争档案中运行(这可能会限制你的部署选项)
    • 如果不禁用Scriptlet(如果确实禁用了,但会有点困难),那么在运行时使JSP可编辑可能会打开安全漏洞。禁用scriptlets会禁止JSP中的真正Java代码,因此您只能使用标记库。
    • 您需要一个运行时可用的Java编译器,而您可能不希望在生产系统中使用它——例如,您不能在部署之前预编译JSP。此外,您还需要在生产系统的运行时支付通常的jsp翻译罚款。

    网状物用于禁用脚本的xml配置:

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

    我希望这个网站。xml片段已通过,预览未正确显示。。。

    使现代化 :试图使xml代码段正确显示。

        2
  •  0
  •   Jeremy French    17 年前

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

    推荐文章