我需要执行一个JSP.但我需要直接从Java,而不使用Tomcat或任何其他servlet容器.编译JSP也是一件好事,但不是必需的.我想也许org.apache.jasper包可以做到这一点,但我找不到任何好的示例或在线教程.
我需要一些东西:
Class compiledJSP = compileJSP(new File("helloWorld.jsp"));
String html = executeJSP(compiledJSP, httpServletRequest, httpServletResponse, ...);
html --> "Hello World, John!"
Run Code Online (Sandbox Code Playgroud)
谢谢!
Chs*_*y76 19
如果您需要捕获JSP的输出字符串是相当简单(虽然远从设计上来看理想的)从内 Servlet容器:
1.扩展javax.servlet.HttpServletResponseWrapper并重写的getWriter()/的getOutputStream()方法,以提供您的自己的缓冲版本(例如StringWriter)
2.调用RequestDisparcher的"include()"方法,将原始响应包装在您自己的中.
3.抓取缓冲区的内容.
现在如果你需要在 Servlet Container 之外做同样的事情,你真的需要问自己"为什么?".也许您应该使用模板引擎(FreeMarker/Velocity/StringTemplate/etc ...)而不是JSP?如果您的JSP是格式良好的XML文件并且没有使用任何Java代码插入,那么将它们转换为FreeMarker模板(FreeMarker支持自定义JSP标记库)可能相当简单,这将极大地简化您的任务.
然而,如果这是一个绝对的硬性要求,那么您最直接的选择是:
1.运行外部Servlet容器并让它处理JSP解释.您的程序将向其提交HTTP请求并捕获输出.
2.与上面相同,但您可以运行嵌入式Servlet容器(例如Jetty).
如果您的JSP在构建时可用,您可以按照其他答案中的建议通过Jasper预编译它们.
我强烈建议不要试图实现自己的servlet容器 - 你将走进一个受伤的世界.
| 归档时间: |
|
| 查看次数: |
19609 次 |
| 最近记录: |