opencms是如何管理jsp文件的

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:33:32
opencms是如何管理jsp文件的通常opencms的文件存放在数据库中,也就是所谓的Virtual File System (VFS)。这意味着在本地文件系统中不存在和OpenCms workplace的explorer视图的相同的文件结构。然而,为了让jsp文件正常工作,opencms中所有的jsp文件“镜象”到了本地文件系统中。
让我们首先看一下一个“标准”的jsp文件是如何被处理的:
jsp文件必须存在于web应用的目录中。 文件的后缀必须是.jsp(你可以通过配置web.xml对此做修改)。  当servlet容器接收到针对web应用的jsp文件的请求时,被请求的jsp文件首先要转换成java源文件,即.java文件。 在转换的过程中,jsp标签(如<%@ include file= "..." %>)被解析并转换成java代码。 转换的java文件实现Servlet接口,并被编译为class文件。 最后,调用class的service()方法。
为了使opencms独立于servlet容器,它使用了一个小技巧-将jsp文件从VFS中镜象到本地文件系统,方法如下:
对opencms所有资源的请求都由opencms Servlet来处理,该servlet一般映射为/opencms/opencms。  当opencms收到对jsp资源的请求时,它将被请求jsp文件的内容导入到opencms web应用的根目录的一个子目录/WEB-INF/jsp中。  因为opencms的资源分为Online和offline,/WEB-INF/jsp中存在子目录online和offline和此对应。 在此目录中,被导出的jsp文件拥有完整的VFS路径结构和.jsp后缀。例如,你的文件在VFS中是"/index.jsp",被导出后它将是WEB-INF/jsp/online/index.jsp.jsp文件(译者注:目前opencms6.2.1可以判断导出的文件是否存在jsp后缀,而不是傻傻的直接添加)。我们可以将这个叫做jsp的“转换文件名”。 当opencms导出资源时,会使用一个简单的解析器对jsp文件内容进行预处理,以查找引用其他jsp文件的表情,最明显的是<%@ include file= "..." %> 和 <%@ page errorPage= "..."%>
如果发现这样的标签,目标文件名将会被这个资源在真是文件系统的转换文件名替换。 现在在web应用的目录下我们已经有了一个jsp文件,我们叫他"{file.jsp}" Opencms servlet(它仍然是控制器)现在调用requestDispatcher("{file.jsp}").include(),然后将控制权转交给标准的servlet容器。
然后按上面所述的标准jsp处理步骤进行处理。需要注意的是,在这个过程中,opencms仍然使用Request和Response包装器(Wrappers)来生成FlexCache条目。