JavaWeb - 应用篇

简介: JavaWeb - 应用篇

一、Web实现登录注册功能

1、效果图image.pngimage.png

2、结构图

image.png

3、关键词

- Cookie

 - UploadFile(字节流操作)

 - InitServlet(自启动)(<load-on-startup>)

 - multipart/form-data + post 获取步骤

 - UUID

4、下载地址

点击进入下载页面


二、Web实现唯一登录功能(过滤器 + 监听器 + 单例模式)

1、项目分析图image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

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、效果图image.pngimage.pngimage.pngimage.pngimage.pngimage.png2、结构图

image.png

3、技术介绍image.png4、模块说明

 1、购物车

       - 课程列表显示

       - 加入购物车、加入收藏

       - 购物车列表显示及删除、计算

       - 收藏列表显示及删除

2、进入应用第一页

       - welcome-file-list

       - index.jsp

       - 跳转到课程列表页

3、课程列表页

       - jsp课程列表展现

       - Servlet、LocalCache实现

4、购物车操作

       - 加入购物车

       - 购物车列表展现

       - 删除购物车记录

       - 购物车模拟结算

5、收藏及操作

       - 加入收藏

       - 收藏列表展现

       - 删除收藏记录

6、浏览记录及操作

       - 课程详情

       - 加入浏览记录

       - 查看浏览记录

       - 删除浏览记录

7、其他功能

       - 课程分页

       - 模糊查询

5、下载地址

点击进入下载页面

目录
相关文章
|
18小时前
|
安全 Java 测试技术
开发Java RESTful Web服务的技巧
开发Java RESTful Web服务的技巧
|
19小时前
|
Cloud Native Java 持续交付
使用Java实现云原生应用架构
使用Java实现云原生应用架构
|
1天前
|
算法 安全 Java
Java中的泛型详解:边界、类型擦除与实际应用
Java中的泛型详解:边界、类型擦除与实际应用
|
1天前
|
存储 JSON 缓存
Java中的对象序列化与反序列化:实现与应用
Java中的对象序列化与反序列化:实现与应用
|
1天前
|
设计模式 监控 Java
Java中的动态代理:实现与应用
Java中的动态代理:实现与应用
|
1天前
|
XML 监控 Java
Java中的AOP编程:AspectJ与Spring AOP的应用
Java中的AOP编程:AspectJ与Spring AOP的应用
|
1天前
|
Java 机器人 程序员
Java中的枚举类型详解:应用与最佳实践
Java中的枚举类型详解:应用与最佳实践
|
1天前
|
存储 Java 机器人
Java中的静态变量与静态方法:应用与注意事项
Java中的静态变量与静态方法:应用与注意事项
|
1天前
|
Java 机器人 数据库
Java中的Servlet编程:从基础到高级应用
Java中的Servlet编程:从基础到高级应用
|
1天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
【6月更文挑战第25天】在Java持久层,Hibernate与JPA提供ORM及数据库操作简化。JPA是EE规范,定义ORM接口;Hibernate是其实现,功能丰富。在一个在线书店项目中,使用@Entity标注实体类如Book,通过JpaRepository接口(如BookRepository)进行数据访问。服务层调用仓库接口方法,如搜索书籍。当需自定义查询时,可使用JPQL或SQL。Spring的@Transactional注解处理事务管理,展示出高效开发流程。