基于javaweb的在线购书商城系统(java+jsp+mysql+servlert+ajax)
基于javaweb的在線購(gòu)書(shū)商城系統(tǒng)(java+jsp+mysql+servlert+ajax)
運(yùn)行環(huán)境
Java≥8、MySQL≥5.7、Tomcat≥8
開(kāi)發(fā)工具
eclipse/idea/myeclipse/sts等均可配置運(yùn)行
適用
課程設(shè)計(jì),大作業(yè),畢業(yè)設(shè)計(jì),項(xiàng)目練習(xí),學(xué)習(xí)演示等
功能說(shuō)明
基于javaweb+jsp的在線購(gòu)書(shū)商城系統(tǒng)(java+jsp+mysql+servlert+ajax)
一、項(xiàng)目簡(jiǎn)述
功能:一個(gè)基于JavaWeb的網(wǎng)上書(shū)店的設(shè)計(jì)與實(shí)現(xiàn),歸納 出了幾個(gè)模塊,首先是登錄注冊(cè)模塊,圖書(shū)查找模塊,購(gòu) 物車模塊,訂單模塊,個(gè)人中心模塊,用戶管理模塊,圖 書(shū)管理模塊等。 該項(xiàng)目是javaJeb技術(shù)的實(shí)戰(zhàn)操作,采用了MVC設(shè)計(jì)模 式,包括基本的entity, jscriipt, servlet,以及ajax異步請(qǐng) 求,查詢分頁(yè),持久化層方法的封裝等等,對(duì)javaweb技 術(shù)的鞏固很有幫助,為J2EE的學(xué)習(xí)打下基礎(chǔ),適用于課程 設(shè)計(jì),畢業(yè)設(shè)計(jì)。
二、項(xiàng)目運(yùn)行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。
項(xiàng)目技術(shù): JSP + Entity+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload 等等。
用戶信息控制層:
@Controller
@RequestMapping(“/user”)
public class UserController {
@Autowired
private IUserService userService;
@Autowired
private IMailService mailService;
@Autowired
private IStoreService storeService;
@Value(“${mail.fromMail.addr}”)
private String from;
@Value(“${my.ip}”)
private String ip;
private final String USERNAME_PASSWORD_NOT_MATCH = “用戶名或密碼錯(cuò)誤”;
private final String USERNAME_CANNOT_NULL = “用戶名不能為空”;
@RequestMapping(“/login”)
public String login(@RequestParam(value = “username”, required = false) String username,
@RequestParam(value = “password”, required = false) String password,
HttpServletRequest request, Model model) {
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
return “l(fā)ogin”;
//未認(rèn)證的用戶
Subject userSubject = SecurityUtils.getSubject();
if (!userSubject.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(false);//禁止記住我功能
try {
//登錄成功
userSubject.login(token);
User loginUser = (User) userSubject.getPrincipal();
request.getSession().setAttribute(“l(fā)oginUser”, loginUser);
Store store = storeService.findStoreByUserId(loginUser.getUserId());
request.getSession().setAttribute(“l(fā)oginStore”, store);
SavedRequest savedRequest = WebUtils.getSavedRequest(request);
String url = “/”;
if (savedRequest != null) {
url = savedRequest.getRequestUrl();
if(url.contains(request.getContextPath())){
url = url.replace(request.getContextPath(),“”);
if(StringUtils.isEmpty(url) || url.equals(“/favicon.ico”)){
url = “/”;
return “redirect:” + url;
} catch (UnknownAccountException | IncorrectCredentialsException uae) {
model.addAttribute(“l(fā)oginMsg”, USERNAME_PASSWORD_NOT_MATCH);
return “l(fā)ogin”;
} catch (LockedAccountException lae) {
model.addAttribute(“l(fā)oginMsg”, “賬戶已被凍結(jié)!”);
return “l(fā)ogin”;
} catch (AuthenticationException ae) {
model.addAttribute(“l(fā)oginMsg”, “登錄失敗!”);
return “l(fā)ogin”;
} else {
//用戶已經(jīng)登錄
return “redirect:/index”;
@RequestMapping(“/info”)
public String personInfo(){
return “user_info”;
/* @RequestMapping(“/login1”)
public String login1(@RequestParam(value = “username”, required = false) String username,
@RequestParam(value = “password”, required = false) String password,
Model model, HttpServletRequest request) {
if (StringUtils.isEmpty(username)) {
model.addAttribute(“l(fā)oginMsg”, USERNAME_CANNOT_NULL);
return “l(fā)ogin”;
if (StringUtils.isEmpty(password)) {
model.addAttribute(“l(fā)oginMsg”, “密碼不能為空”);
return “l(fā)ogin”;
BSResult bsResult = userService.login(username, password);
//登錄校驗(yàn)失敗
if (bsResult.getData() == null) {
model.addAttribute(“l(fā)oginMsg”, bsResult.getMessage());
return “l(fā)ogin”;
//登錄校驗(yàn)成功,重定向到首頁(yè)
User user = bsResult.getData();
//置密碼為空
user.setPassword(“”);
request.getSession().setAttribute(“user”, user);
return “redirect:/”;
*/
//shiro框架幫我們注銷
@RequestMapping(“/logout”)
@CacheEvict(cacheNames=“authorizationCache”,allEntries = true)
public String logout() {
SecurityUtils.getSubject().logout();
return “redirect:/page/login”;
/**
-
注冊(cè) 檢驗(yàn)用戶名是否存在
-
@param username
-
@return
*/
@RequestMapping(“/checkUserExist”)
@ResponseBody
public BSResult checkUserExist(String username) {
if (StringUtils.isEmpty(username)) {
return BSResultUtil.build(200, USERNAME_CANNOT_NULL, false);
return userService.checkUserExistByUsername(username);
/**
-
注冊(cè),發(fā)激活郵箱
-
@param user
-
@return
*/
@RequestMapping(“/register”)
public String register(User user, Model model) {
BSResult isExist = checkUserExist(user.getUsername());
//盡管前臺(tái)頁(yè)面已經(jīng)用ajax判斷用戶名是否存在,
// 為了防止用戶不是點(diǎn)擊前臺(tái)按鈕提交表單造成的錯(cuò)誤,后臺(tái)也需要判斷
if ((Boolean) isExist.getData()) {
user.setActive(“1”);
BSResult bsResult = userService.saveUser(user);
//獲得未激活的用戶
User userNotActive = (User) bsResult.getData();
/* try {
mailService.sendHtmlMail(user.getEmail(), “<dd書(shū)城>—用戶激活—”,
“親愛(ài)的” + user.getUsername() +
“,請(qǐng)您點(diǎn)擊此鏈接前往激活”);
} catch (Exception e) {
e.printStackTrace();
model.addAttribute(“registerError”, “發(fā)送郵件異常!請(qǐng)檢查您輸入的郵箱地址是否正確。”);
return “fail”;
}*/
model.addAttribute(“username”, user.getUsername());
return “register_success”;
} else {
//用戶名已經(jīng)存在,不能注冊(cè)
model.addAttribute(“registerError”, isExist.getMessage());
return “register”;
@RequestMapping(“/active”)
public String activeUser(String activeCode, Model model) {
BSResult bsResult = userService.activeUser(activeCode);
if (!StringUtils.isEmpty(bsResult.getData())) {
model.addAttribute(“username”, bsResult.getData());
return “active_success”;
} else {
model.addAttribute(“failMessage”, bsResult.getMessage());
return “fail”;
@RequestMapping(“/update”)
@ResponseBody
public BSResult updateUser(User user, HttpSession session){
User loginUser = (User) session.getAttribute(“l(fā)oginUser”);
loginUser.setNickname(user.getNickname());
loginUser.setLocation(user.getLocation());
loginUser.setDetailAddress(user.getDetailAddress());
loginUser.setGender(user.getGender());
loginUser.setUpdated(new Date());
loginUser.setPhone(user.getPhone());
loginUser.setIdentity(user.getIdentity());
loginUser.setPhone(user.getPhone());
BSResult bsResult = userService.updateUser(loginUser);
session.setAttribute(“l(fā)oginUser”, loginUser);
return bsResult;
@RequestMapping(“/password/{userId}”)
@ResponseBody
public BSResult changePassword(@PathVariable(“userId”) int userId,String oldPassword,String newPassword){
if(StringUtils.isEmpty(oldPassword) || StringUtils.isEmpty(newPassword)){
return BSResultUtil.build(400, “密碼不能為空”);
return userService.compareAndChange(userId,oldPassword,newPassword);
訂單控制層:
@Controller
@RequestMapping(“/order”)
public class OrderController {
@Autowired
private IOrderService orderService;
@Autowired
private ICartService cartService;
@Autowired
private IBookInfoService bookInfoService;
/**
-
填寫訂單信息頁(yè)面
-
@param bookId
-
@param buyNum
-
@param request
-
@return
*/
@GetMapping(“/info”)
public String orderInfo(@RequestParam(required = false, defaultValue = “0”) int bookId,
@RequestParam(required = false, defaultValue = “0”) int buyNum,
HttpServletRequest request) throws BSException {
if (bookId != 0) {
//點(diǎn)了立即購(gòu)買,放到request域中,也session的立即購(gòu)買域中以區(qū)分購(gòu)物車中的書(shū)籍
BookInfo bookInfo = bookInfoService.findById(bookId);
if (bookInfo != null) {
BSResult bsResult = cartService.addToCart(bookInfo, null, buyNum);
request.getSession().setAttribute(“buyNowCart”, bsResult.getData());
request.setAttribute(“cart”, bsResult.getData());
return “order_info”;
} else {
request.setAttribute(“exception”, “不好意思,書(shū)籍庫(kù)存不足或不存在了!”);
return “exception”;
//沒(méi)有點(diǎn)立即購(gòu)買,購(gòu)物車中的總金額大于0才讓填寫訂單信息
Cart cart = (Cart) request.getSession().getAttribute(“cart”);
if (cart != null && cart.getTotal() > 0) {
return “order_info”;
} else {
return “cart”;
@GetMapping(“/payPage/{orderId}”)
public String toPay(@PathVariable(“orderId”) String orderId, Model model) {
BSResult bsResult = orderService.findOrderById(orderId);
if (bsResult.getCode() == 200) {
model.addAttribute(“order”, bsResult.getData());
return “payment”;
return “exception”;
@RequestMapping(“/deletion/{orderId}”)
public String deletion(@PathVariable(“orderId”) String orderId) {
BSResult bsResult = orderService.deleteOrder(orderId);
if (bsResult.getCode() == 200) {
return “redirect:/order/list”;
return “exception”;
/**
-
訂單列表
-
@return
*/
@GetMapping(“/list”)
public String orderList(HttpServletRequest request) {
User loginUser = (User) request.getSession().getAttribute(“l(fā)oginUser”);
List orderCustoms = orderService.findOrdersByUserId(loginUser.getUserId());
request.setAttribute(“orderCustoms”, orderCustoms);
return “order_list”;
/**
-
創(chuàng)建訂單
-
@return
*/
@PostMapping(“/creation”)
public String createOrder(User userDTO, String express, int payMethod, HttpServletRequest request) {
//立即購(gòu)買,優(yōu)先創(chuàng)建訂單
Cart buyNowCart = (Cart) request.getSession().getAttribute(“buyNowCart”);
User loginUser = (User) request.getSession().getAttribute(“l(fā)oginUser”);
userDTO.setUserId(loginUser.getUserId());
userDTO.setZipCode(loginUser.getZipCode());
if (buyNowCart != null) {
BSResult bsResult = orderService.createOrder(buyNowCart, userDTO, express, payMethod);
if (bsResult.getCode() == 200) {
request.setAttribute(“order”, bsResult.getData());
cartService.clearCart(request, “buyNowCart”);
return “payment”;
} else {
request.setAttribute(“exception”, bsResult.getMessage());
return “exception”;
//普通購(gòu)物車
Cart cart = (Cart) request.getSession().getAttribute(“cart”);
if (cart != null) {
BSResult bsResult = orderService.createOrder(cart, userDTO, express, payMethod);
if (bsResult.getCode() == 200) {
request.setAttribute(“order”, bsResult.getData());
cartService.clearCart(request, “cart”);
return “payment”;
} else {
request.setAttribute(“exception”, bsResult.getMessage());
return “exception”;
} else {
request.setAttribute(“exception”, “購(gòu)物車為空!”);
return “exception”;
/**
-
確認(rèn)收貨
-
@param orderId
-
@return
*/
@RequestMapping(“/confirm/{orderId}”)
public String confirmReceiving(@PathVariable(“orderId”) String orderId, Model model) {
BSResult bsResult = orderService.confirmReceiving(orderId);
if (bsResult.getCode() == 200) {
return “redirect:/order/list”;
} else {
model.addAttribute(“exception”, bsResult.getMessage());
return “exception”;
書(shū)籍信息控制層:
@Controller
@RequestMapping(“/book”)
public class BookInfoController {
@Autowired
private IBookInfoService bookInfoService;
@Autowired
private BookDescMapper bookDescMapper;
/**
-
查詢某一本書(shū)籍詳情
-
@param bookId
-
@param model
-
@return
*/
@RequestMapping(“/info/{bookId}”)
public String bookInfo(@PathVariable(“bookId”) Integer bookId, Model model) throws BSException {
//查詢書(shū)籍
BookInfo bookInfo = bookInfoService.findById(bookId);
//查詢書(shū)籍推薦列表
List recommendBookList = bookInfoService.findBookListByCateId(bookInfo.getBookCategoryId(), 1, 5);
//查詢書(shū)籍詳情
BookDesc bookDesc = bookDescMapper.selectByPrimaryKey(bookId);
//增加訪問(wèn)量
bookInfoService.addLookMount(bookInfo);
Collections.shuffle(recommendBookList);
model.addAttribute(“bookInfo”, bookInfo);
model.addAttribute(“bookDesc”, bookDesc);
model.addAttribute(“recommendBookList”, recommendBookList);
return “book_info”;
/**
-
通過(guò)關(guān)鍵字和書(shū)籍分類搜索書(shū)籍列表
-
@param keywords
-
@return
*/
@RequestMapping(“/list”)
public String bookSearchList(@RequestParam(defaultValue = “”, required = false) String keywords,
@RequestParam(defaultValue = “0”, required = false) int cateId,//分類Id,默認(rèn)為0,即不按照分類Id查
@RequestParam(defaultValue = “1”, required = false) int page,
@RequestParam(defaultValue = “6”, required = false) int pageSize,
Model model) {
keywords = keywords.trim();
PageInfo bookPageInfo = bookInfoService.findBookListByCondition(keywords, cateId, page, pageSize,0);//storeId為0,不按照商店Id查詢
model.addAttribute(“bookPageInfo”, bookPageInfo);
model.addAttribute(“keywords”, keywords);
model.addAttribute(“cateId”, cateId);
return “book_list”;
總結(jié)
以上是生活随笔為你收集整理的基于javaweb的在线购书商城系统(java+jsp+mysql+servlert+ajax)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: h5 手风琴效果_小程序-实现折叠面板-
- 下一篇: linux cmake编译源码,linu