基于MVC用JSP/Servlet实现JPetStore

##  基于MVC用JSP/Servlet实现JPetStore

一、实验内容

基于MVC开发模式用JSP/Servlet技术实现宠物商店网站JPetStore。具体内容包含基本任务和扩展任务两个部分:

基本任务:

 1. 商品展示业务模块,包括大类Category、小类Product和具体商品Item的展示和搜索功能。
 2. 用户管理业务模块,包括用户注册、登录、修改用户信息、查询用户相关订单等业务功能。
 3. 订单管理模块,包括购物车管理、新增订单、地址信息等业务功能。

扩展任务:

 1. 添加验证码功能:在用户注册和用户登录模块中添加验证码功能。
 2. 购物车功能:原项目中购物车为内存购物车,即将用户相关的购物车存储在session中;在数据库中添加购物车表,将购物车数据持久化,以便用户下次登录时可查看或修改自己的购物车数据。
 3. 日志功能:数据库中添加日志信息表,给项目添加日志功能,用户登录后记录用户行为,比如浏览了哪些商品、将商品添加进购物车、生成订单等。

本项目是基于老师所给的mybatis-jpetstore-6.0.0项目完成的。首先理顺本项目的逻辑。主要分为四大模块,他们分别是账户信息模块,商品展示模块、购物车以及订单模块。账户模块包括用户的登录、注册、个人信息的编辑查看;商品展示模块包括商品的Category、Product、Item以及SearchProduct功能;订单模块包括提交订单、更改地址以及查看订单和订单记录。
    基本理顺项目的逻辑后,跟着老师的视频学习,基于MVC的开发模式,完成了项目的搭建。
 
    Model层包括完成业务逻辑的service,实现持久化操作的persistence(DAO),以及表达数据的domain;Controller层由webservlet实现;View层由jsp页面组成,页面可有css样式以及各种图片,把它们放在了css和images中。

       servce中包括连接数据库的基本业务逻辑函数,比如insertAccount函数,

在函数中,用到了AccountDAO接口提供的方法来对数据库进行插入操作,在AccountDAOImpl中实现了这个接口

数据库中需要注意的是,DBUtil中完成了驱动数据库,连接以及关闭数据库的操作函数,以便于后面的使用。其中两条语句,和mysql的版本有关,mysql-connector-java 6版本需要加上cj,并在connectionString中指定时区,基本出现的问题都可以百度解决。

       数据库操作的sql语句原项目也有,可以直接用,具体的函数方法比如getAccountByUsername模仿老师的例子完成,因为要实现哪些方法以及他们的sql语句都已经我们了,我们主要就是完成方法的书写,有比较多的地方需要注意细节,比如PreparedStatement的占位赋值顺序以及个数需要注意。

       Controller层的servlet的量比较大,在商品展示部分就有ViewCategoryServlet、ViewProductServlet、ViewItemServlet,根据用户的不同请求会到不同的servlet,是一个获取信息的中间枢纽的作用,根据用户的请求来获取数据库中的的数据,并把这些信息返回给页面来显示。View层可以得到后端返回的数据,并对数据进行展示,利用EL表达式和JSTL标签库能够简化表达,使得项目更加符合MVC模式。

       首先是实现验证码的功能。到网上查找方法,首先创建Vertify类,类中固定了显示验证码图像的一些参数,比如验证码的显示的是字母和数字随机组成的,这些字符有不同的字体类型,为了画出这样一个验证码图像,用到了BufferedImage和Graphics2D来完成绘画,并随机设置画笔颜色以及画干扰线。ValiImageServlet调用Vertify类并创建其对象进行绘画,同时把绘画生成的图片存入response实体中,在界面中便于显示。

       在用户登录和注册的地方都添加了验证码的功能,并在其对应的servlet中对验证码的正误进行判断,从而给出下一步操作是否正常进行的指令,当验证码正确时才能成功登录或注册。

       验证码功能完成后,准备实现购物车持久化功能。首先准备将每个用户的购物车的数据存入数据库中,创建了数据库cart表

该表有两个主键,当用户登录时,根据userid获取数据库中cart表的每一项,根据用户购物车的商品id以及个数初始化cart对象,即加载购物车,当移除购物车中的某一个商品中,数据库中的数据也会发生改变。在项目中,我要求用户只有登录之后才能向购物车中添加物品,当用户退出之后也无法查看购物车。在创建好购物车表后,我写了一些和购物车有关的操作的sql语句,比如根据id获取购物车信息,更新删除购物车等,这些语句相比例子的那些语句要简单,接着就完成了相应的一些函数方法的书写,例如

在ViewCardServlet中通过service的方法获得购物车后,将其储存在session中,这样前端加载时得到的就是数据库中的购物车了。

       购物车功能完成后,开始完成日志功能。日志功能我的想法是,数据库中存储一张log表,表结构如图:

当用户进行某些操作,比如查看购物车,加购某个商品,浏览某个商品时,向数据库中插入一条日志log,它包括操作的时间以及操作的相关信息。于是在创建好数据库表后,我写了LogDAO接口并实现了该接口,含有插入log操作以及根据用户名获得logs操作,在servlet中调用AccountService的addLog方法即可向数据库中插入log,因此对前面的的大多servlet进行改善,加上这样一段代码

       日志的显示我借鉴了MyOrders的显示,使用表格来显示,使用标签库和EL表达式来简化。

但是添加日志功能后,在未登录状态点击各类宠物ViewCategory时,出现异常

查看源代码错误提示处

考虑到目前是未登录状态,所以出现空指针异常。于是更改,再登录状态再添加日志。

修改之后,能看到每个Category,但是点击product时出现一样的错误,于是继续修改viewProduct部分,同理修改viewItem部分最终实现日志功能。

基于Ajax的jpetstore是一个以Ajax技术为基础开发的网上宠物商店系统。通过Ajax的无刷新请求,在不刷新整个页面的情况下,实现了更流畅、更快速的网页交互体验。 基于Ajax的jpetstore的主要特点包括: 1.无需刷新页面:使用Ajax技术,实现了页面数据的异步加载和更新。用户可以在不刷新整个页面的情况下,执行各种操作,如添加商品到购物车、搜索商品、更新购物车等。 2.页面动态交互:通过Ajax可以实现动态加载和更新页面的内容,用户可以即时看到数据的变化。比如,当用户搜索商品时,系统会在用户输入内容时自动联想相关的商品名称,从而提供更快速的搜索体验。 3.增强用户体验:通过Ajax技术,可以在后台进行实时的数据验证和处理,从而提高系统的反应速度和性能。例如,在用户提交订单之前,可以通过Ajax在后台验证用户输入的数据是否合法,避免出现错误。 4.减少带宽和服务器压力:使用Ajax,可以将部分数据交互从客户端移到服务器端。当用户进行数据操作时,只需传输少量的数据,而不是整个页面的内容,从而减少了网络带宽的消耗,减轻了服务器的压力。 总之,基于Ajax的jpetstore能够提供更流畅、更快速的用户体验,并减少了带宽和服务器的负载。它通过采用异步加载和更新页面的方式,增强了用户对系统的使用满意度,提高了系统的性能和响应速度。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值