SSH网上商城项目实战 过滤器实现购物车购物登陆功能的判断。

购物车实现原理 web开发中购物出功能实现原理,实现购物车的关键在于服务器识别每一个用户并维持与他们的联系。但是HTTP协议是一种“无状态(Stateless)”的协议,因而服务器不能记住是谁在购买商品,当把商品加入购物车时,服务器也不知道购物车里原先有些什么,使得用户在不同页面间跳转时购物车无法“随身携带”,这都给购物车的实现造成了一定的困难。      目前购物车的实现主要是通过cookie、session或结合数据库的方式 立即下载

      上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登录的判断,判断用户有没有登录,没有登录的话,得首先让用户登录。这就用到了过滤器的技术了,过滤器是专门拦截页面请求的,它与拦截器的原理差不多,拦截器是专门拦截Action请求的,所以各有所用,如果直接是页面的跳转,不经过Action的话,我们只要写一个拦截器即可,如果需要跳转到一个Action处理,那么我们就得写一个拦截器。

1. 登录跳转的原理

        先说一下实现原理:写一个过滤器,在web.xml中配置一下需要拦截的url,这样的话,当用户的请求url中满足配置的话,就会执行我们自己写的过滤器,在过滤器中,我们首先检查session中有没有登录过的user,如果没有说明没有登录,然后拿到用户想要访问的页面url和参数,重新拼接成url放到session中,然后重定向到登陆页面,登录后跳转到Action处理,处理完后跳转到session中保存的url,即原来用户想去的地方。这样就完成了登陆的跳转了。

2. 登录跳转的实现

        当现实购物车页面后,我们点击结账,它会自动跳转到订单确认的页面,如下:


        但是此时如果用户没登录,我们肯定不能直接跳到订单确认页面,所以我们要用过滤器拦下来判断一下,下面写过滤器:

2.1 过滤器的实现

        过滤器的实现要实现Filter接口,并覆写三个方法即可,其实我们主要要覆写其中一个方法即可。如下:

[java]  view plain  copy
  1. public class UserFilter implements Filter {  
  2.   
  3.     @Override  
  4.     public void destroy() {  
  5.         // TODO Auto-generated method stub  
  6.   
  7.     }  
  8.   
  9.     @Override  
  10.     public void doFilter(ServletRequest request, ServletResponse response,  
  11.             FilterChain chain) throws IOException, ServletException {  
  12.         HttpServletRequest req = (HttpServletRequest) request;  
  13.         HttpServletResponse res = (HttpServletResponse) response;  
  14.         // 判断当前session是否有用户信息  
  15.         if(req.getSession().getAttribute("user") == null) {  
  16.             //保存当前客户想要去的url地址  
  17.             String goURL = req.getServletPath();//获得用户想要去的地址  
  18.             String param = req.getQueryString(); //获得地址中携带的参数  
  19.             if(param != null) {  
  20.                 goURL = goURL + "?" + param; //重新拼好请求地址+参数  
  21.             }  
  22.             //把当前客户想要访问的地址,存储到session中  
  23.             req.getSession().setAttribute("goURL", goURL);  
  24.               
  25.             //非法请求,跳转到登陆页面  
  26.             req.getSession().setAttribute("error", "非法请求,请登录!");  
  27.             res.sendRedirect(req.getContextPath() + "/ulogin.jsp");  
  28.         } else {  
  29.             //如果有下一个过滤器则跳转,否则直接到目标页面  
  30.             chain.doFilter(request, response);  
  31.         }  
  32.     }  
  33.   
  34.     @Override  
  35.     public void init(FilterConfig config) throws ServletException {  
  36.         // TODO Auto-generated method stub  
  37.   
  38.     }  
  39. }  
        从实现的代码来看,主要腹泻了doFilter方法,在方法里,首先判断当前session中是否有用户的信息,如果没有,说明没有登录,那么要先将用户想要去的url地址和地址中的参数保存下来,拼成新的url存到session中,然后重定向到登陆页面,让用户登陆。如果session中有用户信息,说明已经登录过了,直接放行到用户想去的页面。

        写好了Filter,别忘了在web.xml中配置要过滤的url,配置如下:


        所以会过滤上面的${shop}/user/confirm.jsp。接下来我们看看登陆页面,其实就是两个框框,用户名和密码,主要看它跳到哪个Action去:


        我们看到,它跳转到了userAction中的login方法去执行逻辑。下面我们实现userAction:

2.2 Action的实现

        在userAction中,我们首先进行登陆的判断,即在数据库中查找有没有该用户名和密码的用户,如果成功,则将user存到session中,然后返回一个结果,交给struts2处理,代码如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Controller("userAction")  
  2. @Scope("prototype")  
  3. public class UserAction extends BaseAction<User> {  
  4.     public String login() {  
  5.         //进行登陆的判断  
  6.         model = userService.login(model);  
  7.         if(model == null) {  
  8.             session.put("error", "登陆失败");  
  9.             return "login";  
  10.         } else {  
  11.             //登录成功,先将用户存储到session中  
  12.             session.put("user", model);  
  13.             //根据session中goURL是否有值而决定页面的跳转  
  14.             if(session.get("goURL") == null) {  
  15.                 return "index"; //跳到首页  
  16.             } else {  
  17.                 return "goURL";  
  18.             }  
  19.         }  
  20.     }  
  21. }  
        我们看看struts.xml中的配置:

        因为我们把goURL存在session中了,但是在struts.xml中我们不能像在Java代码里去拿session,然后拿参数,但是我们可以从值栈中取,上面是从值栈中取数据的方法。

2.3 Service层的登陆判断

        Service层主要就是上面Action中用到的login方法,实现比较简单,如下:

[java]  view plain  copy
  1. //userService接口  
  2. public interface UserService extends BaseService<User> {  
  3.     //用户登陆,成功返回该User  
  4.     public User login(User user);  
  5. }  
  6.   
  7. //userServiceImpl实现类  
  8. @Service("userService")  
  9. public class UserServiceImpl extends BaseServiceImpl<User> implements  
  10.         UserService {  
  11.   
  12.     @Override  
  13.     public User login(User user) {  
  14.         String hql = "from User u where u.login=:login and u.pass=:pass";  
  15.         return (User) getSession().createQuery(hql) //  
  16.             .setString("login", user.getLogin()) //  
  17.             .setString("pass", user.getPass()) //  
  18.             .uniqueResult();  
  19.     }  
  20.   
  21. }  

        好了,这样我们用过滤器实现了用户登录的判断与跳转,登陆过后,就能跳转到订单确认页面了,效果如下:

        整个流程测试完毕,功能正常。其实这里还可以再完善一点,我们其实应该在加入购物车之前就应该要进行登录判断,也就是说,购物车页面的时候已经是登录状态了,这里是订单确认页面判断登录的。不过在购物车页面前进行判断的话,我们就不好用过滤器了,我们得用拦截器,因为跳转到购物车页面请求的是Action,不是普通页面,请求Action的时候我们得用拦截器拦截来判断,后期再来完善这里吧,现在先把这里的功能基本实现了再说~好了,登录判断与跳转就做好了。

     (注:到最后我会提供整个项目的源码下载!欢迎大家收藏或关注)

ssh 简易购物车实现 SSH框架+SQL Server2005制作的简易购物车实现 立即下载

相关推荐

用ssh做的购物车完整版

实现了基本的功能(对购物车添加 修改 删除 结账)

【SSH网上商城项目实战18】过滤器实现购物登录功能的判断

       上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登录的判断,判断用户有没有登录,没有登录的话,得首先让用户登录。这就用到了过滤器的技术了,过滤器是专门拦截页面请求的,它与拦截器的原理差不多,拦截器是专门拦截Action请求的,所以各有所用,如果直接是页面的跳转,不经过Action的话,我们只要写一个拦截器即可,如果需要跳转到一个Action处理,那么...

1万+

ssh实现的购物车和分页功能

ssh实现的购物车和分页功能

网络安全之URL过滤

预定义URL分类是URL过滤功能提供商整理好的URL分类信息,并且定期更新。海量的URL预先划分好归类,例如博彩类、钓鱼类、购物类等等。预定义URL分类中包含的URL条目数量巨大,逐条查找会影响效率,一般采取“两步走”的方式。第一步,将常用URL及对应的URL分类信息存储到设备本地,先在这些URL中进行查询;如果没有查询到,再进行第二步,远程查询云端的URL分类服务器中的分类信息,URL分类服务器中的信息更全面。

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 1913

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4229

SOLIDWORKS无法获得下列许可 无效的使用许可号码(-8,544,0) 解决办法大全

SOLIDWORKS无法获得下列许可 无效的使用许可号码(-8,544,0) 解决办法大全。版本:SolidWorks2021。电脑:惠普战66四代。软件安装不困难!

qq_43596278的博客 11万+

如何实现判断当前操作,用户是否为登录状态?

如何实现判断当前操作,用户是否为登录状态?

weixin_42065178的博客 6454

C#与发那科机器人通信实战:从SDK配置到机械臂控制

本文详细介绍了如何使用C#与发那科机器人进行通信,从SDK配置到机械臂控制的完整实战流程。内容包括环境准备、通信连接建立、机械臂运动控制、异常处理与状态监控,以及高级功能实战,帮助开发者快速掌握工业机器人编程技术。

weixin_42524276的博客 459

java购物车逻辑功能_SSH框架网上商城项目第17战之购物车基本功能

上一节我们将商品的详细页面做完了,并使用了Hibernate的二级缓存加载详细页面来提高系统的性能,点击文章查看:。这节我们开始做购物车部分。1. 添加新的表首先我们向数据库中添加几张表:用户表、订单状态表、订单表(购物车表)以及购物项表。用户表中存有用户的基本信息,订单状态表中主要存储订单的状态,比如已发货这种,订单表主要存储用户的信息和订单的状态,所以跟用户表和订单状态表关联,购物项表存储某个...

weixin_42311972的博客 352

使用TensorFlow Lite Micro流程记录(带源码)

记录如何使用tensorflow lite micro,以及期间解决的问题

ZhaoDongyu_AK47的博客 6216

DeepSeek助力学术审稿:高效处理审稿意见的实用提示词指南

本文介绍如何利用DeepSeek AI工具高效处理学术审稿意见,提供实用的提示词指南。从评审意见结构化整理到争议问题回应策略,详细解析AI在加速审稿流程中的应用技巧,帮助研究者大幅提升回复效率和质量。

weixin_28684497的博客 596

【SSH网上商城项目实战17】购物车基本功能的实现

   上一节我们将商品的详细页面做完了,并使用了hibernate的二级缓存加载详细页面来提高系统的性能。这节我们开始做购物车部分。 1. 添加新的表         首先我们向数据库中添加几张表:用户表、订单状态表、订单表(购物车表)以及购物项表。用户表中存有用户的基本信息,订单状态表中主要存储订单的状态,比如已发货这种,订单表主要存储用户的信息和订单的状态,所以跟用户表和订单状态表关联,购...

weixin_34162695的博客 203

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 333

java ssh 过滤器获取提交参数_SSH框架网上商城项目第18战之过滤器实现购物登录功能的判断...

上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登录的判断,判断用户有没有登录,没有登录的话,得首先让用户登录。这就用到了过滤器的技术了,过滤器是专门拦截页面请求的,它与拦截器的原理差不多,拦截器是专门拦截Action请求的,所以各有所用,如果直接是页面的跳转,不经过Action的话,我们只要写一个拦截器即可,如果需要跳转到一个Action处理,那么我们就得写一个...

weixin_33362555的博客 171

适航规章、标准,书籍资料下载汇总(更新中)

以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2553

FPGA SoC 的 RISC-V 固件开发全攻略(三):RISC-V MCU 启动流程深入解析

本文是《FPGA SoC 的 RISC-V 固件开发全攻略》专栏第 3 篇。上一篇:第 2 篇《开发环境搭建与工具链避坑》 | 下一篇:第 4 篇《RISC-V 与 ARM Cortex-M 开发差异对比》

XavierKong的博客 44

网上商城开发详解和界面介绍

有关网上商城详细流程和介绍, 网上商城:1、后台:SSH做主骨架清晰划分表现层、控制层、服务层和dao层,利用Spring的依赖注入,利用AOP做事务管理,权限控制等。业务逻辑与控制层严格分离。2、前台:使用javascript,jsp,html,ajax和jquery框架等配合使用实现简单的富客户端。  首页: 技术点   1、用户名的显示,如果没登陆那么就会显示

专注于Groovy语言,grails框架与管理之道 3223

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

基于JSP网络购物中心系统

功能: 1.注册 作为一个电子商务,最基本的功能肯定就是注册了。因为只有注册用户才能在网站内订购自己想要购买的商品。 2.登陆 为了能更方便地使用网站的各项功能,用户登录也是必不可少的。当用户登录以后,便可进行查阅/更改自己的个人资料、修改/处理个人定单等操作。 3.注销 若用户登录后要离开网站,可注销个人帐号,以防止他人修改或使用本人帐号。 4.购物车 当用户选好自己想要的商品后可把商品放入购物车中,购物车将自动产生相应的定单。当然,用户也可以从购物车里删除掉选好的商品,而相应定单的也会删

qq-79856539的博客 891

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jsp在线购物商城

此基于JSP的购物网站分前台功能和后台功能: 前台部分由用户使用,主要包括新品上架、特价商品、销售排行、购物车、会员管理、商品公告及订单查询、商品查询等。 后台部分由管理员使用,主要包括对商城内的一些基础数据进行有效管理,包括商品管理、会员管理、订单管理、公告管理等。 关于开发环境 1. jdk1.8 2. myeclipse10 3. tomcat8 4. mysql utf-8 使用技术 1. ssh 框架 2. log使用的是log4j 3. 自定义properties 4. 字符集 ut.

qq-79856539的博客 1199
上一篇: 三大框架配置步骤
下一篇: java中的@repository什么意思?
WhtBk
博客等级 码龄11年 12粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值