关闭

opencms是如何管理jsp文件的

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30250次
    • 积分:467
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:2篇
    • 译文:2篇
    • 评论:9条
    文章分类
    最新评论