基于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)
* @param loginName
* @param password
* @return
* 根据账号以及密码获取用户信息
*/
User getUserByNameAndPass(User user);
/**
* @param user
* //用户信息注册
*/
void saveUser(User user,HttpServletRequest request) throws Exception;
/**
* @param activeCode
* //用户信息激活
*/
void activeUser(String activeCode);
/**
* @param loginName
* @return
* 根据账号获取用户信息
*/
String getUserByLoginName(String loginName);
}
/**
*
*/
public interface UserServiceI {
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中清除
session.removeAttribute(Constant.SESSION_USER);
return "user/login";
}
//展示用户注册页面 showRegisterPage
@RequestMapping("/showRegisterPage")
public String showRegisterPage() {
return "user/register";
}
//用户信息注册
@RequestMapping("/userRegister")
public String userRegister(User user,Model model,HttpServletRequest request) {
try {
userService.saveUser(user,request);
return "login";
} else {
//将用户信息存放在session中,直接跳转至首页
session.setAttribute("session_user", u);
return "redirect:/article/index";
}
}
//用户退出
@RequestMapping("/logout")
public String logout(HttpSession session) {
//将用户信息从session中清除
session.removeAttribute("session_user");
//用户退出之后重定向至 首页
return "redirect:/article/index";
}
//异步校验账号是否存在
@ResponseBody
@RequestMapping(value = "/validLoginName", produces = {"application/text;charset=utf-8"})
public String validLoginName(String loginName) {
//校验账号是否存在
String result = userService.validLoginName(loginName);
return result;
}
//用户注册
@RequestMapping(value = "/userRegister")
public String userRegister(Model model, HttpServletRequest request, User user) {
try {
userService.saveUser(user, request);
model.addAttribute("message", "注册成功!");
} catch (Exception e) {
public class OrderServiceImpl implements OrderServiceI {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
/* (non-Javadoc)
* 提交订单
* #1_2_216.0#5_1_158.4 == > 1_2_216.0#5_1_158.4
*/
@Override
public Order orderSubmit(String orderInfo) {
// TODO Auto-generated method stub
//创建订单对象
Order order = new Order();
try {
String[] orderInfos = orderInfo.substring(1).split("#");
//指定下单时间
order.setCreateDate(new Date());
//获取session
HttpSession session = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession();
//从session中获取用户信息
int userId = ((User)session.getAttribute("session_user")).getId();
//指定订单属于哪一个用户
order.setUserId(userId);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//设置订单编号
order.setOrderCode("PO-"+sdf.format(new Date())+userId);
//定义订单总金额
double totalPrice = 0.0;
//创建集合用于封装订单详情信息
List<OrderItem> items = new ArrayList<>();
for(String info: orderInfos) {
String[] infos =info.split("_");
//获取商品id
int articleId = Integer.valueOf(infos[0]);
//购买数量
int buyNum = Integer.valueOf(infos[1]);
OrderItem item = new OrderItem();
item.setArticleId(articleId);
item.setOrderNum(buyNum);
order.setAmount(totalPrice);
//保存订单信息 ,保存完订单信息之后,需要获取订单的id,因为需要将订单的id存放在订单详情中
orderMapper.saveOrder(order);
//获取订单主键的值
int orderId = order.getId();
for(OrderItem item : items) {
item.setOrderId(orderId);
//保存订单明细
orderItemMapper.saveItem(item);
}
/*****************************生成支付二维码*******************************/
DataJoinUtils dataJoinUtils = new DataJoinUtils();
Map<String, String> result = dataJoinUtils.wxPay("http://localhost:8080/ecShop/article/index", order.getOrderCode(), "1", "127.0.0.1", "化妆品");
//将二维码地址封装至order对象中
order.setImgUrl(result.get("code_url"));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
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) {
}
//添加商品
@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();
}
//获取当前上传的文件的名字 a.jpg
String imageName = file.getOriginalFilename();
//重新生成新的文件名
String newFileName = UUID.randomUUID().toString() + imageName.substring(imageName.lastIndexOf("."), imageName.length());
System.out.println("文件路径:"+(realPath+File.separator+newFileName));
//构建输出流
OutputStream out = new FileOutputStream(realPath+File.separator+newFileName);
byte[] data = new byte[1024];
int len = 0;
while((len = input.read(data)) != -1) {
out.write(data, 0, len);
out.flush();
}
out.close();
input.close();
//指定商品类型
article.setTypeCode(code);
//2、创建Authenticator的实例,实现账户、密码的鉴权。
Authenticator auth = new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication()
{
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)
* 根据账号获取用户信息
*/
//从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);
//校验账号是否存在
String result = userService.validLoginName(loginName);
return result;
}
//用户注册
@RequestMapping(value = "/userRegister")
public String userRegister(Model model, HttpServletRequest request, User user) {
try {
userService.saveUser(user, request);
model.addAttribute("message", "注册成功!");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("message", "注册失败!");
}
//返回注册页面
return "register";
}
}
/**
*
*/
@Controller
@RequestMapping("/user_manager")
public class ManagerUserController {
@Autowired
@Transactional
public class ShopCarServiceImpl implements ShopCarServiceI {
@Autowired
private ShopcarMapper shopcarMapper;
/* (non-Javadoc)
* 将商品信息加入至购物车
*/
@Override
public void addArticleToShopCar(HttpSession session, int id, int number) {
// TODO Auto-generated method stub
//从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();
out.flush();
}
out.close();
input.close();
//指定商品类型
article.setTypeCode(code);
article.setImage(newFileName);
//保存商品信息
articleService.saveArticle(article);
request.setAttribute("tip", "商品添加成功!");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
request.setAttribute("tip", "商品添加失败:"+e.getMessage());
}
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 {
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中清除
session.removeAttribute(Constant.SESSION_USER);
return "user/login";
}
//展示用户注册页面 showRegisterPage
@RequestMapping("/showRegisterPage")
public String showRegisterPage() {
return "user/register";
}
//用户信息注册
@RequestMapping("/userRegister")
public String userRegister(User user,Model model,HttpServletRequest request) {
try {
userService.saveUser(user,request);
model.addAttribute("tip", "注册成功!");
} catch (Exception e) {
public String showRegisterPage() {
return "user/register";
}
//用户信息注册
@RequestMapping("/userRegister")
public String userRegister(User user,Model model,HttpServletRequest request) {
try {
userService.saveUser(user,request);
model.addAttribute("tip", "注册成功!");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("tip", "注册失败:"+e.getMessage());
}
return "user/login";
}
//异步校验账号是否存在
@ResponseBody
@RequestMapping("/validName")
public String validName(String loginName) {
String tip = userService.getUserByLoginName(loginName);
return tip;
}
}
/**
*
*/
}
return "redirect:/articleType_manager/getAll.action";
}
//删除商品类型
@RequestMapping("/deleteType.action")
public String deleteType(@Param("code") String code) {
String message = articleTypeService.deleteType(code);
return "redirect:/articleType_manager/getAll.action?message=delete success";
}
}
/**
*
*/
@Service("shopCarServiceI")
@Transactional
public class ShopCarServiceImpl implements ShopCarServiceI {
@Autowired
private ShopcarMapper shopcarMapper;
/* (non-Javadoc)
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
* @param id
* @param number
* 更新购物车中商品的购物数量
*/
@Service(value="muserService")
@Transactional
public class ManagerUserServicempl implements ManagerUserServiceI {
@Autowired
private ManagerUserMapper userMapper;
/* (non-Javadoc)
* 根据账号以及密码获取用户信息
*/
@Override
public User getUserByNameAndPass(User user) {
// TODO Auto-generated method stub
return userMapper.getUserByNameAndPass(user);
}
/* (non-Javadoc)
* //用户信息注册
*/
@Override
public void saveUser(User user,HttpServletRequest request) throws Exception {
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";
}
@Service("userService")
@Transactional
public class UserServiceImpl implements UserServiceI {
@Autowired
private UserMapper userMapper;
/* (non-Javadoc)
* //根据用户输入的账号以及密码获取用户的信息
*/
@Override
public User findUserByNameAndPass(User user) {
// TODO Auto-generated method stub
User u = userMapper.findUserByNameAndPass(user);
return u;
}
/* (non-Javadoc)
* //异步校验账号是否存在
*/
@Override
public String validLoginName(String loginName) {
// TODO Auto-generated method stub
User user = userMapper.validLoginName(loginName);
if (user != null) {
return "您输入的账号已经存在!";
}
return "";
}
/* (non-Javadoc)
* @see com.demo.shop.service.UserServiceI#saveUser(com.demo.shop.bean.User)
* //用户注册
*/
@Override
public void saveUser(User user, HttpServletRequest request) {
// TODO Auto-generated method stub
try {
user.setCreateDate(new Date());
user.setDisabled("1");
userMapper.saveUser(user);
} catch (Exception e) {
// TODO: handle exception