开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
本实验通过Javaweb完成一个购物网站的前台界面,主要流程如下
参考细节
本实验是基于Javamvc模式完成属于综合性网站,并且涉及四张数据库表格,分别是商品表格,顾客表格,购物车表格,订单表格
使用视图层-控制层-服务层-模型层的四层架构来实现,并要求基于接口编程。注意 Java 数据类型、JDBC 数据类型和 MySQL 数据类型之间的对应关系。例如 Java 中通常使用 BigDecimal 声明需要精确的价格、金额等属性,Java 的 BigDecimal 对应 JDBC 中的 decimal 类型。再例如, 日期时间类型,在 Java 中通常以 java.util.Date 或 long 来声明,在 jdbc 中则是 jdbc.sql.Date,建议双方均以 long 进行日期时间的存储。Java 中的 long 对应 JDBC 的 bigint。 在 JSP 页面中显示金额和日期时应分别使用 java.text.DecimalFormat 和 java.text.SimpleDateFormat 进 行格式化。可以编写工具类或 EL 函数进行格式化,建议使用自定义 EL 函数的方式。
购物流程介绍
-
顾客进入网站首先看到的首页应该是商品列表界面。在该界面中以表格的形式分页显示 商品信息。顾客可以点击加入购物车进行购物。商品加入购物车后,仍然显示商品列表界面。未登录的用 户在点击加入购物车时会跳转到登录页面,即图
-
本实现中购客信息只保留最基本的用户名和密码即可。 如图 3 所示,顾客登录后,首先点击“加入购物车”选购商品,然后可以点击“查看购物车”进行购 物车界面,也可以点击“退出”退出本网站。如果顾客多次点击某商品的“加入购物车”,该商品的购买数 量应相应增加。顾客加入购物车的商品应在数据库中进行保存,方便顾客自行决定何时下单。
-
该界面中应显示顾客已选购的商品、购买数量及所有商品总价。购买数量不应大 于商品库存,如购买数量大于商品库存,可使用弹出对话框的方式提示顾客。商品总价计算时应使用折扣价,而不是原价。
-
在购物车界面, 顾客可以删除某个商品、清空购物车或确认下单。顾客在购物车界面点击“确认下单”后进入“确认订单”界面。顾客可在该界面中提交 收货人姓名、收货地址及收货人电话等基本信息。点击“提交订单、准备支付”按钮后,应在数据库存储 该订单信息,并跳转到支付界面。生成的订单状态为 0,即未付款状态。订单数据库表 order_table 中由 statusCode 字段保存订单状态,约定:0 未支付,1 已支付未发货,2 已发货,3 已收货,4 退货中, 5 已退货。本实验中只涉及到顾客相关的状态,即 0 未支付和 1 已支付。提交订单后生成订单,顾客的购物 车应同时清空,且商品库存也应相应变化(注意图 8 商品列表中的库存已减少),若取消订单,购物车和商 品库存应保持不变
-
。实际项目中通常会借由微信、支付宝、网上银行等第 3 方支付平台提供的接口实现 支付,故此界面的支付功能简化为点击“支付完成”即完成支付。支付后,订单状态由 0 未支付修改为 1 已支付。
看上去好像很难的样子,但是我们把他分解开来数据,就会发现比较简单
登录注册界面
可以参考文章 如何完成一个用户注册登录页 - 掘金 (juejin.cn)
这次属于jsp实现。
在WEB-INF,目录下新建jsp目录,并在里面加入login.jsp,register.jsp。
jsp界面书写和html类似,这边不赘述。
遇到问题1 WEB-INF目录下资源不可见。
因为在web界面,WEB-INF下资源不能访问,属于需要我们手动写一个jsp转换页
这里我们假设访问页面使用xx.do然后被拦截下列,进行转发拼接。
为什么要-3?因为后缀.do不是我们需要的,我们需要下面拼接jsp。
把我们实际访问.do的递增拿出来,把端口等前缀去掉,把后缀修改,就能拿到我们要访问的页面路径,进行转发就能通过服务器访问
注册怎么添加到数据库
拿到jsp代码,我们知道jsp需要去访问controller页面,也就是我们的servlect实现的控制层。
我们知道控制层需要service层提供方法进行,service实现的反复,底层需要dao来访问数据库。所以这里我们从数据库开始。
数据库
实体类
用户界面数据库设计好就可以开始书写实体类,我们把数据库字段变成书写,书写一个customer类。
dao包
因为需要面向接口编程,所以在dao包下新建一个接口类,并在里面添加add,select方法,因为这个表拥有登录(查询某一个),注册(添加)。并且在dao.impl包下新建实现类。
因为需要多次访问数据库,所以把访问数据库代码提取新建一个类
service
同dao包类似,不过实现类里面创建dao里面对象,并且提供对象调用相关方法
controller
到这里,基本注册登录完成。
ps:后面不会详细写几个层的内容,而是提供controller讲解。
商品界面
商品界面和注册界面类似,主要是数据库的书写
jsp界面就不提了,不过,两边时间如何转换
书写一个时间转换器就好
类如下
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class MyElFunctions {
public static SimpleDateFormat sdfYMD = new SimpleDateFormat("yyyy-MM-dd");
public static SimpleDateFormat sdfYMDHMS = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public static String currency(BigDecimal money) {
return DecimalFormat.getCurrencyInstance(Locale.CHINA).format(money);
}
public static String formatDate(long time) {
return sdfYMD.format(time);
}
public static String formatDatetime(long time) {
return sdfYMDHMS.format(time);
}
}
tld如下
使用如下:
如何实现分页
在产品界面,因为很多数据,需要完成分页,分页需要limit x,y,数据库层面(dao)很容易完成,但是service呢?我们给全部查询添加两个参数,一个是每一页几个数据,一个是从什么开始。并且我们给他设置默认值 具体controller如下
为了保险起见还可以添加数据类型为String的,直接使用Interger转换即可
如何实现文件上传
需要包
首先设置一个图片地址(方便后面在out对应路径下查看上传图片)
然后·创建一个工厂类,进行相关操作。表单里面需要添加
购物车实现
jsp界面:
我们通过前端获取到的数据,进行购物车数据赋值,然后jsp页面提供el表达式获取值,进行展示。 不过具体支付我仅仅修改表里面的一个参数,并没有真正实现支付
支付
关键是在数据库设计一个标识
那么就可以提供修改标识来改变支付