基于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)
}
//处理登录请求
@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中清除
session.removeAttribute(Constant.SESSION_USER);
return "user/login";
}
//展示用户注册页面 showRegisterPage
@RequestMapping("/showRegisterPage")
public String showRegisterPage() {
return "user/register";
}
//用户信息注册
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
e.printStackTrace();
}
}
}
/**
*
*/
/**
* *登录拦截器,如果没有登录则直接访问登录页面
*/
//将用户的信息从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) {
// 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:/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) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("message", "注册失败!");
}
//返回注册页面
return "register";
}
}
/**
*
*/
*
*/
@Service("orderService")
@Transactional
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中获取用户信息
/**
* 定义拦截器,用于判断用户是否登录,如果用户已经登录则放行,否则用户未登录则跳转至登录页面
*/
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;
}
}
}
/**
*
*/
props.setProperty("mail.smtp.auth", "true");
//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);
}
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) {
model.addAttribute("amount", amount);
return "payfail";
}
}
/**
*
*/
// 设置消息的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";
}
}
/**
*
*/
/* (non-Javadoc)
* 根据账号获取用户信息
*/
@Override
public String getUserByLoginName(String loginName) {
// TODO Auto-generated method stub
User user = userMapper.getUserByLoginName(loginName);
return user == null ? "not" : "exist";
}
}
/**
*
*/
@Controller
@RequestMapping("/articleType_manager")
public class ManagerArticleTypeController {
@Autowired
private ManagerArticleTypeServiceI articleTypeService;
//获取所有的商品类型信息
@RequestMapping("/getAll.action")
public String getAll(Model model, PageModel pageModel, String message) {
//根据商品类型以及商品的标题获取商品信息
List<ArticleType> articleTypes = articleTypeService.getAllArticleTypes(pageModel);
model.addAttribute("list", articleTypes);
if (message != null && !message.equals("")) {
model.addAttribute("message", URLDecoder.decode(message));
@Controller
@RequestMapping("/article_manager")
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);
@RequestMapping(value = "/checkOrder.do")
public String checkOrder(String orderInfo, HttpSession session) {
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();
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserServiceI userService;
//处理登录请求
@RequestMapping("/userLogin")
public String userLogin(User user, Model model, HttpSession session) {
//根据用户输入的账号以及密码获取用户的信息
User u = userService.findUserByNameAndPass(user);
if (u == null) {
model.addAttribute("error_message", "您输入的账号或密码不正确,请核实!");
//跳转至登录页面 /WEB-INF/jsp/login.jsp
return "login";
} else if (u.getDisabled().equals("0")) {
model.addAttribute("error_message", "您尚未激活,请打开您的邮箱进行激活操作!");
//跳转至登录页面 /WEB-INF/jsp/login.jsp
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) {
user.setActive(activeCode);
userMapper.saveUser(user);
/*******************************邮件发送*********************************/
//1、创建 Properties对象用于封装邮件服务器相关信息
Properties props = new Properties();
// 服务器地址
props.setProperty("mail.smtp.host", "smtp.126.com");
// 服务器需要鉴权
props.setProperty("mail.smtp.auth", "true");
//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);
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) {
// TODO: handle exception
e.printStackTrace();
model.addAttribute("message", "注册失败!");
}
//返回注册页面
return "register";
}
}
/**
*
*/
@Controller
@RequestMapping("/article_manager")
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) {
public class ShopCarController {
@Autowired
private ShopCarServiceI shopCarService;
@RequestMapping("/addToCar.do")
public String addShopCar(HttpSession session,@Param("id")int id,@Param("number")int number) {
shopCarService.addArticleToShopCar(session,id,number);
//商品加入购物车成功之后,立马展示购物车中的商品信息
return "redirect:/shopCar/showShopCar.do";
}
//展示购物车中的商品信息
@RequestMapping("/showShopCar.do")
public String showShopCar(HttpSession session,Model model) {
//根据用户的id获取该用户购物详情
List<Shopcar> shopCars = shopCarService.getAllShopCarByUserId(session);
model.addAttribute("shopCars", shopCars);
//定义总金额
double totalPrice = 0.0;
//遍历集合 计算购物车中商品的总金额
for(Shopcar shopcar : shopCars) {
totalPrice += shopcar.getArticle().getDiscountPrice() * shopcar.getBuynum();
}
model.addAttribute("totalPrice", totalPrice);
//跳转至展示购物车中商品信息的页面
return "shopCar";
}
//更新购物车中商品的信息
@RequestMapping("/updateShopcar.do")
public String updateShopcar(HttpSession session,@Param("id")int id,@Param("number")int number) {
//更新购物车中商品的购物数量
shopCarService.updateShopcar(session,id,number);
//商品加入购物车成功之后,立马展示购物车中的商品信息
return "redirect:/shopCar/showShopCar.do";