ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:183.54KB ,
资源ID:4307202      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4307202.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(182云笔记项目.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

182云笔记项目.docx

1、182云笔记项目 登录(续)显示错误消息原理:1. 重构控制器增加异常处理方法 UserControllerExceptionHandler( UserNotFoundException.class) ResponseBody public JsonResult handleUserNotFound( UserNotFoundExceptione) e.printStackTrace(); return newJsonResult(2,e); ExceptionHandler(PasswordException.class) ResponseBody public JsonResult han

2、dlePassword( PasswordException e) e.printStackTrace(); return new JsonResult(3,e); 2. 重构JsonResult 添加 构造器public JsonResult(int state, Throwable e) this.state = state; this.message = e.getMessage(); 3. 重构 login.js 的loginAction方法, 显示错误信息var msg = result.message; if(result.state=2) $(#count).next().htm

3、l(msg); else if(result.state=3) $(#password).next().html(msg); else alert(msg); 4. 测试注册功能原理:1. 持久层1. 声明持久层方法: UserDaoint addUser(User user); 2. 声明SQL UserMappeer.xmlinsert into cn_user ( cn_user_id, cn_user_name, cn_user_password, cn_user_token, cn_user_nick ) values ( #id, #name, #password, #token,

4、 #nick )3. 测试 UserDaoTest:UserDao dao; Before public void initDao() dao = ctx.getBean( userDao, UserDao.class); Test public void testAddUser() String id=UUID.randomUUID().toString(); String name = Tom; String salt = 今天你吃了吗?; String password = DigestUtils.md5Hex(salt+123456); String token = ; String

5、nick = ; User user = new User( id, name, password, token, nick); int n = dao.addUser(user); System.out.println(n); 2. 业务层1. 声明业务层方法 UserService/* * UserService 中添加注册功能 * param name * param nick * param password * param confirm * return 注册成功的用户信息 * throws UserNameException 用户名异常 * throws PasswordExce

6、ption 密码异常 */ User regist(String name, String nick, String password, String confirm) throws UserNameException, PasswordException; 2. 声明业务层异常 UserNameExceptionpublic class UserNameException extends RuntimeException private static final long serialVersionUID = 6435296194529486206L; public UserNameExce

7、ption() public UserNameException(String message) super(message); public UserNameException(Throwable cause) super(cause); public UserNameException(String message, Throwable cause) super(message, cause); public UserNameException(String message, Throwable cause, boolean enableSuppression, boolean writa

8、bleStackTrace) super(message, cause, enableSuppression, writableStackTrace); 3. 重构 jdbc.properties 和 UserServiceImpl, 将salt存储到配置文件, 利用Spring注入到属性中:# jdbc.properties salt=u4ECAu5929u4F60u5403u4E86u5417? / UserServiceImpl Value(#jdbc.salt) private String salt; 4. 实现业务层方法: UserServiceImplpublic User re

9、gist(String name, String nick, String password, String confirm) throws UserNameException, PasswordException /检查name, 不能重复 if(name=null | name.trim().isEmpty() throw new UserNameException(不能空); User one = userDao.findUserByName(name); if(one!=null) throw new UserNameException(已注册); /检查密码 if(password=

10、null | password.trim().isEmpty() throw new PasswordException(不能空); if(! password.equals(confirm) throw new PasswordException(确认密码不一致); /检查nick if(nick =null | nick.trim().isEmpty() nick = name; String id = UUID.randomUUID().toString(); String token = ; password = DigestUtils.md5Hex(salt+password); U

11、ser user = new User( id, name, password, token, nick); int n = userDao.addUser(user); if(n!=1) throw new RuntimeException(添加失败!); return user; 5. 测试:UserServiceTestUserService service; Before public void initService() service = ctx.getBean(userService, UserService.class); Test public void testRegist

12、() User user = service.regist( Andy, Andy, 123456, 123456); System.out.println(user); 3. 控制器1. 添加控制器方法 UserControllerRequestMapping(/regist.do) ResponseBody public JsonResult regist(String name, String nick, String password, String confirm) User user = userService.regist( name, nick, password, confi

13、rm); return new JsonResult(user); 2. 测试http:/localhost:8080/note/user/regist.do?name=Jerry&nick=AN&password=12345&confirm=12345 4. 添加注册JS脚本1. 更新 log_in.html 取消页面检查js脚本:window.onload=function() var t =setTimeout(get(zc).style.visibility=visible,800); /get(final_password).onblur=function() / var npass

14、word=get(regist_password).value; / var fpassword=get(final_password).value;/ if(npassword!=fpassword) / get(warning_3).style.display=block; / / /get(regist_password).onblur=function() / var npassword=get(regist_password).value.length; / if(npassword0) / get(warning_2).style.display=block; / / /get(r

15、egist_password).onfocus=function() / get(warning_2).style.display=none; / /get(final_password).onfocus=function() / get(warning_3).style.display=none; / 2. 添加注册对话框事件脚本 login.js $(#regist_button).click(registAction); $(#regist_username).blur(checkRegistName); $(#regist_password).blur(checkRegistPassw

16、ord); $(#final_password).blur(checkConfirm); 3. 添加注册对话框数据检验方法:login.js function checkConfirm() var pwd2 = $(#final_password).val(); var pwd = $(#regist_password).val(); /pwd 如果是空值表示 false, 非空则是true if(pwd & pwd=pwd2) $(#final_password).next().hide(); return true; $(#final_password).next().show() .fi

17、nd(span).html(确认密码不一致); return false; function checkRegistPassword() var pwd = $(#regist_password).val().trim(); var rule = /w4,10$/; if(rule.test(pwd) $(#regist_password).next().hide(); return true; $(#regist_password).next().show() .find(span).html(410个字符); return false; function checkRegistName()

18、 var name = $(#regist_username).val().trim(); var rule = /w4,10$/; if(rule.test(name) $(#regist_username).next().hide(); return true; $(#regist_username).next().show() .find(span).html(410字符); return false; 4. 添加注册对话框注册按钮事件方法 login.js function registAction() console.log(registAction); /检验界面参数 var n

19、= checkRegistName() + checkRegistPassword() + checkConfirm(); if(n!=3) return ; /获取界面中表单数据 var name = $(#regist_username).val().trim(); var nick = $(#nickname).val(); var password = $(#regist_password).val(); var confirm = $(#final_password).val(); /发起AJAX请求 var url = user/regist.do; var data = name

20、:name, nick:nick, password:password, confirm:confirm; /console.log(data); / $.post 是 $.ajax的简化版 $.post(url, data, function(result) console.log(result); if(result.state=0) /退回登录界面 $(#back).click(); var name = result.data.name; $(#count).val(name); $(#password).focus(); /清空表单 $(#regist_username).val()

21、; $(#nickname).val(); $(#regist_password).val(); $(#final_password).val(); elseif(result.state=4) $(#regist_username).next().show() .find(span).html(result.message); else if(result.state=3) $(#regist_password).next().show() .find(span).html(result.message); else alert(result.message); ); /得到响应以后, 更新

22、界面 5. 重构控制器UserController 增加事件处理方法:ExceptionHandler(UserNameException.class) ResponseBody public JsonResult handleUserName( UserNameException e) e.printStackTrace(); return new JsonResult(4,e); 6. 测试.调试工具: 笔记本列表功能原理:1. 持久层1. 添加持久层接口 NotebookDao:public interface NotebookDao ListMap findNotebooksByUse

23、rId( String userId); 2. 添加Mapper文件: NotebookMapper.xmlselect cn_notebook_id as id, cn_notebook_name as name from cn_notebook where cn_user_id = #userId order by cn_notebook_createtime desc 3. 测试:public class NotebookDaoTest extends BaseTest NotebookDao dao; Before public void initDao() dao = ctx.get

24、Bean(notebookDao, NotebookDao.class); Test /select cn_user_id from cn_notebook; public void testFindNotebooksByUserId() String userId=52f9b276-38ee-447f-a3aa-0d54e7a736e4; ListMap list= dao.findNotebooksByUserId(userId); for (Map map : list) System.out.println(map); 提示: 需要先到数据库中获得拥有笔记的用户ID userIdsel

25、ect cn_user_id from cn_notebook; List 封装查询结果:2. 业务层1. 声明业务接口NotebookServicepublic interface NotebookService ListMap listNotebooks(String userId) throws UserNotFoundException; 2. 实现业务接口 NotebookServiceImplService(notebookService) public class NotebookServiceImpl implements NotebookService Resource pr

26、ivate NotebookDao notebookDao; Resource private UserDao userDao; public ListMap listNotebooks(String userId) throws UserNotFoundException if(userId=null | userId.trim().isEmpty() throw new UserNotFoundException(ID不能空); User user = userDao.findUserById(userId); if(user=null) throw new UserNotFoundExc

27、eption(用户不存在); return notebookDao .findNotebooksByUserId(userId); 3. 添加查询方法 UserDaoUser findUserById(String userId); 4. 添加SQL UserMapper select cn_user_id as id, cn_user_name as name, cn_user_password as password, cn_user_token as token, cn_user_nick as nick from cn_user where cn_user_id = #userId 5

28、. 测试:public class NotebookServiceTest extends BaseTest NotebookService service; Before public void initService() service = ctx.getBean(notebookService, NotebookService.class); Test public void testListNotebooks() String userId=52f9b276-38ee-447f-a3aa-0d54e7a736e4; ListMap list= service.listNotebooks

29、(userId); for (Map map : list) System.out.println(map); 笔记本列表3. 控制器1. 添加控制器父类AbstractController, 封装公共的异常处理方法:public abstract class AbstractController /* * 在其他控制器方法执行出现异常时候, 执行 * 异常处理方法 handleException */ ExceptionHandler(Exception.class) ResponseBody public Object handleException( Exception e) e.printStackTrace(); return new JsonRes

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1