【JavaSpring开源项⽬】新蜂(NeeBee)商城项⽬运⾏、分析、总结
项⽬简介
**项⽬介绍:**newbee-mall 项⽬是⼀套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 前台商城系统包含⾸页门户、商品分类、新品上线、⾸页轮播、商品推荐、商品搜索、商品展⽰、购物车、订单结算、订单流程、个⼈订单管理、会员中⼼、帮助中⼼等模块。 后台管理系统包含数据⾯板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。
经笔者验证,是⼀个值得⼀看的Spring项⽬!
项⽬运⾏
想要运⾏该项⽬需要进⾏相应的配置:
安装Mysql
如果是Mac电脑可以参考:。
安装好Mysql后新建⼀个数据库,并运⾏项⽬⽂件夹下的newbee-mall-schema.sql⽂件,将数据插⼊数据库,可参考:。
配置Mysql
修改application.properties⽂件中的mysql数据库名为⾃⼰的数据库名:
spring.datasource.name=newbee(⾃⼰的数据库名)
spring.datasource.username=root
spring.datasource.password=12345678
解压img,修改路径
将项⽬路径下的upload.zip解压,并记录下路径;
在common/constansts中修改路径:
//public final static String FILE_UPLOAD_DIC = "/opt/image/upload/";//上传⽂件的默认url前缀,根据部署设置⾃⾏修改
public final static String FILE_UPLOAD_DIC = "/Users/xiuyi/Desktop/javaer/newbee-mall/src/main/resources/upload/";
运⾏、访问
运⾏成功之后,打开⽹页,访问:localhost:28089即可。
项⽬中还出现问题可以参考:。
项⽬框架
项⽬整体框架如下:
其中,
common:定义⼀些公⽤字段名;
util:提供⼀些静态帮助⽅法。如邮箱格式验证、MD5码⽣成等;
config:WebMvcConfigure的配置,主要设置以及资源⽂件;
dao:跟数据层的交互接⼝,获取货品信息、⽤户信息、订单信息等;项⽬使⽤的数据库是Mybatis,通过XML配置dao接⼝跟数据库的映射关系;
Interceptor:的具体实现,完成⾝份验证、购物车数量实时更新;
controller:MVC框架中的控制器,根据web端的请求调⽤相应的service层进⾏逻辑处理;
entity:项⽬中的常⽤字段类;
service:服务层,由控制器进⾏调⽤;
功能细分
这个部分对项⽬的各个功能进⾏进⼀步的分析,捋清楚调⽤关系并补充⼀些细节。
其实这是⼀个典型的MVC项⽬,即Model-View-Controller,根据对应的客户端请求,由Spring MVC调度相应的Controller进⾏处
理,Controller调⽤service进⾏业务逻辑处理,⽽后交给Thymeleaf模板引擎对结果Entity进⾏渲染,将处理结果返回给⽤户,从⽽显⽰在浏览器上,整个流程如下:
商城⾸页
⾸页,即访问:⽹页地址/index(或/,或/),获取新蜂商城⾸页。
在IndexController中,当接收到来⾃客户端“/”的请求时,访问数据库去获取分类数据、轮播图、新品、推荐数据,经由模板引擎(⽤的是thymeleaf)⽣成html返回给客户端:
@GetMapping({"/index","/","/index.html"})
public String indexPage(HttpServletRequest request){
List<NewBeeMallIndexCategoryVO> categories = CategoriesForIndex();
if(CollectionUtils.isEmpty(categories)){
return"error/error_5xx";
}
List<NewBeeMallIndexCarouselVO> carousels = CarouselsForIndex(Constants.INDEX_CAROUSEL_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> hotGoodses = ConfigG
oodsesForIndex(IndexConfigTypeEnum.INDEX_GO Type(), Constants.INDEX_GOODS_HOT_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> newGoodses = ConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GO Type(), Constants.INDEX_GOODS_NEW_NUMBER);
List<NewBeeMallIndexConfigGoodsVO> recommendGoodses = ConfigGoodsesForIndex(IndexConfigTypeEnum.IN DEX_Type(), Constants.INDEX_GOODS_RECOMMOND_NUMBER);
request.setAttribute("categories", categories);//分类数据
request.setAttribute("carousels", carousels);//轮播图
request.setAttribute("hotGoodses", hotGoodses);//热销商品
request.setAttribute("newGoodses", newGoodses);//新品
request.setAttribute("recommendGoodses", recommendGoodses);//推荐商品
return"mall/index";
}
注意到上述Controller的返回值是“mail/index”——这是因为Spring Boot集成的Thymeleaf默认配置会⾃动渲染
**classpath:templates/⽹页名。**Thymeleaf的详细教程可参考,。
因此在使⽤Thymeleaf模板引擎时,编写Controller只需要返回指定的⽹页名即可,⽽不⽤想WebMVC⼀样,通过ModelView来进⾏渲染:
@RequestMapping(value ="/greeting")
public ModelAndView test(ModelAndView mv){
mv.setViewName("/greeting");go和java后端开发劣势
mv.addObject("title","欢迎使⽤Thymeleaf!");
return mv;
}
⽤户注册、登录
点击注册按钮,即跳转⾄⽤户登录界⾯:
这两个按钮对应的路径为/rigister和/login,处理请求的是mall/PersonalController,如果是获取登录、注册页⾯,则调⽤相应的模板引擎进⾏渲染:
@GetMapping({"/login","login.html"})
public String loginPage(){
return"mall/login";
}
@GetMapping({"/register","register.html"})
public String registerPage(){
return"mall/register";
}
如果是获取登录、注册的表单,则应该调⽤相应的post⽅法,以登录为例:
@PostMapping("/login")
@ResponseBody
public Result login(@RequestParam("loginName") String loginName,
@RequestParam("verifyCode") String verifyCode,
@RequestParam("password") String password,
HttpSession httpSession){
if(StringUtils.isEmpty(loginName)){
FailResult(ServiceResultEnum.LOGIN_Result());
}
if(StringUtils.isEmpty(password)){
FailResult(ServiceResultEnum.LOGIN_Result());
}
if(StringUtils.isEmpty(verifyCode)){
FailResult(ServiceResultEnum.LOGIN_VERIFY_Result());
}
String kaptchaCode = Attribute(Constants.MALL_VERIFY_CODE_KEY)+"";
if(StringUtils.isEmpty(kaptchaCode)||!LowerCase().equals(kaptchaCode)){
FailResult(ServiceResultEnum.LOGIN_VERIFY_Result());
}
String loginResult = newBeeMallUserService.login(loginName, MD5Util.MD5Encode(password,"UTF-8"), httpSession); //登录成功
if(Result().equals(loginResult)){
/
/删除session中的verifyCode
SuccessResult();
}
//登录失败
FailResult(loginResult);
}
值得注意的是,在处理登录时,会先对⽤户名和密码进⾏基本的格式验证,⽽后交由数据库进⾏验证。
商品详情页
以HUAWEI mate30 Pro为例:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论