OpenCms中如何管理JSP?

    
  OpenCms中所有的文件通常都保存在数据库中,这也就是常说的OpenCms VFS(虚拟文件系统)。也就是说在OpenCms工作区中看到的文件结构在RFS(真实文件系统,也就是硬盘上)上并不存在(静态导出操作除外),然而,为了JSP能够正常工作,所有的OpenCms JSP文件都映射到真实文件系统中,也就是在硬盘上可以找到。
  为了能够理解这个过程,先让我们看一下标准的JSP文件是怎么被处理的:
  1. JSP文件必须存放于Web应用程序的根目录下;  
  2. JSP文件必须以“*.jsp”结尾(可以web.xml文件中进行配置);
  3. servlet容器接受JSP文件的请求,被请求的文件首先被转化成Java类源码,扩展名为“.java”。
  4. 在这个处理过程中,JSP directives(如<%@ include file= "..." %>)也被转化,转换成Java源码。
  5. 生成的“.java”源码然后被编译成实现Servlet接口的类。
  6. 最后,servlet调用service()方法。
  为了使OpenCms能够做到与servlet容器无关性,它使用了一个简单的技巧:把JSP从虚拟文件系统映射到真实文件系统,如下: 
  1. 所有的OpenCms资源请求都由OpenCms servlet控制,通常映射至/opencms/opencms;
  2. 一旦OpenCms接到一个JSP资源的请求,它就会把请求的JSP文件“存储”到它自己的web应用程序根目录下的“/WEB-INF/jsp/”下;
  3. 因为OpenCms中用online和offline区分一个资源的“发布”与“编辑”版本,所以在这个目录(/WEB-INF/jsp/)下也生成online和offline两个子目录;
  4. 在这两个目录下,它把JSP文件存储成带有完整VFS路径且以“.jsp”为后缀的文件;
  5. 例如:JSP文件是在VFS中是“/index.jsp” ,它会被映射为真实文件系统中的“/WEB-INF/jsp/online/index.jsp.jsp”,这叫做“文件名转换”的JSP。
  6. 当OpenCms存储资源时,JSP directives(<%@ include file= "..." %> 和 <%@ page errorPage= "..."%)所指向的JSP文件也同样进行“文件名转换”处理,即把它们映射到真实文件系统中;
  7. 假设我们在web应用目录有一下文件叫作“file.jsp”;
  8. 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中正常使用。
  (谢谢关注OpenCms——中文资源第一博客:http://blog.csdn.net/qianxuncms/,欢迎与作者直接交流,共同进步。MSN:qianxuncms@hotmail.com,QQ:9165456)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值