Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库动态创建JSP模板(视图)_Java_Google App Engine_Jsp_Spring Mvc - Fatal编程技术网

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

Java 从数据库动态创建JSP模板(视图),java,google-app-engine,jsp,spring-mvc,Java,Google App Engine,Jsp,Spring Mvc,我正在使用Java和SpringMVC开发一个应用程序。通常,在/WEB-INF/view/文件夹中存储一个JSP文件,该文件作为所有请求的视图 通常我们有这个JSP硬编码,它也有一些代码来处理模型(标记和EL)。到目前为止,一切都很顺利 现在,我想从数据库动态填充这个JSP文件,而不是硬编码JSP。因此,用户可以上传并选择不同的模板/主题/布局来显示其页面 下面是解释我试图做什么的代码(我知道这不是方法,只是为了说明) /WEB-INF/views/index.jsp <%@ page

我正在使用Java和SpringMVC开发一个应用程序。通常,在/WEB-INF/view/文件夹中存储一个JSP文件,该文件作为所有请求的视图

通常我们有这个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") %>

我在网上搜索了这个主题,但什么也没找到

任何关于如何实现这一点的帮助都将不胜感激

提前谢谢


重要提示:我几天前提出了这个问题,但一些成员将其标记为“离题”。我还不明白这个问题是怎么离题的-。

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

因此,请考虑将视图技术(至少对于动态部分)转换为一些通用模板库。这带来了安全性上的好处,因为在这样一个模板中可以破解的东西比在JSP代码中破解的要少

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

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


然而,如果JSP是一个硬需求,我想JSP的一个难看的解决方法(应该在任何servlet容器中都可以使用)可能是从数据库中获取内容,并在分解的webapp根目录下创建一个实际的文件(如
WEB-INF/templates/${primarky key}.JSP
),然后
RequestDispatcher.forward()
到它。

您可能无法使用JSP实现这一点,但您当然可以在内存中编译Java代码,然后调用它


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

这是离题的,因为您不是在问一个具体的问题(“我试图这样做,但发现了错误”),而是一个一般性的问题(“我想这样做”),没有代码来解释您到目前为止做了什么。考虑到将文件写入磁盘并不是什么新鲜事,您应该更好地描述您遇到的问题;MVC方法(浏览器调用servlet,重定向到一个JSP,从而得出答案)加上CSS是一个更标准的解决方案。@SJuan76-谢谢。我无法写入文件系统,因为我正在使用GAE,它不允许写入。是的,我使用的是MVC方法,但我希望视图(即JSP视图本身)能够从数据库中动态生成。我不知道JSP,但作为一种通用的模板思想,为什么不将不同的部分存储为不同的部分模板,然后根据可以存储在DB中的字符串值对模板进行编码,以正确地组装片段?@jpmc26-谢谢。在这种方法中,问题仍然是一样的——如何添加模板片段的代码来创建复合JSP视图?我已经探索了使用ApacheTiles的可能性,但这又让我想到了静态模板片段。谢谢。探索了一点Freemarker,我想界面模板加载程序可以帮助我。虽然我仍然很好奇,想知道这是否可以通过任何方式在JSP中实现。我用我认为可行的方法编辑了答案(尽管我强烈建议反对,如果你能够选择的话)。我将在Google app Engine上部署该应用程序,它不允许在文件系统中写入。然后。。。如果可以的话,请忘记JSP,或者尝试使用@user2310289的答案或类似的东西进行实验。