日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

基于javaweb的在线购书商城系统(java+jsp+mysql+servlert+ajax)

發(fā)布時(shí)間:2023/12/10 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于javaweb的在线购书商城系统(java+jsp+mysql+servlert+ajax) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。