服务存储在DB中的JSP

时间:2009-12-03 13:42:00

标签: jsp spring-mvc resources

我想将一个JSP页面作为blob存储在数据库中。因此,如果请求来自URL http://mydomain.com/app/list.jsp,我知道要转到数据库以检索资源list.jsp。

我使用的是spring和tiles,因此adispatcher servlet和控制器的设置和工作都是传统意义上的。原则上这与Spring网站必须提供来自jar内的javascript文件和消息的资源servlet类似吗?

请注意,JSP不仅仅是静态HTML,我将拥有与页面关联的bean(模型属性),因此仍然希望使用EL来查询bean。

干杯

2 个答案:

答案 0 :(得分:3)

JSP加载和编译在servlet容器中实现。我可以考虑使用两种方法来实现此功能:

  1. 修改servlet容器的JSP servlet。如果您正在使用开源的Jetty或Tomcat,您可以轻松查看其JSP servlet并对其进行更改,以便从数据库中读取JSP。您可以调整其中一个用于专有容器。这是解决问题的最直接方法,但是你正在进入潜在错误的雷区。
  2. 按计划在数据库中构建CMS,但在应用程序运行时将JSP复制到正在运行的应用程序的文件系统。让应用程序服务器正常的JSP更改检测通知发生了更改。您可以使用过滤器来包装所有请求,过滤器会检查数据库以查找更新的JSP,在修改时复制JSP,或使用预定作业以特定间隔复制它们。
  3. 在这两种情况下,您都必须担心卸载类的内存泄漏,特别是如果您的任何代码使用ThreadLocals或其他静态变量。如果在运行时卸载WAR或重新编译JSP,则正常的JSP加载器已经遇到问题。这是由于Java的限制,并且不容易解决(取决于使用哪个JDK)。我建议永远不要或者很少在没有重新启动服务器的情况下更改JSP,除非你无法避免它。

答案 1 :(得分:1)

例如,请参阅Coldtags套件中的Eval taglib:http://www.servletsuite.com/servlets/evaltag.htm