Java在線併發控制word文檔

前言:
對於在線操做word文檔的OA系統來講有一個常見問題,就是對於服務端放置的word文檔,若是有兩我的甚至更多客戶端同時打開該文檔時,就會存在併發問題。有了併發問題就會出現操做的文檔保存內容被覆蓋的問題,形成用戶編輯數據丟失,這是很致命的,該如何解決呢?javascript

首先咱們能夠經過系統業務邏輯來限制系統層次的併發問題。好比張三經過某連接打開了一個文檔,同時向後臺發送ajax請求將當前系統登陸用戶名,文件名,以及是否打開文檔的標識存入數據庫。等張三關閉文檔時再發ajax去將數據庫內容更新,或將以前那條數據刪除。在李四點擊同一個連接時,ajax去數據庫查詢一下此文件的打開者以及打開狀態。若是標識是true,那就提醒李四文檔正在被編輯,不讓他打開文檔。    或者有用shiro作權限驗證的,能夠直接讓有權限的王五在頁面看到打開文檔的連接,不讓沒有權限的趙六看到頁面打開文檔的連接。   html

系統層次解決併發問題有好多方案,可是都僅限於此。想要從word文檔層次解決併發問題呢?或者我想要張三打開文檔的時候也讓李四打開,可是李四隻能只讀呢?那就必需要獲取word文檔狀態,這個狀態必須是office返回的,那就必需要調用office的第三方程序接口了。對於Java開發人員來說,office的接口須要在什麼環境運行?須要調用那些接口?這些問題都會帶來大量的工做量,甚至對於沒接觸過VBA的Java工程師來說,簡直是一場災難。java

那就找jar包解決吧!!!這裏提供一個pageoffice的插件供你們學習。jquery

先看效果:
張三打開文檔,此時是能夠編輯的。web

同時,再點擊一下李四的請求(這裏雖然爲兩個連接,可是訪問的是同一個地址)ajax

此時,會提示張三正在修改,若是點擊忽略,依然能夠打開文檔,而且是隻讀狀態。數據庫

 

 部署步驟(只需5步)
1.官網http://www.zhuozhengsoft.com/dowm/下載集成文件,引入jar包,配置web.xml併發


去剛纔下載的集成文件中找到lib,將裏面的內容放在項目web-inf的lib中引入jar包,而後將web.xml的pageoffice配置引入到本身項目的wb.xml中less

2.在父頁面aaa.jsp(須要打開文檔的頁面)放一個a標籤或者button
寫a標籤以前先引入pageoffice須要的js文件jsp

<script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>
而後添加a標籤 

        <div style=" margin-top:50px; height:170px; ">              <span style=" color:Red;">操做說明:</span><span>首先點擊「張三打開文件」會在彈出窗口中打開Word文檔(不要關閉窗口),<br />再點擊「李四打開文件」,看併發控制效果。</span><br /><br />         1:<a href="javascript:POBrowser.openWindowModeless('Word.jsp?userid=1' , 'width=1200px;height=800px;');">張三打開文件</a><br /><br />         2:<a href="javascript:POBrowser.openWindowModeless('Word.jsp?userid=2' , 'width=1200px;height=800px;');">李四打開文件</a>         </div> 3.在父頁面同級目錄下建立一個名爲Word.jsp的文件 <%@ page language="java"     import="java.util.*,com.zhuozhengsoft.pageoffice.*"     pageEncoding="utf-8"%> <% String userName = "somebody"; String userId = request.getParameter("userid").toString(); if (userId.equals("1")) {     userName = "張三"; } else {     userName = "李四"; } PageOfficeCtrl poCtrl=new PageOfficeCtrl(request); poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); poCtrl.addCustomToolButton("保存","Save",1); poCtrl.setSaveFilePage("SaveFile.jsp"); //設置併發控制時間 poCtrl.setTimeSlice(20); poCtrl.webOpen("test.doc",OpenModeType.docRevisionOnly,userName); %>   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>   <head>    <title>最簡單的打開保存Word文件</title> </head> <body>     <script type="text/javascript">         function Save() {             document.getElementById("PageOfficeCtrl1").WebSave();         }                  //文檔關閉前先提示用戶是否保存         function BeforeBrowserClosed(){          if (document.getElementById("PageOfficeCtrl1").IsDirty){                 if(confirm("提示:文檔已被修改,是否繼續關閉放棄保存 ?"))                 {                     return  true;                                      }else{                                      return  false;                 }                               }                       }     </script>     <form id="form1" >     當前用戶: <%=userName %>。     <div style=" width:auto; height:700px;">      <%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>     </div>     </form> </body> </html>

相關文章
相關標籤/搜索