1. 程式人生 > >完整JavaWeb專案筆記 第三部分-核心Servlet公用部分設計

完整JavaWeb專案筆記 第三部分-核心Servlet公用部分設計

文章目錄

一 核心Servlet設計思路

  前面很簡略的設計了資料表和Bean結構,以及Dao層的資料訪問,沒有設計任何複雜設計,這部分開始,逐步向核心的服務端設計延展。

  傳統的JavaWeb專案中,每一個Servlet都被作為請求的處理程式,這裡我對請求處理的公共部分抽離出來,單獨封裝在一個核心Servlet中,所有的請求都經它進行處理,它的主要功能如下:

  1. 分發請求到具體的Servlet
  2. 拼裝應答為JSON格式並相應給客戶端
  3. 提供常用的公用的方法

  大致的思路如上,實現過程中可能會設計較多且較為複雜的邏輯,比如說如何分發請求到具體的Servlet處理,如何在應答的時候如何進行JSON拼裝,應答的時候如何處理帶有回撥的請求等等,接下來我們逐一分解。

二 設計公用應答模型

  我們將每一筆請求的應答先做一個封裝,這樣對於所有的Servlet而言,其應答均要滿足共用應答的格式,這樣做也便於做JSON的序列化。

  這個應答模型前期設定較為簡單的幾個屬性即可:

  1. 應答碼,由應用判斷請求成功與否
  2. 應答資訊,一般僅做除錯及請求失敗時分析用
  3. 應大資料,服務端將查詢、處理後的資料返回給請求端
  4. 請求處理耗時,僅作效能分析用
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 + "]";
	}

}