基于javaweb+mysql的ssm在线商城购物商城美妆商城(前台、后台)(java+jsp+ssm+javabean+mysql+tomcat)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台:
首页展示商品信息,注册,登录,查询商品,看商品详情,添加商品至购物车,更新、删除购物车中商品信息,下订单、订单查看等操作
后台:登录,商品上架下架、商品信息修改、添加,订单查看,类型管理:商品类型新增删除以及修改查询等
前台:
后台:
技术框架
JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL Bootstrap JavaScript
基于javaweb+mysql的SSM在线商城购物商城美妆商城(前台、后台)(java+jsp+ssm+javabean+mysql+tomcat)
return "redirect:/article_manager/getAll.action";
}
//跳转至修改商品信息页面
@RequestMapping("/showUpdate.action")
public String showUpdate(Model model,Integer id) {
//根据商品id获取商品信息
Article article = articleService.getArticleById(id);
model.addAttribute("article", article);
//获取所有的一级商品类型
List<ArticleType> articleTypes = articleTypeService.findAllFirstArticleType();
model.addAttribute("types", articleTypes);
return "article/updateArticle";
}
//更新商品信息
@RequestMapping("/updateArticle.action")
public String updateArticle(MultipartFile file,String code,Article article,HttpServletRequest request) {
try {
InputStream input = file.getInputStream();
//获取项目部署路径
String realPath = request.getServletContext().getRealPath("/image/article");
//如果上传所指定的目录不存在则创建目录
File f = new File(realPath);
if(!f.exists()) {
f.mkdirs();
}
//获取当前上传的文件的名字 a.jpg
String imageName = file.getOriginalFilename();
if(imageName!=null && !imageName.equals("")) {
@Controller
@RequestMapping("/user_manager")
public class ManagerUserController {
@Autowired
private ManagerUserServiceI userService;
//跳转至登录页面
@RequestMapping("/showLoginPage")
public String showLoginPage() {
return "user/login";
}
//处理登录请求
@RequestMapping("/userLogin")
public String userLogin(User user,Model model,HttpSession session) {
User u = userService.getUserByNameAndPass(user);
if(u == null) {
//账号或密码不正确,给用户提示信息,并跳转至登录页面
model.addAttribute("tip", "您输入的账号或密码不正确请核实!");
return "user/login";
}else if("0".equals(u.getDisabled())){
model.addAttribute("tip", "您尚未激活,请激活后再进行相关操作!");
return "user/login";
}else {
//跳转至首页,并将用户的信息保存至session中
session.setAttribute(Constant.SESSION_USER, u);
return "redirect:/article_manager/getAll.action";
}
}
//用户退出
@RequestMapping("/logout")
public String logout(HttpSession session) {
//将用户的信息从session中清除
try {
int num = 0;
DataJoinUtils dataJoinUtils = new DataJoinUtils();
while (true) {
//查询订单的支付状态
Map<String, String> map = dataJoinUtils.wxOrderQuery(orderNo);
if (map == null) {
tip = "支付发生错误";
break;
}
if (map.get("trade_state").equals("SUCCESS")) {
tip = "ok";
//支付成功,应该修改数据库中订单状态,改成已支付
orderServiceI.updateOrderPayOrderNo(orderNo);
break;
}
Thread.sleep(3000);
num++;
if (num >= 1000) {
tip = "支付超时";
break;
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return tip;
}
//跳转至支付成功页面
@RequestMapping("/paySuccess")
public String paySuccess(double amount, Model model) {
model.addAttribute("amount", amount);
return "paysuccess";
}
//跳转至支付失败页面
@RequestMapping("/payfail")
public String payfail(double amount, Model model) {
try {
//将订单相关信息保存至session中
session.setAttribute("orderInfo", orderInfo);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//跳转至确认订单信息页面
return "checkOrderInfo";
}
//提交订单
@RequestMapping(value = "/orderSubmit.do")
public String orderSubmit(HttpSession session, Model model) {
try {
String orderInfo = (String) session.getAttribute("orderInfo");
System.out.println("orderInfo:" + orderInfo);
//将订单信息保存至数据库
Order order = orderServiceI.orderSubmit(orderInfo);
model.addAttribute("order", order);
String amount = "" + order.getAmount();
model.addAttribute("amount", amount.length() > 5 ? amount.substring(0, 5) : amount);
return "paysuccess";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//展示支付页面
return "pay";
}
//查询当前用户所有的订单信息
@RequestMapping(value = "/showOrder.do")
public String showOrder(Model model) {
try {
//根据当前用户的id查询,该用户所有的订单信息
List<Order> orders = orderServiceI.getOrdersByUserId();
model.addAttribute("orders", orders);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//删除购物车中商品的信息
@RequestMapping("/deleteShopCar.do")
public String deleteShopCar(HttpSession session,@Param("id")int id) {
//删除购物车中商品的购物数量
shopCarService.deleteShopcar(session,id);
//商品加入购物车成功之后,立马展示购物车中的商品信息
return "redirect:/shopCar/showShopCar.do";
}
}
/**
*
*/
@Controller
@RequestMapping("/article")
public class ArticleController {
@Autowired
private ArticleServiceI articleService;
@RequestMapping("/index")
public String articleIndex(Model model,String typeCode,String keyword,PageModel pageModel) {
//获取所有的一级物品类型
List<ArticleType> articleTypes = articleService.findAllFirstArticleType();
model.addAttribute("articleTypes", articleTypes);
model.addAttribute("typeCode", typeCode);
model.addAttribute("keyword", keyword);
System.out.println("typeCode:"+typeCode);
//如果 typecode不为空,则根据typeCode查询二级物品类型
}else {
return true;
}
}
}
/**
*
*/
@Controller
@RequestMapping("/order_manager")
public class ManagerOrderController {
@Autowired
private ManagerOrderServiceI orderService;
//订单分页查询
@RequestMapping("/getAll.action")
public String getAll(PageModel pageModel,Model model) {
List<Order> orders = orderService.getAll(pageModel);
model.addAttribute("orders", orders);
return "order/list";
}
}
return order;
}
/* (non-Javadoc)
* @see com.demo.shop.service.OrderServiceI#getOrdersByUserId()
* 根据当前用户的id查询,该用户所有的订单信息
*/
@Override
public List<Order> getOrdersByUserId() {
// TODO Auto-generated method stub
//获取当前用户的信息
//获取session
HttpSession session = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession();
//从session中获取用户信息
int userId = ((User)session.getAttribute("session_user")).getId();
return orderMapper.getOrdersByUserId(userId);
}
//修改订单状态
@Override
public void updateOrderPayOrderNo(String orderNo) {
// TODO Auto-generated method stub
orderMapper.updateOrderPayOrderNo(orderNo);
}
}
/**
*
*/
model.addAttribute("title", title);
model.addAttribute("typeCode", typeCode);
//获取所有的一级商品类型
List<ArticleType> articleTypes = articleTypeService.findAllFirstArticleType();
model.addAttribute("firstArticleTypes", articleTypes);
return "article/list";
}
//展示商品明细信息
@RequestMapping("/preArticle.action")
public String preArticle(Model model,Integer id) {
//根据商品的id获取商品信息
Article article = articleService.getArticleById(id);
model.addAttribute("article", article);
return "article/preArticle";
}
//商品信息下架
@RequestMapping("/removeArticle.action")
public String removeArticle(Model model,Integer id) {
articleService.removeArticleById(id);
return "redirect:/article_manager/getAll.action";
}
//添加商品
@RequestMapping("/addArticle.action")
public String addArticle(MultipartFile file,String code,Article article,HttpServletRequest request) {
try {
InputStream input = file.getInputStream();
//获取项目部署路径
String realPath = request.getServletContext().getRealPath("/image/article");
//如果上传所指定的目录不存在则创建目录
File f = new File(realPath);
if(!f.exists()) {
f.mkdirs();
}
//从session中获取用户信息
User user = (User)session.getAttribute("session_user");
//获取用户的id
int userId = user.getId();
//根据用户id以及商品id从购物车表中获取相关信息
Shopcar shopCar = shopcarMapper.getShopCarByUserIdAndArticleId(userId,id);
if(shopCar!=null) {
//该商品已经存在于当前用户的购车中,则进行商品数量的叠加
shopcarMapper.updateShopCar(userId,id,number);
}else {
//该商品不存在与当前用户的购物车中
shopcarMapper.addShopCar(userId,id,number);
}
}
/* (non-Javadoc)
* @see com.demo.shop.service.ShopCarServiceI#getAllShopCarByUserId(javax.servlet.http.HttpSession)
*/
@Override
public List<Shopcar> getAllShopCarByUserId(HttpSession session) {
// TODO Auto-generated method stub
//从session中获取用户信息
User user = (User)session.getAttribute("session_user");
//获取用户的id
int userId = user.getId();
//获取用户的购物详情信息
List<Shopcar> shopcars = shopcarMapper.getAllShopCarByUserId(userId);
return shopcars;
}
/* (non-Javadoc)
* //更新购物车中商品的购物数量
*/
@Override
public void updateShopcar(HttpSession session, int id, int number) {
// TODO Auto-generated method stub
//从session中获取用户信息
User user = (User)session.getAttribute("session_user");
//获取用户的id
int userId = user.getId();
shopcarMapper.updateShopcar(userId,id,number);
}
}
//加载添加商品类型页面
@RequestMapping("/showAdd.action")
public String showAdd() {
return "articleType/view";
}
//通过异步请求的方式获取所有一级商品类型
@ResponseBody
@RequestMapping(value = "/loadFirstArticleType.action", produces = {"application/json;charset=utf-8"})
public String loadFirstArticleType() {
List<ArticleType> types = articleTypeService.findAllFirstArticleType();
System.out.println("types:" + JSONArray.fromObject(types).toString());
return JSONArray.fromObject(types).toString();
}
//商品类型的添加或者修改操作
@RequestMapping("/addOrUpdate.action")
public String addOrUpdate(ArticleType type, String parentCode) {
if (type.getCode() != null && !type.getCode().equals("")) {
//进行更新商品类型操作
articleTypeService.updateArticleType(type);
} else {
//进行添加商品类型操作
articleTypeService.saveArticleType(type, parentCode);
}
return "redirect:/articleType_manager/getAll.action";
}
//删除商品类型
@RequestMapping("/deleteType.action")
public String deleteType(@Param("code") String code) {
*
*/
@Controller
@RequestMapping("/user_manager")
public class ManagerUserController {
@Autowired
private ManagerUserServiceI userService;
//跳转至登录页面
@RequestMapping("/showLoginPage")
public String showLoginPage() {
return "user/login";
}
//处理登录请求
@RequestMapping("/userLogin")
public String userLogin(User user,Model model,HttpSession session) {
User u = userService.getUserByNameAndPass(user);
if(u == null) {
//账号或密码不正确,给用户提示信息,并跳转至登录页面
model.addAttribute("tip", "您输入的账号或密码不正确请核实!");
}
//根据商品id获取商品详情信息
@RequestMapping("/detail")
public String articleDetail(Integer id,Model model) {
//根据商品id获取商品信息
Article article = articleService.getArticleById(id);
model.addAttribute("article", article);
// /WEB-INF/jsp/articleDetail.jsp
return "articleDetail";
}
}
/**
*
*/
@Service("userService")
@Transactional
public class UserServiceImpl implements UserServiceI {
@Autowired
private UserMapper userMapper;
/* (non-Javadoc)
* //根据用户输入的账号以及密码获取用户的信息
*/
@Override
public User findUserByNameAndPass(User user) {
e.printStackTrace();
model.addAttribute("message", "注册失败!");
}
//返回注册页面
return "register";
}
}
/**
*
*/
@Controller
@RequestMapping("/user_manager")
public class ManagerUserController {
@Autowired
private ManagerUserServiceI userService;
//跳转至登录页面
@RequestMapping("/showLoginPage")
public String showLoginPage() {
return "user/login";
public class ManagerArticleController {
@Autowired
private ManagerArticleServiceI articleService;
@Autowired
private ManagerArticleTypeServiceI articleTypeService;
//展示首页商品信息
@RequestMapping("/getAll.action")
public String getAllArticles(Model model,String typeCode,String title,PageModel pageModel) {
//根据商品类型以及商品的标题获取商品信息
List<Article> articles = articleService.getAllArticles(typeCode,title,pageModel);
model.addAttribute("articles", articles);
model.addAttribute("pageModel", pageModel);
model.addAttribute("title", title);
model.addAttribute("typeCode", typeCode);
//获取所有的一级商品类型
List<ArticleType> articleTypes = articleTypeService.findAllFirstArticleType();
model.addAttribute("firstArticleTypes", articleTypes);
return "article/list";
}
//展示商品明细信息
@RequestMapping("/preArticle.action")
public String preArticle(Model model,Integer id) {
//根据商品的id获取商品信息
Article article = articleService.getArticleById(id);
model.addAttribute("article", article);
return "article/preArticle";
}
//商品信息下架
@RequestMapping("/removeArticle.action")
public String removeArticle(Model model,Integer id) {
articleService.removeArticleById(id);
return new PasswordAuthentication("luochunlong666@126.com", "luochunlong123");
}
};
//3).获得Session实例
Session mailSession = Session.getInstance(props, auth);
//4).创建SMTPMessage,要提供session
SMTPMessage msg = new SMTPMessage(mailSession);
// 5).设置Message的内容,包括发送者、接收者、消息体
// 设置邮件标题,没有标题的邮件几乎都会被认为是垃圾邮件被系统退回。
msg.setSubject("用户注册激活邮件,请勿回复,按照指引激活");
// 设置消息的HTML格式的内容
msg.setContent("<a href='http://127.0.0.1:8080/"+request.getContextPath()+"/user/active?activeCode="+user.getActive()+"' target='_blank'>恭喜您注册成功,点击该链接进行激活,此邮件无需回复!</a>","text/html;charset=UTF-8");
// 设置发送人
msg.setFrom(new InternetAddress("luochunlong666@126.com"));
// 设置接收者
// 接收者类型由:TO(收件人)、CC(抄送)、BCC(密送)
msg.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
// 发送邮件
Transport.send(msg);
}
/* (non-Javadoc)
* @see com.demo.shop.service.UserServiceI#activeUser(java.lang.String)
* //用户信息激活
*/
@Override
public void activeUser(String activeCode) {
// TODO Auto-generated method stub
userMapper.activeUser(activeCode);
}
/* (non-Javadoc)
* 根据账号获取用户信息
*/
@Override
public String getUserByLoginName(String loginName) {
// TODO Auto-generated method stub
User user = userMapper.getUserByLoginName(loginName);
return user == null ? "not" : "exist";
}
}
orderServiceI.updateOrderPayOrderNo(orderNo);
break;
}
Thread.sleep(3000);
num++;
if (num >= 1000) {
tip = "支付超时";
break;
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return tip;
}
//跳转至支付成功页面
@RequestMapping("/paySuccess")
public String paySuccess(double amount, Model model) {
model.addAttribute("amount", amount);
return "paysuccess";
}
//跳转至支付失败页面
@RequestMapping("/payfail")
public String payfail(double amount, Model model) {
model.addAttribute("amount", amount);
return "payfail";
}
}
/**
*
*/
public class LoginFilter extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//从session中获取用户信息
User user = (User)request.getSession().getAttribute("session_user");
if(user == null) {
request.setAttribute("error_message", "您尚未登录,请登录后再进行相关操作!");
//跳转至登录页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}else {
return true;
}
}
}
/**
*
*/
public interface ShopCarServiceI {
/**
* @param session
* @param id
* @param number
* 将商品信息加入至购物车
*/
void addArticleToShopCar(HttpSession session, int id, int number);
/**
* @param session
* @return
* 展示购物车中的商品信息
*/
List<Shopcar> getAllShopCarByUserId(HttpSession session);
/**
* @param session