利用Servlet+JavaBea+JDBC简单实现购物车

学习是我快乐

发布日期: 2020-06-03 11:45:07 浏览量: 321
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

Servlet+JavaBea+JDBC应用(利用sql数据库实现购物车)

一、任务描述

网上购物是人们日常生活的重要事情之一。在超市中有很多日常生活的用品,如电饭煲、蒸锅、洗衣机、电冰箱等。

本任务要求,通过所学Servlet、JavaBean和Session知识以及购物车的访问流程(详见P.152),模拟实现购物车功能。用户需要先登录,然后跳转到商品列表页面,点击购买则跳转到购物车中所购买商品的列表页面,否则,返回商品列表页面。另外,在商品列表页面,可以按照商品名称进行查询。

  • 本任务需要编写3个JSP页面(可以参考下图)、5个Servlet文件(一个是实现登录,一个是商品列表,一个实现商品查询,一个实现添加购物车功能,一个现实购物车信息)、2个JavaBean文件和2个dao文件和1个数据库连接文件,参考下图

  • 当首次登录商品列表页面,提示用户进行登录。登录成功进入到商品列表页面

  • 选择某个商品,点击“购买”,可以把该商品添加到购物车内

  • 要求商品列表页面,能够根据商品名称筛选出相应的商品

二、运行结果

登录页面

商品列表页面

名称筛选后的商品列表页面

购物车列表页面

首次登陆购物车列表页面

三、任务目标

  • 学会分析“实现购物车”程序的实现思路

  • 根据思路独立完成“实现购物车”的源代码编写、编译和运行

  • 掌握Servlet和JSP运行原理

  • 掌握购物车的工作流程

  • 掌握JavaBean、EL表达式和JSP标签库(JSTL)的使用

  • 熟练应用Servlet技术、JavaBean和Session对象完成购物车

四、实现思路

4.1 用户进行登录思路

完成简单Login.html页面设置标签的id,首先在servlet中通过request.getParameter(“username”);request.getParameter(“password”);获取输入信息,其次通过dao层的Username中的login(User user)方法实现查询数据库信息对照是否相等,在相等时实现跳转商品页面,在不相等时返回登入界面;

4.2 显示全部商品信息

当用户验证登入成功后在LoginServlet跳转至sy1Allbook(Servlet),通过dao层的BookManager的getALLBooks()获取数据库中的所有信息保存于list中,并设置JSP的内置对象的request将信息以传至manager_Page.jsp(商品信息表)中,通过EL表达式的${}与JSP标签库(JSTL)显示在页面中;

4.3 点击“购买”

当用户点击购买时带参数(ID)跳转至myCartServelet中当首次点击时创建HttpSession对象保存信息,再次点击时将信息加值session对象中。最后显设置JSP的内置对象的request将信息以传至myselfCart.jsp (购物车信息表)中,通过EL表达式的${}与JSP标签库(JSTL)显示在页面中;

4.4 查询思路

首先通过选择查询的标签(pressName、bookAuthor、bookName),以及填写的信息(Keyword)传至sy1SearchServelet中,其次通过BookManager的getSearch(String Query_conditions, String Keyword) 查询数据库方法返回list,最后显设置JSP的内置对象的request将信息以传至manager_Page.jsp(商品信息表)中,通过EL表达式的${}与JSP标签库(JSTL)显示在页面中;

五、总结或感悟

5.1 错误总结

使用response.sendRedirect():跳转导致信息无法显示。

5.2 错误解决

使用request.getRequestDispatcher().forward(request,response);跳转

5.3 错误笔记

  • request.getRequestDispatcher().forward(request,response):

    • 属于转发,也是服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和request.getAttribute()
    • 在前后两次执行后,地址栏不变,仍是当前文件的地址
    • 不能转向到本web应用之外的页面和网站,所以转向的速度要快
    • URL中所包含的“/”表示应用程序(项目)的路径
  • response.sendRedirect():

    • 属于重定向,也是客户端跳转,相当于客户端向服务端发送请求之后,服务器返回一个响应,客户端接收到响应之后又向服务端发送一次请求,一共是2次请求,前后页不共用一个request,不能读取转向前通过request.setAttribute()设置的属性值
    • 在前后两次执行后,地址栏发生改变,是目标文件的地址
    • 可以转向到本web应用之外的页面和网站,所以转向的速度相对要慢
    • URL种所包含的”/“表示根目录的路径

特殊的应用:对数据进行修改、删除、添加操作的时候,应该用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址栏都不会发生改变,仍然是修改的控制器,如果此时再对当前页面刷新的话,就会重新发送一次请求对数据进行修改,这也就是有的人在刷新一次页面就增加一条数据的原因。

如何采用第二种方式传递数据:

  • 可以选择session,但要在第二个文件中删除

  • 可以在请求的url中带上参数,如”add.htm?id=122”

5.4 总结感悟

访问数据库的也时一次次的连接数据库、执行SQL语句等出现代码大量的冗余;学习方法的封装,将访问数据库的操作,以及执行SQL语句的操作封装在一个类中,减少代码冗余。经过这次的课程设计,在实验中学习到了我对前端的请求相应有了更深的理解。

上传的附件 cloud_download sy1.rar ( 2.71mb, 33次下载 )

发送私信

43
文章数
9
评论数
最近文章
eject