動吧用戶行為日志模塊的簡單實現


一、頁面的加載

0.業務分析

  1.點擊日志管理呈現日志列表頁面

    1)注冊點擊事件

    2)定義事件處理函數

    3)在事件處理函數中發送異步請求,加載頁面並進行數據呈現

  2.呈現日志列表頁面的位置為mainContentId

  3.將log_list.html(位置/templates/pages/sys)顯示到mainContentId中

  4.log_list.html頁面加載完成后,需加載page.html頁面和數據

頁面跳轉:點擊日志管理異步加載log_list.html頁面,log_list.html頁面異步加載page.html頁面

1. 數據庫表結構設計

  日志管理模塊業務:需要記錄用戶在什么時間什么地點做了什么事情

  所以日志模塊的字段需要有:用戶的登陸名,用戶所做的操作(執行了什么方法,請求了什么參數),所用的時間(什么時間執行的操作,執行操作所用的時長)

 1 CREATE TABLE `sys_logs` (
 2   `id` bigint(20) NOT NULL AUTO_INCREMENT,
 3   `username` varchar(50) DEFAULT NULL COMMENT '登陸用戶名',
 4   `operation` varchar(50) DEFAULT NULL COMMENT '用戶操作',
 5   `method` varchar(200) DEFAULT NULL COMMENT '請求方法',
 6   `params` varchar(5000) DEFAULT NULL COMMENT '請求參數',
 7   `time` bigint(20) NOT NULL COMMENT '執行時長(毫秒)',
 8   `ip` varchar(64) DEFAULT NULL COMMENT 'IP地址',
 9   `createdTime` datetime DEFAULT NULL COMMENT '日志記錄時間',
10   PRIMARY KEY (`id`)
11 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='系統日志';

2. 頁面跳轉處理 PageController.java

  項目中的所有頁面處理,都放在PageController中(com.cy.pj.sys.controller)

  日志模塊的頁面跳轉:1.首先顯示首頁樣式

            2.顯示日志管理模塊的列表頁面

            3.顯示日志模塊列表頁面下面的分頁頁面

 1 @Controller
 2 @RequestMapping("/")
 3 public class PageController {
 4     //localhost:80/doIndexUI
 5     @RequestMapping("doIndexUI")
 6     public String doIndexUI() {
 7         return "starter";//首頁頁面
 8     }
 9     /**基於此方法返回日志列表頁面(記住此頁面並不是完整頁面)*/
10     @RequestMapping("log/log_list")
11     public String doLogUI() {
12         return "sys/log_list";
13     }
14     /**基於此方法返回分頁頁面元素
15      * @throws InterruptedException */
16     @RequestMapping("doPageUI")
17     public String doPageUI(){
18         //Thread.sleep(5000);
19         return "common/page";
20     }
21 }

  首先訪問首頁頁面starter.html,通過localhost:80/doIndexUI網址訪問首頁頁面

  然后點擊日志管理時,需要顯示日志頁面,日志頁面包括日志列表頁面和日志分頁頁面兩部分

  sys/log_list為日志列表頁面,common/page為分頁頁面

3. starter.html(首頁)加載日志列表頁面

  點擊日志管理,顯示相應的日志列表頁面,需要進行局部刷新,所以要是用異步加載

 1 <script type="text/javascript">
 2    //此函數是在頁面加載完成以后執行
 3    (function(){
 4      doLoadUI("load-log-id","log/log_list");
 5    })()
 6    //基於不同對象的點擊事件執行資源加載操作
 7    function doLoadUI(id,url){
 8        $("#"+id).click(function(){//click事件處理函數
 9            //jquery中的load函數為一個異步加載的ajax函數。
10            //此函數用於在指定位置異步加載資源(並將返回的資源填充到這個指定位置)
11            $("#mainContentId").load(url);
12        })
13    }
14 </script>

  (function(){})()函數是在頁面加載完成之后執行和$(function(){})函數功能一致

  日志管理的id值為load-log-id,對日志管理進行點擊事件處理,然后異步加載資源

  load函數為jQuery中的一個異步加載的ajax函數,此函數用於在制定位置異步加載資源,並將返回的資源填充到指定的位置(mainContentId)中

  $("#load-log-id").click(function(){

    $("#mainContentId").load("log/log_list");

  })

  其中log/log_list為頁面跳轉中的地址

4. log_list.html加載分頁列表頁面

1 $(function(){
2     $("#pageId").load("doPageUI");
3 });

   在pageId的位置加載分頁列表頁面,代碼寫在日志列表頁面中,有首頁加載log_list頁面,log_list頁面加載分頁頁面。

二、數據的加載

0. 業務分析

  1.顯示日志數據(在數據庫中的數據)  

  2.顯示總記錄數,總頁數的值,顯示當前頁顯示的數據為第幾頁

  3.點擊首頁進入第一頁,點擊尾頁進入最后一頁,點擊上一頁查看當前頁的上一頁數據,點擊下一頁查看當前頁的下一頁數據

  4.點擊全選按鈕后,下面的復選框也全被選中。當所有的復選框都被選中后,取消其中一個復選框的選中效果,全選的復選框被取消

1. 日志列表數據呈現

1.1 構建實體對象   Sys_Log

 1 /**
 2   * 此對象主要用於封裝數據庫提取的數據或者向數據庫寫入的數據
 3  *  此對象中的屬性建議和表中字段有對應的映射關系(名字,類型)
 4  *  建議:所有用於封裝數據的對象都建議實現序列化接口(Serializable)
 5  * 1)序列化:將對象轉換為字節的過程稱之為對象序列化
 6  * 2)反序列化:將字節轉換為對象的過程稱之為反序列化
 7  * 3)應用場景:對對象進行緩存,將對象進行鈍化(寫入文件),將對象通過網絡進行傳輸
 8  */
 9 @Data
10 public class SysLog implements Serializable{
11     //對象在序列化和反序列化時會基於此id進行數據處理。
12     //將對象序列化時會將這個id作為版本寫入到字節中。
13     //將字節反序列化會從字節中提取這個版本id然后和類中的版本id進行比對,一致則進行反序列化。
14     private static final long serialVersionUID = -1592163223057343412L;
15     private Integer id;
16     //用戶名
17     private String username;
18     //用戶操作
19     private String operation;
20     //請求方法
21     private String method;
22     //請求參數
23     private String params;
24     //執行時長(毫秒)
25     private Long time;
26     //IP地址
27     private String ip;
28     //創建時間
29     private Date createdTime;
30 
31 }

 

  pojo類用於封裝數據庫提取的數據或者向數據庫中寫入數據

  pojo類與數據庫中的字段名,類型都一一對應

  所有用於封裝的對象都建議使用實現序列化接口(Serializable)

1.2  分頁字段的封裝  PageObject

 1 /**
 2  *     基於此對象封裝業務執行結果
 3  *     在Java語言,可以簡單將內存中的對象分為兩大類:
 4  *  1)存儲數據的對象(設計的關鍵在屬性上)-典型的POJO對象(VO,BO,DO)
 5  *  2)執行業務的對象(設計的關鍵在方法上)-典型的controller,service,dao
 6  */
 7 @Data
 8 @NoArgsConstructor
 9 @AllArgsConstructor
10 public class PageObject<T> implements Serializable{//pojo中的bo對象,new PageObject<SysLog>
11      private static final long serialVersionUID = -3130527491950235344L;
12      /**總記錄數(從數據庫查詢出來的)*/
13      private Integer rowCount;
14      /**總頁數(基於rowCount和頁面大小計算出來的)*/
15      private Integer pageCount;
16      /**頁面大小(每頁最多可以呈現的記錄總數)*/
17      private Integer pageSize;
18      /**當前頁碼值(客戶端傳遞)*/
19      private Integer pageCurrent;
20      /**當前頁記錄,list集合中的T由PageObject類上定義的泛型決定*/
21      private List<T> records;
22      public PageObject(Integer rowCount, Integer pageSize, Integer pageCurrent, List<T> records) {
23         super();
24         this.rowCount = rowCount;
25         this.pageSize = pageSize;
26         this.pageCurrent = pageCurrent;
27         this.records = records;
28         //計算總頁數的方法一:
29         //this.pageCount=this.rowCount/this.pageSize;
30         //if(this.rowCount%this.pageSize!=0)pageCount++;
31         //計算總頁數的方法二:
32         this.pageCount=(rowCount-1)/pageSize+1;
33      }
34 }

 

  PageObject用於封裝分頁操作,因為不光是日志管理模塊要用上分頁操作,所有的模塊都要用,所以要使分頁集合要具有通用性,PageObject,records要使用

  注意區分存儲數據的對象(pojo),執行業務的對象(service,controller,dao)

1.3 數據層接口對象 Dao   SysLogDao

 1  /**
 2        *     基於條件查詢用戶行為日志記錄總數
 3        * @param username 查詢條件
 4        * @return 查詢到的記錄總數
 5        */
 6       int getRowCount(String username);
 7       /**
 8        *     基於條件查詢當前頁記錄
 9        * @param username 查詢條件
10        * @param startIndex 當前頁數據的起始位置(用於limit 子句)
11        * @param pageSize 當前頁面大小(每頁最多顯示多少條記錄)
12        * @return 查詢到的記錄
13        */
14       List<SysLog> findPageObjects(String username,
15               Integer startIndex,Integer pageSize);
16 }

 

  日志管理模塊查詢日志記錄總數時需要判斷輸入框中是否有

  查詢當前頁面數據的功能,查詢當前頁面數據需要使用幾個條件:1.輸入框中是否填寫了用戶名

                                 2.從那一頁開始展示數據

                                 3.當前頁顯示多少條數據

1.4 基於Dao接口創建映射文件

1.5

1.6

1.7

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM