完整JavaWeb專案筆記 第三部分-核心Servlet公用部分設計
阿新 • • 發佈:2018-12-31
文章目錄
一 核心Servlet設計思路
前面很簡略的設計了資料表和Bean結構,以及Dao層的資料訪問,沒有設計任何複雜設計,這部分開始,逐步向核心的服務端設計延展。
傳統的JavaWeb專案中,每一個Servlet都被作為請求的處理程式,這裡我對請求處理的公共部分抽離出來,單獨封裝在一個核心Servlet中,所有的請求都經它進行處理,它的主要功能如下:
- 分發請求到具體的Servlet
- 拼裝應答為JSON格式並相應給客戶端
- 提供常用的公用的方法
大致的思路如上,實現過程中可能會設計較多且較為複雜的邏輯,比如說如何分發請求到具體的Servlet處理,如何在應答的時候如何進行JSON拼裝,應答的時候如何處理帶有回撥的請求等等,接下來我們逐一分解。
二 設計公用應答模型
我們將每一筆請求的應答先做一個封裝,這樣對於所有的Servlet而言,其應答均要滿足共用應答的格式,這樣做也便於做JSON的序列化。
這個應答模型前期設定較為簡單的幾個屬性即可:
- 應答碼,由應用判斷請求成功與否
- 應答資訊,一般僅做除錯及請求失敗時分析用
- 應大資料,服務端將查詢、處理後的資料返回給請求端
- 請求處理耗時,僅作效能分析用
package com.bubbling.servlet.base;
/**
* 公用應答模型,每筆請求進入後進行初始化 <br>
* 對請求的應答設定響應碼,響應資訊及響應資料 <br>
* 為了效能分析用,我們還設定了請求處理耗時
*
* @author 胡楠
*
*/
public class IResponse
{
private String code;
private String message;
private Object data;
private int elapsedTime;
public IResponse()
{
this(null, null, null, 0);
}
public IResponse(String responseCode, String message, Object data, int elapsedTime)
{
this.code = responseCode;
this.message = message;
this.data = data;
this.elapsedTime = elapsedTime;
}
public String getCode()
{
return code;
}
public void setCode(String responseCode)
{
this.code = responseCode;
}
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
public Object getData()
{
return data;
}
public void setData(Object data)
{
this.data = data;
}
public int getElapsedTime()
{
return elapsedTime;
}
public void setElapsedTime(int elapsedTime)
{
this.elapsedTime = elapsedTime;
}
}
三 設計公用服務異常
服務層處理所有請求的業務邏輯,包括引數校驗、資料訪問及檔案處理,這些邏輯需要一個公用的異常型別來處理,這個異常並不會拋至應答處理邏輯中,僅僅為應答處理提供錯誤碼及錯誤資訊,所以該類的設計如下:
package com.bubbling.common;
/**
* 公用服務異常,僅供業務層處理使用 <br>
* 當業務邏輯處理失敗,包括引數校驗失敗、資料訪問失敗、檔案操作失敗等各種場景下丟擲 <br>
* 該異常在應答前結束作用域,對應答拼裝提供錯誤碼及錯誤資訊
*
* @author 胡楠
*
*/
public class ServiceException extends Exception
{
private static final long serialVersionUID = 1L;
private String code;
private String info;
public ServiceException(String code)
{
this(code, null);
}
public ServiceException(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getInfo()
{
return info;
}
public void setInfo(String info)
{
this.info = info;
}
@Override
public String getMessage()
{
return toString();
}
@Override
public String toString()
{
return "ServiceException [code=" + code + ", info=" + info + "]";
}
}