今天我们要完成上一篇博客中接口的设计,链接为 从零开发一款APP 一、Java Web后端注册接口的设计 。上一篇的大致设计为,客户端传入用户名、密码、昵称,然后服务端进行验证,根据不同的情况返回不同的结果。
首先,根据上一节写的请求接口的请求示例,我们服务器端需要从请求中读取到请求的结果,请求的示例为 {s:{"uname"=xxx,"upwd"=xxx,"nkname"=xxx}} ,但是如果我们每次接受到请求时,都需要先得到s对应的JsonObject,然后在去一个一个的解析,这样实在是太痛苦了,而且这样做重复代码太多。所以,我们可以把json解析放到父类中。
我们知道,java web中每次请求都会映射到对应的HttpServlet 类对象中的service()方法中,在HttpServlet 的service()方法源码中,会根据请求的类型,调用自身不同的方法来处理,比如如果得到请求类型为get,则调用自己的doGet()方法,如果请求类型为post,则调用自己的doPost()方法。所以,我们可以覆盖HttpServlet 的service()方法,在里面做出json解析。我们json解析使用的是阿里巴巴开源的fastjson。
下面为BaseServlet的源码:
/**
* 所有HttpServlet的基类,会把请求中的加密字符串取出来并进行解密 (当前还尚未解密)
* @author liuheng
*
*/
public class BaseServlet extends HttpServlet {
//请求的Json
protected JSONObject requestJson;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String securityString = req.getParameter("s");
System.out.println("获取的加密String为" + securityString);
requestJson = JSON.parseObject(URLDecoder.decode(securityString, "UTF8"));
super.service(req, resp);
}
}
可以看出,我们直接将s对应的字符串解析成JSONObject,这样子类就可以使用了。需要注意的是,我们所有的请求都使用post方式,所以,子类只需要复写doPost()方法即可。
获取到请求参数后,就应该去做相应的逻辑处理,比如判断是否有重复用户名,是否有重复昵称,当判断都没有时,进行写入,这时候如果写入失败,还需要返回失败的标志位。我们统称这种逻辑处理类为Service类。
仅仅一个Service类是不够的,我们还需要进行数据库访问的DAO类,DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开,即,我们使用DAO类来将访问数据库的代码进行封装