如何在OpenCms中管理JSP

OpenCms中所有的文件通常都保存在数据库中,这也就是常说的OpenCms VFS(虚拟文件系统)。也就是说在OpenCms工作区中看到的文件结构在RFS(真实文件系统,也就是硬盘上)上并不存在(静态导出操作除外),然而,为了JSP能够正常工作,所有的OpenCms JSP文件都映射到真实文件系统中,也就是在硬盘上可以找到。

为了能够理解这个过程,先让我们看一下标准的JSP文件是怎么被处理的:

JSP文件必须存放于Web应用程序的根目录下;  

JSP文件必须以“*.jsp”结尾(可以web.xml文件中进行配置);

servlet容器接受JSP文件的请求,被请求的文件首先被转化成Java类源码,扩展名为“.java”。

在这个处理过程中,JSP directives(如<%@ include file= "..." %>)也被转化,转换成Java源码。

生成的“.java”源码然后被编译成实现Servlet接口的类。

最后,servlet调用service()方法。

为了使OpenCms能够做到与servlet容器无关性,它使用了一个简单的技巧:把JSP从虚拟文件系统映射到真实文件系统,如下:

所有的OpenCms资源请求都由OpenCms servlet控制,通常映射至/opencms/opencms;

一旦OpenCms接到一个JSP资源的请求,它就会把请求的JSP文件“存储”到它自己的web应用程序根目录下的“/WEB-INF/jsp/”下;

因为OpenCms中用online和offline区分一个资源的“发布”与“编辑”版本,所以在这个目录(/WEB-INF/jsp/)下也生成online和offline两个子目录;

在这两个目录下,它把JSP文件存储成带有完整VFS路径且以“.jsp”为后缀的文件;

例如:JSP文件是在VFS中是“/index.jsp”,它会被映射为真实文件系统中的“/WEB-INF/jsp/online/index.jsp.jsp”,这叫做“文件名转换”的JSP。

当OpenCms存储资源时,JSP directives(<%@ include file= "..." %>和 <%@ page errorPage= "..."%)所指向的JSP文件也同样进行“文件名转换”处理,即把它们映射到真实文件系统中;

假设我们在web应用目录有一下文件叫作“file.jsp”;

OpenCms servlet调用requestDispatcher("{file.jsp}").include()并且把控制权传递到标准的servlet容器。剩下的步骤就和上面描述的标准的JSP处理一样了。

如何区分online和offline JSP 版本?

其实很简单:因为OpenCms为online和offline下的不同版本的JSP分别存储到两个目录,这样servlet容器就把它们当作不同的文件处理,也就做到了对offline下jsp的修改不会影响到online下的jsp。

注意:online和offline下的JSP有着同样的web应用上下文,因为这一点,它们共用一个应用程序下下文对象,online和offline JSP页面访问的是同一组数据,不慎重使用会引起未预期的副作用,可以通过严格地控制访问应用程序上下文对象来避免这些副作用。

在OpenCms静态导出中如何使用JSP?

使用OpenCms静态文件导出能够提高网站的性能。OpenCms对JSP文件的管理也完全支持静态导出。当然,JSP通常是使用在动态页面中,因此,默认的生成的JSP文件的导出属性默认为false,万一想要导出JSP,必须要手动设置JSP的导出属性为true。

为了支持到静态导出资源的链接,OpenCms中使用了<cms:link>标签或cms.link方法(<cms:link>用法)。

另外,JSP directives中包含有文件名时,不要使用类似“<jsp:directive.include file="..." />”的语法,而是要使用<%@ include file="..." %>的语法 ,因为OpenCms中不支持对类似“<jsp:directive.include file="..." />”的语法解析,也就是说不能处理这种语法中的JSP文件,不能够把它映射到真实文件系统中。但对其它不包含文件名的这种语法是支持的,如: <jsp:useBean id="..." /> 或 <jsp:setProperty name="..." />,它们可以在OpenCms的JSP中正常使用。

时间: 2025-01-30 13:47:59

如何在OpenCms中管理JSP的相关文章

如何在Action中收集jsp中的多个bean对象

问题描述 如何在Action中收集jsp中的多个bean对象 如何在Action中收集jsp中的多个bean对象,如果使用ModelDriven就只能收集一个对象,不知道怎么收集多个,希望各位大神帮帮忙啦

如何在 Ubuntu 中管理开机启动应用

在 Ubuntu 中管理开机启动应用 你曾经考虑过 在 Ubuntu 中管理开机启动应用 吗?如果在开机时,你的 Ubuntu 系统启动得非常缓慢,那么你就需要考虑这个问题了. 每当你开机进入一个操作系统,一系列的应用将会自动启动.这些应用被称为'开机启动应用' 或'开机启动程序'.随着时间的推移,当你在系统中安装了足够多的应用时,你将发现有太多的'开机启动应用'在开机时自动地启动了,它们吃掉了很多的系统资源,并将你的系统拖慢.这可能会让你感觉卡顿,我想这种情况并不是你想要的. 让 Ubuntu

如何在 Ubuntu 中管理和使用逻辑卷管理 LVM

在我们之前的文章中,我们介绍了什么是 LVM 以及能用 LVM 做什么,今天我们会给你介绍一些 LVM 的主要管理工具,使得你在设置和扩展安装时更游刃有余. 正如之前所述,LVM 是介于你的操作系统和物理硬盘驱动器之间的抽象层.这意味着你的物理硬盘驱动器和分区不再依赖于他们所在的硬盘驱动和分区.而是你的操作系统所见的硬盘驱动和分区可以是由任意数目的独立硬盘汇集而成的或是一个软件磁盘阵列. 要管理 LVM,这里有很多可用的 GUI 工具,但要真正理解 LVM 配置发生的事情,最好要知道一些命令行工

WPF Prism如何在RegionManager中管理弹出窗口的Region?

问题描述 在一个WPF项目中,使用Prism.本身是一个大的Region,然后在点击某个按钮之后,弹出新的窗口,新的窗口仍然是一个大的Region,里边包含几个小的Region:现在的问题是,在新弹出的窗口中,Region对应的View无法显示,通过追踪代码发现,在RegionManager中,并没有新弹出窗口的Region存在请问如何解决这个问题? 解决方案 解决方案二:同问+1解决方案三:来几个人回答下啊,想结贴撒分了....解决方案四:是不是被其他view遮着了解决方案五:你的窗口弹出是用

dao-如何在servlet中取到DAO中的list从而打印在jsp页面上

问题描述 如何在servlet中取到DAO中的list从而打印在jsp页面上 public ProductBean searchinfom(String username){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rst = null; // ProductBean product = new ProductBean(); List<ProductBean> productList=new Array

Win7系统如何在excel中添加word文档结构图

  Win7系统如何在excel中添加word文档结构图          方法一: Word提供了一个很方便的功能--文档结构图,通过文档结构图可以在整个文档中快速浏览并追踪特定的文件内容位置.文档结构图是一个独立的窗口,类似于大纲视图,它能够显示文档的标题,单击文档结构图中的标题后,Word就会自动转到文档中的相应标题,并将其显示在窗口的顶部.用户可以单击菜单""视图"-"文档结构图"来打开它.但是EXCEL中没有提供文档结构图,那么如何管理数据量较大

详解:如何在.NET中访问MySQL数据库?

如果你不是只在大集团公司工作过的话,你一定会有机会接触到MySQL,虽然它并不支持事务处理,存储过程,但是它提供的功能一定能满足你的大部分需求,另外,简洁的MySQL也有一些它独到的优势,在有些时候,它的速度甚至超过大型数据库. 那么如何在.NET中访问MySQL数据库呢?也许很多人马上会说:用OLEDB嘛,但是事实上采用.NET OleDb Data Provider并不能访问MySQL,如果你使用的话,系统会提示你:"Net Data OLE DB 提供程序 (System.Data.Odb

J2ME开发中如何从MIDlet中调用JSP页面

js|页面 首先,我将讨论一下HttpConnection接口,这个接口可以用来建立Http连接 HttpConnection 接口 Connected Limited Device Configuration(有限连接设备配置.简称CLDC).提供了一套用于网络连接的类,就是普通连接框架?一种平台独立连接框架,提供了一种分层的连接接口,它的实现操作系统由具体的设备简表提供(比如Mobile Information Device Profile(MIDP)). MIDP通过提供支持HTTP的Ht

如何从MIDlet中调用JSP页面

js|页面     首先,我将讨论一下HttpConnection接口,这个接口可以用来建立Http连接 HttpConnection 接口 Connected Limited Device Configuration(有限连接设备配置.简称CLDC).提供了一套用于网络连接的类,就是普通连接框架?一种平台独立连接框架,提供了一种分层的连接接口,它的实现操作系统由具体的设备简表提供(比如Mobile Information Device Profile(MIDP)). MIDP通过提供支持HTT