java學習筆記——衆籌項目練習——前臺web系統的註冊、登錄功能(使用httpclient進行遠程調用),後臺系統中的流程管理功能(activiti在項目中的使用)

                 前臺web系統的註冊、登錄功能(httpclient的使用)

現在我們來實現一下前臺web端系統的註冊與登錄功能!在前邊的文章中,我們對整個衆籌系統的組織機構有了一些瞭解,整個系統中manager-web、scw-portal、scw-restapi三個項目時可以獨立運行的war項目。

manager-web是專門爲系統管理人員提供服務的後臺系統。

scw-restapi是所有用戶提供服務的前臺系統,因爲前臺系統面向的用戶比較多,設備也多樣化(比如ios、android、pc、web),所有爲了多個客戶端統一(同時也爲了減少幅度的工作量),服務端給客戶端返回的數據類型統一爲json數據。

scw-portal是專門爲前臺web瀏覽器端用戶提供服務的前臺系統!由於scw-restapi服務器統一爲所有客戶端返回json數據,而其他app端又可以在客戶端開發保存自己的頁面,所有web瀏覽器端就需要這樣的一個專門的服務,這個服務不做別的只是單純的保存web服務器端所有的頁面也跳轉頁面的邏輯。至於頁面中的數據也是通過訪問scw-restapi服務系統來獲取的。

那麼前臺web系統的註冊、登錄等功能,當然是先訪問scw-portal服務器來獲取註冊、登錄的頁面,在獲取頁面的過程中或者點擊頁面中的某個按鈕還要訪問scw-restapi來實現註冊與登錄功能。

那麼如何讓scw-portal服務調用scw-restapi服務呢?

用戶登陸/註冊(需要遠程調用)

          1)、兩種方式:

                  1】、沒有任何耦合設計的方式;(HTTP)

                    1、在本地客戶端使用java代碼,模擬發送請求,獲取到數據進行處理(HTTP)

                    2、發送ajax跨域請求;

                  2】、RPC(遠程調用)(框架:WebService、dubbo(阿里)),支付接口等(WebService)(RPC)

          //我們選擇使用HTTP的方式;(HTTP+JSON)省流量速度快、能和移動端無縫對接,(明文傳遞,安全性有待提高(令牌)(帶一個能代表關鍵數據的令牌,關鍵數據保存在服務器上)(比較安全));

那麼http的方式如何使用呢?答:就是使用httpclient插件來實現遠程調用唄!

httpclient使用起來很簡單也很方便!那我們就來實現一下吧!

首先,是scw-portal服務中web前臺用戶使用的註冊頁面,很簡單,只要使用後臺manager系統中的註冊頁面修改一下就好了。

然後是scw-portal中controller的請求處理,在controller中使用httpclient訪問scw-restapi服務的註冊功能,將返回的json結果轉換成統一的ScwReturn對象。

ScwReturn對象是我們定義專門用於返回統一json結構的對象。屬性code爲1或0時,表示成功或失敗。msg表示消息。content是返回的數據。ext是返回的附加數據。

 

使用httpclient遠程訪問scw-restapi時,需要在maven中添加httpclient的依賴。

當然,通常在程序中使用httpclient遠程訪問scw-restapi服務時,都不會將訪問地址寫死在程序中,而是使用一個配置文件來保存遠程scw-restapi服務的地址信息,這樣靈活很多。

在程序中使用配置文件中的參數信息。方法也很簡單,添加@value註解,並表明要引用配置文件中的哪個參數就可以啦!

接下來,我們來實現遠程scw-restapi服務中的註冊功能!

先在controller中處理註冊請求(所有客戶端,包括web端的scw-portal)。

在service中將註冊信息直接插入數據庫就行啦!

向數據庫中插入數據的同時,還要帶回數據庫表中自動生成的主鍵信息。

這樣,註冊功能就完成啦!

試一下吧!

註冊成功後跳轉到登錄頁面

成功!!!

 

                                                                                                登錄功能

同樣的方式我們再來實現登錄功能。

修改登錄頁面。

在controller中添加登錄方法,發送遠程的http登錄請求。

由於發送遠程http請求後,scw-restapi服務器返回的是json數據,爲了使用方便我們要將json數據轉化成相應的對象。方法就是上邊的memberReturn = objectMapper.readValue(resstring.getBytes(),
                    new TypeReference<ScwReturn<tMember>>() {
            });

這裏如果登錄成功的話,我們是要將用戶信息保存到session域中以供其他別的地方使用。然後跳轉到index.jsp頁面。這時的index.jsp頁面就不應該還是未登錄時的樣子啦!應該在頁面的上邊顯示用戶信息。考慮到這個用戶信息可能會在很多頁面使用,這特意將其抽取出來,方便其他頁面使用。

只需要判斷session域中是否存在用戶信息就可以了,如果存在顯示用戶,如果不存在就顯示登錄按鈕就可以啦。

 

接下來我們實現scw-restapi服務器的處理登錄方法。

在service中進行登錄的業務邏輯校驗,(只要查詢一下數據庫就可以啦)。

完成。我們試一下吧!

先啓動scw-portal和scw-restapi服務器。

ok,完成。

 

 

                後臺系統中的流程管理功能(activiti在項目中的使用)

接下來我們要來實現一下後臺manager系統中的流程管理功能。我們在實際的項目中可能會有很多的項目流程(比如公司的oa系統中有各種請假申請、報批申請等。網站系統中的實名認證等等)這些所有的流程都應該有後臺管理人員統一的上傳管理,這就是我們接下來要實現的後臺manager系統的流程管理功能。

既然要做後臺manager的流程管理功能,那麼肯定是要使用activiti啦!我們先將activiti整合到我們的項目中吧 !

1,添加maven依賴。

 

2,添加配置文件spring-activiti.xml。配置文件中的數據庫與我們項目中共用同一個數據庫。事務管理器也是共用的,所以只是添加已有的就可以啦!還有對於亂碼的設置和加載activiti中的常用組件。

配置完成後,啓動我們的後臺manager系統,就可以在我們的數據庫中看到activiti自己特有的數據庫表啦!!!至於那些表是做什麼的,我們前面的文章中有對於activiti的介紹,這裏就不多說啦!

 

好,activiti已經添加到我們的項目中來啦!那麼接下來我們就來實現一下流程管理頁面的跳轉吧!

先添加一個process.jsp,爲了方便這裏就將之前的廣告管理頁面拿來修改一下了。

修改數據庫中流程管理的請求地址。

在添加一個處理跳轉到流程管理頁面的controller。

ok,頁面可以跳轉啦!

現在我們再來實現一個所有流程的查詢,將所有流程信息顯示到流程列表中吧!

在頁面中添加查詢流程所有流程的getAllAdver方法。

在getAllAdver方法中發送ajax請求。

將請求後返回的所有流程數據添加到tbody中。

在controller中添加查詢所有流程信息的處理方法。

因爲controller中使用的repositoryService我們在配置activiti的時候就已經添加的spring容器中了,這是activiti的組件。所有我們不需要再額外的編寫service進行邏輯控制啦,直接使用activiti的組件就好。

既然流程管理吃查詢功能有了,那麼接下來再來實現一個增加功能吧,流程上傳。

這個功能我們還是使用之前的廣告新增的那種彈出模態框的方法來完成吧!並且文件的上傳功能都是可以複用的。

爲這個模態框中的確定按鈕綁定點擊事件,併發送文件上傳請求。

在事件中將我們選擇的文件作爲參數併發送ajax請求。請求成功後刷新頁面。

在controller中處理流程上傳請求,使用activiti的repositoryService組件之間將流程部署到數據庫中即可,不需要我們保持文件,activiti是直接將文件保存到數據庫中的。

好了 ,上傳也完成啦!

查詢和上傳的功能都有了,那我們就再來實現一個可以查看某一具體流程的流程圖的功能吧!可以實現這個功能是因爲activiti將每個流程在數據庫中都保存了一張流程圖的圖片!

還記得我們在查詢流程列表後,在tbody中添加每一條流程數據時都添加了一個查看按鈕嘛?這個按鈕中我們還添加一個processId屬性用於保存本條流程數據的流程id。查詢某一流程的圖片是需要使用這個流程id。

爲這個查看按鈕綁定點擊事件,在事件中直接使用layer插件顯示圖片就可以啦!

使用上邊的方式顯示圖片,其實也是在發送網絡請求,既然是請求,那我們就要在後臺處理。

在controller中添加查看某一流程圖片的處理方法。

先根據我們傳過來的流程id查找的部署id,再根據部署id查找到這個流程的圖片名字,最後再根據部署id與圖片名字得到圖片的二進制數據,這樣直接返回圖片的二進制數據,頁面中的圖片展示位置img標籤就可以得到圖片啦!

大功告成!!!!

 

好了 ,現在我們來測試一下吧!

首先呢!我們需要創建一個,然後才能對它管理。

前邊我們介紹過來activiti的使用,並且eclipse中也已經安裝了插件,可以在eclipse中創建我們自己的流程文件啦!那我們就來創建一個用來實名認證的流程文件吧(正好我們後面會使用到這個功能)!

然後添加流程中的任務信息。

首先是一個發送郵件的任務,郵箱地址,用戶名,生成的驗證碼需要外接傳進來。

然後是提交驗證碼任務,沒什麼特別的,也不需要外界傳數據。

重點來了,然後是一個分支判斷,判斷我們傳進來的自己生成的驗證碼與用戶自己填寫的驗證碼是否相同,不相同的話就驗證失敗,返回上一步驟的任務。

如果相同的話就驗證成功,進入下一步驟的任務。

然後再添加一個人工審覈的任務就OK啦。

保存起來,用於我們流程管理的演示。

好,啓動我們的後臺manager系統並登錄。

點擊流程管理,跳轉到流程管理界面。

點擊新增按鈕,添加我們剛纔創建好的流程文件。

添加成功後會再次查詢流程信息並顯示流程列表。

可以看見在流程列表刷新後已經可以看見我們添加的流程啦!只是流程的名稱顯示還有點問題!

我們在來看看activiti坐在的數據庫表中存儲的信息是否一致。

流程定義表中的部署id爲37501,而流程部署表中的id也爲37501.

好,我們再點擊流程列表中具體流程後邊的查看流程圖片按鈕,顯示流程信息的預覽圖片。

這個預覽圖片樣式做的有點醜(這個不重要)。

ok,這樣我們流程管理的新增,查詢,預覽就都完成了。至於修改和查詢之前的文章都有介紹,這裏就不再重複啦。

 

最後再附上代碼以供需要時參考:https://download.csdn.net/download/qq_25106373/11424234

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章