Cookie练习
简介
尝试了n种分享代码,最终没有找到好办法。我觉得贴代码,很难看下去。还不如写思路,今后代码篇改成思路篇
Session代码练习
1. 购物车思路
1. ListBookServlet类 1.1 显示该网站所有商品,每个商品加上购买链接(BuyServlet) 用Map集合存储Book对象 map.put("1", new Book("1","JavaWeb开发","老张","一本好书")); map.put("2", new Book("2","jdbc开发","老黎","一本好书")); map.put("3", new Book("3","hibernate","老方","一本好书")); map.put("4", new Book("4","struts","老黎","一本好书")); map.put("5", new Book("5","android开发","老张","一本好书")); private String id; private String name; private String author; private String description; 2. BuyServlet类 获取session 2.1 根据书的id获取书 2.2 为了购买的物品保留,多浏览器共享,手工设置cookie有效期 2.3 从session中获取所有书的集合,如果为空,就创建该list,session中设置该list, 2.3.1 否则添加书到集合中 2.4 重定向到购物车(BookCartServlet), 由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用 注意:response.encodeURL禁用cookie之后,直接写到把cookie写到标签上 3. BookCartServlet类 获取session,如果为空直接返回 如果有,就获取集合,遍历出来
2. 用户登录思路
0. login登录页面 1. User用户类 private String username; private String password; private String nickName; 2. UserDb存储用户类 /判断用户是否匹配,匹配返回user list.add(new User("aaa","123","周星星")); list.add(new User("bbb","123","周润发")); list.add(new User("ccc","123","周星驰")); 3. LoginServlet类 1. 封装类BeanUtils 2. 取用户输入的验证码,获取session中验证码值 2.1 创建一个session域,用字符串缓冲区记录随机生成的字符,然后设置attribute 2.2 取用户输入的验证码,获取session中验证码值 3. |--若相等, |--再验证用户名,若为空,请重新输入,跳转登录页 |--否则跳转欢迎页,设置session,重定向到主页 |--否则重新输入,跳转登录页 4. IndexServlet 1. 获取session,通过session域获取user对象 2. 如果user不为空,username。。。注销 3. 否则跳转登录页面 5. LogoutServlet //已经存在user的session就需要removeAttribute 重新跳转登录页面
3. 防止表单重复提交
LoginGenericServlet类 1. 处理乱码问题 2. 产生一个唯一的id(UUID.randomUUID.toString()/Base64/BigInteger) 3. 登录页面 out.write("<form action=‘"+request.getContextPath()+"/servlet/TokenServletDemo2‘ method=‘post‘>"); out.write("用户名:<input type=‘text‘ name=‘username‘ /><br/>"); out.write("<input type=‘hidden‘ name=‘token‘ value=‘"+id+"‘ /><br/>"); out.write("<input type=‘submit‘ value=‘登录‘/><br/>"); out.write("</form>"); TokenServlet防提交类 1. 处理乱码问题 2. 获取隐藏域id和之前产生Token相比 3. 如果相等,则提交成功,移除Token 4. 否则就提示重复提交
Cookie代码思路
1. 记录用户登录案例
1. LoginServlet类用作登录界面 1.0 解决输出乱码问题 1.1 登录页面,提交之后跳转到保存用户Cookie信息 out.write("<form method=‘post‘ action=‘"+getServletContext().getContextPath()+"/servlet/Cookie02_SavaUserServlet‘ >"); out.write("用户名: <input type=‘text‘ name=‘username‘ value=‘"+username+"‘ /><br/>"); out.write("密码: <input type=‘password‘ name=‘password‘ value=‘"+password+"‘ /><br/>"); out.write("记住用户名: <input type=‘checkbox‘ name=‘remember‘ value=‘"+checked+"‘ /><br/>"); out.write("<input type=‘submit‘ value=‘登录‘ /><br/>"); out.write("</form>"); 1.2 获取Cookie信息,遍历Cookie,保存用户名,和勾选状态。首先定义好变量 2. SaveUserServlet 2.1 解决输出乱码问题 2.2 定义实体类存储用户信息 2.3 BeanUtils中populate设置用户中的信息(getParameterMap()) 2.4 |--如果获取到的用户名和密码和指定的用户名和密码相匹配就保存Cookie |--如果勾选将用户名保存在cookie中 |--否则就删除cookie。c.setMaxAge(0); 登录成功 |--否则登录失败,刷新到登录界面
2. 显示用户浏览记录
Book类 private String id; private String name; private String author; private String description; Db类存储书籍的类 map.put("1", new Book("1","JavaWeb开发","老张","一本好书")); map.put("2", new Book("2","jdbc开发","老黎","一本好书")); map.put("3", new Book("3","hibernate","老方","一本好书")); map.put("4", new Book("4","struts","老黎","一本好书")); map.put("5", new Book("5","android开发","老张","一本好书")); 1. ShowAllBooks类 1.1 显示所有书籍 1.2 显示浏览过的书籍 1.3 获取Cookie中的值,切割ids,根据id获取书 2. ShowBookInfo 2.1 获取用户点击之后的书籍 2.2 显示书籍详细信息 2.3 构建cookiesValues的值 2.3.1 获取Cookie的值,存在bookHistory变量中 2.3.2 如果为空直接返回该id 2.3.3 否则就切割该bookHistory转成LinkedList 2.3.4 如果有这个id就直接移除 2.3.5 其他情况如果大于3本移除最后一本 2.3.6 添加id到最前面 2.3.7 遍历该集合然后存在字符串缓冲区中 2.3.8 返回该字符串缓冲区,以字符串返回回去,最后别忘记删除最后一个分隔符 2.4 创建Cookie,将cookie写回去
时间: 2024-10-14 11:37:14