一、Web实现登录注册功能
1、效果图
2、结构图
3、关键词
- Cookie
- UploadFile(字节流操作)
- InitServlet(自启动)(<load-on-startup>)
- multipart/form-data + post 获取步骤
- UUID
4、下载地址
二、Web实现唯一登录功能(过滤器 + 监听器 + 单例模式)
1、项目分析图
Ps:必须使用两个不同的浏览器,否则session是一样的,检测不出效果。
2、核心代码
packagecom.imooc.listener; importjavax.servlet.http.HttpSession; importjavax.servlet.http.HttpSessionAttributeListener; importjavax.servlet.http.HttpSessionBindingEvent; importcom.imooc.cache.LoginCache; /*** 用户登录监听器* @author lv**/publicclassLoginSessionListenerimplementsHttpSessionAttributeListener { privatestaticfinalStringLOGIN_USER="loginUser"; @OverridepublicvoidattributeAdded(HttpSessionBindingEventhsbe) { StringattrName=hsbe.getName();//监听到session属性值发生添加操作,获取对应操作的属性名if(LOGIN_USER.equals(attrName)){//若属性名为登录属性名,判定为用户登录操作StringattrVal= (String)hsbe.getValue();//获取添加的属性值,即用户登录名HttpSessionsession=hsbe.getSession();//该次操作的session对象StringsessionId=session.getId();//该次操作的session对象IDStringsessionId2=LoginCache.getInstance().getSessionIdByUsername(attrVal);//从缓存对象里面,获得该用户登录名对应的sessionID值if(null==sessionId2){//未获得结果,不需要清理前次登录用户会话信息 }else{ HttpSessionsession2=LoginCache.getInstance().getSessionBySessionId(sessionId2);//获取前次该用户登录对应的session对象session2.invalidate();//清理前次登录用户会话存储信息,使得前次登录失效 } //完成该次登录用户登录名、sessionID,session对象的缓存对象存储LoginCache.getInstance().setSessionIdByUserName(attrVal, sessionId); LoginCache.getInstance().setSessionBySessionId(sessionId, session); } } @OverridepublicvoidattributeRemoved(HttpSessionBindingEventarg0) { } @OverridepublicvoidattributeReplaced(HttpSessionBindingEventarg0) { } }
Ps:使用sessionAttr监听器而不是用session监听器,因为只是创建session监听是毫无意义的,比如:进入到登录页面,但可能没有登录,但是监听功能已经启动了。
packagecom.imooc.cache; importjava.util.HashMap; importjava.util.Map; importjavax.servlet.http.HttpSession; /*** 登录用户与session缓存对象* @author lv**/publicclassLoginCache { privatestaticLoginCacheinstance=newLoginCache(); privateMap<String,String>loginUserSession=newHashMap<String,String>();// key值:登录用户登录名,value值:登录用户sessionIdprivateMap<String,HttpSession>loginSession=newHashMap<String,HttpSession>();//key值:登录用户sessionId,value值:登录用户session对象privateLoginCache(){ } publicstaticLoginCachegetInstance(){ returninstance; } /*** 通过登录名获取对应登录用户的sessionId* @param username* @return*/publicStringgetSessionIdByUsername(Stringusername){ returnloginUserSession.get(username); } /*** 通过sessionId获取对应的session对象* @param sessionId* @return*/publicHttpSessiongetSessionBySessionId(StringsessionId){ returnloginSession.get(sessionId); } /*** 存储登录名与对应的登录sessionID至缓存对象* @param username* @param sessionId*/publicvoidsetSessionIdByUserName(Stringusername,StringsessionId){ loginUserSession.put(username, sessionId); } /*** 存储sessionId与对应的session对象至缓存对象* @param sessionId* @param session*/publicvoidsetSessionBySessionId(StringsessionId,HttpSessionsession){ loginSession.put(sessionId, session); } }
3、下载地址
三、购物车 + 收藏 + 浏览记录 + 分页 + 模糊查询(附:404、500、编码过滤)
1、效果图2、结构图
3、技术介绍4、模块说明
1、购物车
- 课程列表显示
- 加入购物车、加入收藏
- 购物车列表显示及删除、计算
- 收藏列表显示及删除
2、进入应用第一页
- welcome-file-list
- index.jsp
- 跳转到课程列表页
3、课程列表页
- jsp课程列表展现
- Servlet、LocalCache实现
4、购物车操作
- 加入购物车
- 购物车列表展现
- 删除购物车记录
- 购物车模拟结算
5、收藏及操作
- 加入收藏
- 收藏列表展现
- 删除收藏记录
6、浏览记录及操作
- 课程详情
- 加入浏览记录
- 查看浏览记录
- 删除浏览记录
7、其他功能
- 课程分页
- 模糊查询