前面我们优化了Servlet和Jdbc的代码,让我们的开发速度飞速提升。
我们可以集中力量开始编写业务代码了!
先把SQL写出来
使用之前写好的JdbcUtl工具类,查询结果。
对Dao进行封装
我们看到接受参数如果是POJO类型,就需要我们依次取值再set填充属性,过程比较麻烦,
@ResponseBody("/express/insert.do") public String insert(HttpServletRequest request, HttpServletResponse response){ String number = request.getParameter("number"); String company = request.getParameter("company"); String username = request.getParameter("username"); String userPhone = request.getParameter("userPhone"); //Express e = new Express(number,company,username,userPhone, UserUtil.getUserPhone(request.getSession())); Express e = new Express(number,username,userPhone,company,UserUtil.getUserPhone(request.getSession())); boolean flag = ExpressService.insert(e); Message msg = new Message(); if(flag){ //录入成功 msg.setStatus(0); msg.setResult("快递录入成功!"); }else{ //录入失败 msg.setStatus(-1); msg.setResult("快递录入失败!"); } String json = JSONUtil.toJSON(msg); return json; } @ResponseBody("/express/update.do") public String update(HttpServletRequest request,HttpServletResponse response){ int id = Integer.parseInt(request.getParameter("id")); String number = request.getParameter("number"); String company = request.getParameter("company"); String username = request.getParameter("username"); String userPhone = request.getParameter("userPhone"); int status = Integer.parseInt(request.getParameter("status")); Express newExpress = new Express(); newExpress.setNumber(number); newExpress.setCompany(company); newExpress.setUsername(username); newExpress.setUserPhone(userPhone); newExpress.setStatus(status); boolean flag = ExpressService.update(id, newExpress); Message msg = new Message(); if(flag){ msg.setStatus(0); msg.setResult("修改成功"); }else{ msg.setStatus(-1); msg.setResult("修改失败"); } String json = JSONUtil.toJSON(msg); return json; }这里可以使用BeanUtil优化一下。
封装BeanUtils
public static <T> T toBean(Map<String, String[]> parameterMap, T bean) { try { BeanUtils.populate(bean, parameterMap); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } return bean; }使用一行代码就完成了属性的填充!
Express e=WebUtil.toBean(request.getParameterMap(),new Express());对于快递系统,短信取件码才核心,我们在录入快递的时候,需要向用户发送短信:
public static boolean insert(Express express) { String code = null; //如果已经有了该取件码了,重新生成一次 if (dao.findByCode((code = WebUtil.getCode())) != null) { return insert(express); } express.setCode(code); express.setSysPhone(WebUtil.getSysPhone()); boolean flag = dao.insert(express); //录入成功,发送短信 if (flag) { WebUtil.send(express.getUserPhone(),express.getSysPhone(),express.getCompany(), express.getCode()); } return flag; }连接阿里云短信的接口 想玩的同学,下面提供了注册方式,免费500条短信
public static boolean send(String phoneNumber, String sysPhone, String company, String code) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LT8FeoAyT4Y", "2OyykFIyDjLDoM7hKhaGGbjyyhqgvs"); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PhoneNumbers", phoneNumber); request.putQueryParameter("SignName", "快递e站"); request.putQueryParameter("TemplateCode", "SMS_204111140"); request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}"); try { CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); String json = response.getData(); Gson g = new Gson(); HashMap result = g.fromJson(json, HashMap.class); if ("OK".equals(result.get("Message"))) { return true; } else { System.out.println("短信发送失败,原因:" + result.get("Message")); } } catch (ClientException e) { e.printStackTrace(); } return false; }《1》点击进入阿里云免费试用 , 然后登陆账号。
《2》 如图选择短信0元试用 (已经领取过的,直接走第三步即可。)
《3》点击进入阿里云短信官网 , 登陆状态下点击免费开通 (已开通的文字会替换为控制台 , 点击效果一样)
《4》选择国内消息
《5》创建短信签名
《6》创建短信模板
《7》创建子账户秘钥
鼠标移至右上角账户名称 选择accesskeys选择开始使用子用户AccessKey输入登陆名称和显示名称, 选择编程访问 复制得到的accessKeyId和 AccessKeySecret 留待后续使用 选择创建的子账户 ,点击添加权限 选择相应的权限, 并点击确定添加《8》回到国内短信页面 , 复制审核成功的短信签名名称 以及 短信模板ID。
《9》完成上述步骤后, 已经得到了四个关键性参数
短信签名名称 : 快件e栈短信模板CODE : SMS_196641606accessKeyId:LTAI4GJVun7NhPS8FMgSqqS4AccessKeySecret: TgTLk8KVJjESFu6iC1jTHsVMK53z5Q《9》下载jar文件 , 并引入到项目中
《10》将上述参数, 复制到如下代码中。 并通过JSON方式顺序填充每一个短信模板中到参数
public static boolean send(String phoneNumber,String code) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "秘钥id", "秘钥值"); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PhoneNumbers", "手机号"); request.putQueryParameter("SignName", "签名名称"); request.putQueryParameter("TemplateCode", "短信模板code"); request.putQueryParameter("TemplateParam", "填充的参数(JSON对象格式)"); try { CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); String json = response.getData(); Gson g = new Gson(); HashMap result = g.fromJson(json, HashMap.class); if("OK".equals(result.get("Message"))) { return true; }else{ System.out.println("短信发送失败,原因:"+result.get("Message")); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return false; }