完整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 + "]";
	}

}

猜你喜欢

转载自blog.csdn.net/o983950935/article/details/85239212