我想以编程方式调用JSP解析器。这意味着我希望能够在Java中“运行”jsp页面并获取其输出,而不将其发送回客户端(我实际上希望将输出保存到文件中)。我不想将请求“转发”到JSP页面。我希望能够在连续的几个JSP页面上做到这一点。
这样做的最佳方式是什么?
我找到了question,但BalusC并没有直接回答这个问题。
如果您想知道,我需要这样做是因为我想“预编译”JSP以便在Java servlet容器之外的其他平台上使用。
修改
我需要的不是.class文件,而是HTML输出。实际上,一旦生成,它将是静态的,但我有一些自定义的jsp标签,我想利用JSP解析器来扩展它们。
答案 0 :(得分:1)
我不确定我是否理解这一切。
JSP被解析并预编译为.class
个文件。那时他们是Java servlet。您需要一个servlet引擎来执行它们。
如果您的目的是将生成的HTTP响应捕获为“预编译”响应,则表示没有动态内容,并且每次发送该特定请求时响应都相同。如果是这样的话,你得到的就是静态HTML。
如果我是对的,这似乎是一种很难产生这种东西的方式。
如果您希望将JSP预编译为.class文件,问题是不同的Java EE应用服务器使用不同的JSP预编译引擎。您无法使用Tomcat预编译JSP并在WebLogic上使用它们。
答案 1 :(得分:1)
从jsp页面获取html输出的最佳方法是将其实际部署到真实的Web服务器,然后调用页面并保存渲染的输出。
如果您想自动执行此部分操作,您可能希望使用通过真实界面进行练习的测试工具,例如Selenium或模拟浏览器,例如HttpUnit
但这不仅仅是调用JSP编译器。
答案 2 :(得分:1)
使用http://freemarker.sourceforge.net/或http://velocity.apache.org/
等模板引擎可能更实际Freemarker甚至似乎支持JSP Taglibs:http://freemarker.sourceforge.net/features.html
答案 3 :(得分:0)
您的JSP是否是动态生成的。如果是这样,那么您将陷入一种潜在的劣势,即您的JSP将被反复编译,从而导致性能问题。
但是,如果您可以拥有一个包含准备显示所需的所有规则的大型JSP,则可以使用HttpClient调用您自己的JSP并返回HTML。这将确保您不依赖于应用程序服务器。如果您使用JSP Parser,那么您将依赖于供应商。
但是如果您的JSP是动态构造的,那么您应该查看可以在Java端生成HTML的选项。但如果它涉及基于规则的HTML创建,那么最好用Java创建它。您可以使用Apache Jakarta ECS库。
是的,JSP并不是为了这个目的。