从数据库动态创建JSP模板(视图)

时间:2013-08-09 06:43:12

标签: java google-app-engine jsp spring-mvc

我正在使用Java和Spring MVC开发应用程序。像往常一样,将一个JSP文件存储在/ WEB-INF / view /文件夹中,该文件用作所有请求的View。

通常我们有这个JSP硬编码,它也有一些代码来处理模型(标签和EL)。事情一直很好,直到现在。

现在我不想对JSP进行硬编码,而是想从数据库中动态填充这个JSP文件。因此,用户可以上传并选择不同的模板/主题/布局来显示他的页面。

这是解释我想要做什么的代码(我知道这不是方法,而只是为了说明目的)。

/WEB-INF/views/index.jsp

<%@ page import="com.example.domain.Template" %>
<%@ page import="com.example.dao.TemplateStore" %>

<!-- Following code is supposed to return complete JSP template from the database as uploaded by the user. -->

<%= TemplateStore.getUserTemplate("userTemplate") %>

我在网上搜索了这个主题但找不到任何内容。

任何有关如何实现这一目标的帮助都将受到高度赞赏。

提前致谢。

重要提示:我几天前曾问过这个问题,但有些成员标记为“非主题”。我还没理解这个问题是如何脱离主题的 - https://stackoverflow.com/questions/18026092/creating-content-of-jsp-views-in-web-inf-views-dynamically-from-the-database

2 个答案:

答案 0 :(得分:3)

如果要从数据库中动态获取视图模板,则不应考虑JSP。 JSP被编译成servlet类,除了标准方式(webapp根目录下的某个静态文件)之外,几乎不支持这样做。

因此,只需考虑将视图技术(至少对于动态部分)切换到某些通用模板库,如VelocityFreemarker。这带来了安全奖励,因为在这样的模板中,可以从JSP代码中删除的内容少。

您甚至可以支持多种视图技术(可能是Spring MVC支持开箱即用的任何内容,JSP除外),并允许您的用户在上传时选择模板类型。

然后你可以编写一个自定义视图解析器,它将使用用户选择的模板委托给相应的标准解析器(Velocity,Freemarker,XSLT,等等......)。

但是,如果JSP是一个硬性要求,我想JSP的一个丑陋的解决方法(应该在任何servlet容器中都可以工作)可能是从数据库中获取内容并在下创建一个实际文件(如WEB-INF/templates/${primarky-key}.jsp)您的爆炸的webapp根目录,然后是RequestDispatcher.forward()

答案 1 :(得分:0)

您可能会或可能不会使用JSP执行此操作,但您当然可以在内存中编译Java代码然后调用它。

http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm

当然,从JSP到Servlet只是另一个步骤。