如何将JSP用作模板而不将其作为网页

时间:2016-05-26 12:45:11

标签: java jsp google-app-engine servlets jinja2

根据我的理解,JSP是为客户服务的东西。但是,是否可以将JSP简单地用作模板来动态组装html页面,然后将其提供给客户端?我的意思是这个

  1. servlet接收来自用户的呼叫
  2. 经过一些计算,我的servlet调用JSP来动态组装html页面
  3. servlet获取或转换JSP"结果" (生成的html页面)到String
  4. servlet现在可以使用该String执行任何操作。它可以将其作为html网页返回,也可以将其存储在数据库中,或者其他任何内容。毕竟,这里的字符串是一个合适的html页面/文本。
  5. 为了比较,Python有Jinja2,它完全按照我刚才的解释。 Java中与Jinja2最接近的似乎是JSP。

    我需要一个模板来动态组装html页面。如果我可以使用上面的JSP那么这将解决我在Java中的问题。请注意,我并不关心JSP本身。我只需要一个类似于Jinja2的模板(如果我可以在App-Engine上使用Java中的Jinja2那将是理想的)。我也是JSP的新手。所以,如果你有答案,请将其格式化为一个例子;这将是真正有用的。

    出于商业原因,我正在从Python App-Engine迁移到Java App-Engine。

1 个答案:

答案 0 :(得分:0)

这是可能的,但你需要跳过几个箍,其细节取决于特定的容器 - 在这种情况下是appengine。

快速摘要:

  • 创建一个假的httpservletresponse,包装您在渲染后访问的输出流。您不能使用httpservletresponsewrapper,即使规范允许此环境赢了
  • 将所有请求属性存储在地图中,以后在发生变异时将其恢复
  • 使用requestdispatcher.include,传递真实请求和合成回复
  • 恢复请求属性
  • 从输出流中读取字符串

特别注意您的请求/响应的副作用,例如围绕调用getwriter或getoutputstream之一的约束,以及最终确定请求(设置状态或内容长度)

或者只使用速度,把手,自由标记或其他各种Java模板语言中的一种。他们都会更直接。