Java开发工程师(Web方向)微专业大作业的实现(含源码资源)

前言

  该项目是对网易云课堂Java开发工程师(Web方向)微专业——《Java Web开发实践》大作业的实现。
如非学员,建议避坑


吐槽

  课程提供的前端代码、设计文档质量差(变量命名的不协调;表意不清;前端代码与入口文档不统一……),大作业需求还存在自相矛盾的情况。
  由于上述槽点的存在,与其认为大作业是对 后端基础开发能力 的考核,不如看做是对 前后端交互BUG修复能力 的考核。而这对前端代码的认知有了一定的要求,仅凭微专业本身的内容肯定是不够的


推荐学习资源


项目源码

https://github.com/Hunter1023/SSM_EMALL


项目搭建过程

以下内容待梳理,以更好地表述


1.创建数据库

数据库设计文档的问题
1. 文档中没有商品数量的相关信息,但是前端账务页面却需要展示商品的购买数量
2. 内容表中price的类型是bigint,交易记录表的price类型却为int,最后的评分标准还要求商品价格可以为小数,因此默认存储的价格单位为分(freemarker有默认的数字格式化显示)
3. 在person表的id是自增主键的情况下,不该传入含id的用户数据
4. 交易记录表中的price的含义为单价

提供的数据库设计文档修改:
- person表(将username和nickname都改为小写)

create table person(
id int auto_increment primary key comment "主键", 
username varchar(100) comment "用户名", 
password varchar(100) comment "密码md5加密",
nickname varchar(50) comment "用户昵称",
userType tinyint(3) comment "类型,买家0,卖家1") 
ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  • content表(添加商品库存数)
create table content(
id int auto_increment primary key comment "主键",  
price bigint  comment "当前价格",
title varchar(100) comment "标题",
num int not null comment "库存",
icon blob comment "图片",
abstract varchar(200) comment "摘要",
text blob comment "正文"  )
ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  • trx表(修改购买价格的类型;添加购买数量)
create table trx(
id int auto_increment primary key comment "主键",  
contentId int  comment "内容ID",
personId int comment "用户ID",
num int default null comment "购买数量",
price bigint comment "购买价格",
time bigint comment "购买时间")
ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  • 用户数据(去除id数据的传入)
insert into `person` (`id`, `userName`, `password`, `nickName`, `userType`) values('0','buyer','37254660e226ea65ce6f1efd54233424','buyer','0');
insert into `person` (`id`, `userName`, `password`, `nickName`, `userType`) values('1','seller','981c57a5cfb0f868e064904b8745766f','seller','1');

2.使用Maven搭建项目框架

3.根据src/main/webapp/WEB-INF目录下的web.xml配置相关xml文件

勘误:
web.xml中以下内容重复,删除其中一个

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • src/main/resources目录下创建Spring和mybatis的配置文件spring-mybatis.xml
  • src/main/resources目录下创建Spring MVC的配置文件spring-mvc.xml

4.根据课程提供的文档设计Controller


解决freemaker 前端报错,由于前端代码写的不严谨,运行即会报错:

...
FreeMarker template error:
The following has evaluated to null or missing:
==> user  [in template "include/header.ftl" at line 4, column 14]
...

在Spring MVC的xml配置文件中,freemaker的相关配置中增加内容:

<property name="freemarkerSettings">
    <props>
        <!-- 解决前端报错 -->
        <prop key="classic_compatible">true</prop>
    </props>
</property>

参考:freemarker的classic_compatible设置,解决报空错误


  1. 将web.xml中welcome-file由/index.jsp改成/index;删去index.jsp文件
  2. 将前端代码中引用js、css文件的href、src地址由绝对路径改成相对路径,即去掉路径开头的/
  3. header.ftl中的usertype改写为userType(后端user类的属性名为userType,这样才能找对属性名,从而获取值)
  4. account.ftl中购买价格对应的数据由${x.buyPrice}改为${x.buyPrice}*${x.buyNum}
  5. show.ftl中,购买数量的引用是毫无道理的:<span class="totalNum" id="allNum">${product.buyNum}</span>,改成默认的1;查找usertype改为userType
  6. 修改/webapp/css/style.css中的.v-load-result .load{text-align: center;width:100px;margin-left:-50px;white-space: nowrap;},更改width为200px(避免自定义的返回消息显示不全)
  7. pageShow.js中,将num改为buyNum
  8. settleAccount.js购买成功的跳转页面是./account.html,改为./account
  9. 大作业需求.pdf对于商品 能否重复购买,自相矛盾R3.2 买家对于已经购买的内容...购买按钮不可用...;R4.3 用户已经购买过的内容可以重复购买。
    于是本PO选择实现可以重复购买。既然可以重复购买,那么展示购买时的价格显然不合逻辑(多次购买,每次价格可能变动,如何展示),删除相关代码

  10. 前端需要对 发布/编辑商品 输入的金额做限制(如最多两位小数等,数据库表price的类型为Integer,也意味着限定了定价上限)

    • 根据前端代码,项目默认商品的数量为1时,才能说得通(已购买页面,显示的总消费金额只是 累加 商品的单价,无关数量)

…………

猜你喜欢

转载自blog.csdn.net/weixin_39345384/article/details/80788654