OpenCms中如何管理JSP?

來源:互聯網
上載者:User
    
  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) 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.