当前位置: 首页 > 编程日记 > 正文

Java项目:嘟嘟二手书商城系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)

源码获取:博客首页 "资源" 里下载!

一、项目简述


功能:
主页显示商品; 所有二手书商品展示,可进行商品搜索; 点击商品进入商品详情页,具有立即购买和加入购物车功能,可增减购买商品数量亦可手动输入,热销商品展示。 立即购买进入确认订单页面,可选择已经添加的地址,亦可新增地址。 可选择购买哪些商品,可删除不需要的商品。 点击结算进入确认订单页面,确认后提交订单。后台管理:(修改密码等),商品管理(商品批量添加、上下架等),订单管理。

二、项目运行


环境配置:

Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)

项目技术:

JSP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ JavaScript + JQuery + Ajax + maven等等

商品管理控制层:

@Controller
public class GoodController {private final GoodService goodService;private final TypeService typeService;private final ReviewService reviewService;private final UserService userService;private final ImageService imageService;private final CollectService collectService;private static String message = "";@Autowiredpublic GoodController(GoodService goodService, TypeService typeService,ReviewService reviewService, UserService userService,ImageService imageService, CollectService collectService) {this.goodService = goodService;this.typeService = typeService;this.reviewService = reviewService;this.userService = userService;this.imageService = imageService;this.collectService = collectService;}@RequestMapping(value = "/", method = RequestMethod.GET)public String getHomeGoods(ModelMap model,@RequestParam(required = false, defaultValue = "") String searchText,@RequestParam(required = false) Integer secondTypeId,@RequestParam(required = false, defaultValue = "0") int offset,@RequestParam(required = false, defaultValue = "40") int limit) {List<Good> goods = goodService.getGoodsBySearchAndType(searchText,secondTypeId, offset, limit);double goodsNum = goodService.getGoodsBySearchAndTypeCount(searchText,secondTypeId);List<FirstType> firstTypes = typeService.getAllFirstType();for (FirstType firstType : firstTypes) {firstType.setSecondType(typeService.getSecondTypeByFirstTypeId(firstType.getId()));}model.addAttribute("firstTypes", firstTypes);model.addAttribute("goods", goods);model.addAttribute("pages", Math.ceil(goodsNum / limit));model.addAttribute("goodsNum", goodsNum);model.addAttribute("offset", offset);model.addAttribute("limit", limit);return "home/homeGoods";}@RequestMapping(value = "/goods/goodInfo", method = RequestMethod.GET)public String getGoodInfo(ModelMap model, HttpSession httpSession,@RequestParam(required = false) Integer goodId) {Good goodInfo = goodService.getGoodById(goodId);if (goodInfo == null) {return "goods/error";}Integer collect = 1;User user = (User) httpSession.getAttribute("user");if (user == null) {collect = 0;} else {if (collectService.getCollect(goodId, user.getId())) {collect = 2;}}List<Image> images = imageService.getImageByGoodId(goodId);User goodUser = userService.getUserById(goodInfo.getUserId());goodInfo.setGoodUser(userService.getUserById(goodInfo.getUserId()));goodInfo.setGoodSecondType(typeService.getSecondTypeById(goodInfo.getSecondTypeId()));List<Review> reviews = reviewService.gerReviewByGoodId(goodId);for (Review review : reviews) {review.setReplys(reviewService.gerReplyByReviewId(review.getId()));}List<Good> goods = goodService.getRECGoods(goodInfo.getSecondTypeId(),goodInfo.getId());model.addAttribute("message", message);model.addAttribute("reviews", reviews);model.addAttribute("goodInfo", goodInfo);model.addAttribute("images", images);model.addAttribute("goodUser", goodUser);model.addAttribute("goods", goods);model.addAttribute("collect", collect);message = "";return "goods/goodInfo";}@RequestMapping(value = "/goods/goodInfo", method = RequestMethod.POST)public String putReview(@RequestParam(value = "goodId", required = false) Integer goodId,@RequestParam(value = "reviewId", required = false) Integer reviewId,@RequestParam(value = "fromUserId", required = false) Integer fromUserId,@RequestParam(value = "toUserId", required = false) Integer toUserId,@RequestParam(value = "fromUser", required = false) String fromUser,@RequestParam(value = "toUser", required = false) String toUser,@RequestParam(value = "replyText", required = false, defaultValue = "") String replyText,@RequestParam(value = "reviewText", required = false, defaultValue = "") String reviewText) {if (reviewText.equals("")) {if (replyText.equals("")) {message = "内容不能为空!";return "redirect:/goods/goodInfo?goodId=" + goodId;} else {Reply reply = new Reply();reply.setReviewId(reviewId);reply.setFromUser(fromUser);reply.setFromUserId(fromUserId);reply.setToUser(toUser);reply.setToUserId(toUserId);reply.setText(replyText);if (reviewService.insertReply(reply) == 1) {message = "回复成功!";return "redirect:/goods/goodInfo?goodId=" + goodId;} else {message = "回复失败!";return "redirect:/goods/goodInfo?goodId=" + goodId;}}} else {Review review = new Review();review.setGoodId(goodId);review.setFromUser(fromUser);review.setFromUserId(fromUserId);review.setToUserId(toUserId);review.setText(reviewText);if (reviewService.insertReview(review) == 1) {message = "评论成功!";return "redirect:/goods/goodInfo?goodId=" + goodId;} else {message = "评论失败!";return "redirect:/goods/goodInfo?goodId=" + goodId;}}}@RequestMapping(value = "/goods/publishGood", method = RequestMethod.GET)public String getPublishGood(ModelMap model, HttpSession session) {User user = (User) session.getAttribute("user");if (user == null) {return "redirect:/";}Good good = new Good();List<FirstType> firstTypes = typeService.getAllFirstType();List<Good> goods = goodService.getAllGoods(0, 5);model.addAttribute("goods", goods);model.addAttribute("good", good);model.addAttribute("firstTypes", firstTypes);return "goods/publishGood";}@RequestMapping(value = "/goods/publishGood", method = RequestMethod.POST)public String getGoodId(ModelMap model, HttpSession session,@Valid Good good) {List<FirstType> firstTypes = typeService.getAllFirstType();User user = (User) session.getAttribute("user");List<Good> goods = goodService.getAllGoods(0, 5);good.setUserId(user.getId());good.setPhotoUrl("/statics/image/goods/default/nophoto.png");if (goodService.insertGood(good) != 1) {System.out.println("插入物品失败!");}model.addAttribute("goods", goods);model.addAttribute("good", good);model.addAttribute("firstTypes", firstTypes);return "goods/publishGood";}@RequestMapping(value = "/goods/publishGood/uploadImage", method = RequestMethod.POST)public String uploadImage(HttpSession session,@RequestParam(value = "goodId", required = false) Integer goodId,@RequestParam(value = "mainFile", required = false) MultipartFile mainFile,@RequestParam(value = "file", required = false) MultipartFile[] file)throws IOException {User user = (User) session.getAttribute("user");FileCheck fileCheck = new FileCheck();RandomString randomString = new RandomString();String filePath = "/statics/image/goods/" + user.getId() + "/" + goodId;String pathRoot = fileCheck.checkGoodFolderExist(filePath);String name;if (!mainFile.isEmpty()) {String fileName = goodId + randomString.getRandomString(10);String contentType = mainFile.getContentType();String imageName = contentType.substring(contentType.indexOf("/") + 1);name = fileName + "." + imageName;mainFile.transferTo(new File(pathRoot + name));String photoUrl = filePath + "/" + name;goodService.updateGoodPhotoUrl(photoUrl, goodId);}for (MultipartFile mf : file) {if (!mf.isEmpty()) {// 生成uuid作为文件名称String fileName = goodId + randomString.getRandomString(10);// 获得文件类型(可以判断如果不是图片,禁止上传)String contentType = mf.getContentType();// 获得文件后缀名称String imageName = contentType.substring(contentType.indexOf("/") + 1);name = fileName + "." + imageName;System.out.println("name:" + name);mf.transferTo(new File(pathRoot + name));Image image = new Image();image.setGoodId(goodId);image.setName(name);image.setUrl(filePath + "/" + name);imageService.insertImage(image);} else {System.out.println("文件为空!");}}return "redirect:/goods/goodInfo?goodId=" + goodId;}@RequestMapping(value = "/goods/userGoods", method = RequestMethod.GET)public String getUserGoods(ModelMap model,@RequestParam(value = "userId", required = false) Integer userId) {User user = userService.getUserById(userId);List<Good> userGoods = goodService.getGoodStatusByUserId(userId);List<Good> goods = goodService.getAllGoods(0, 4);model.addAttribute("user", user);model.addAttribute("userGoods", userGoods);model.addAttribute("goods", goods);return "goods/userGood";}@RequestMapping(value = "/goods/userGoodEdit", method = RequestMethod.GET)public String getUserGoodEdit(ModelMap model,@RequestParam(value = "goodId", required = false) Integer goodId,HttpSession session) {User user = (User) session.getAttribute("user");if (user == null) {return "redirect:/";}Good good = goodService.getGoodById(goodId);List<FirstType> firstTypes = typeService.getAllFirstType();List<Good> goods = goodService.getAllGoods(0, 5);List<Image> goodImages = imageService.getImageByGoodId(goodId);model.addAttribute("goods", goods);model.addAttribute("good", good);model.addAttribute("goodImages", goodImages);model.addAttribute("firstTypes", firstTypes);return "goods/userGoodEdit";}@RequestMapping(value = "/goods/userGoodEdit", method = RequestMethod.POST)public String postGoodEdit(ModelMap model, HttpSession session,@Valid Good good) {List<FirstType> firstTypes = typeService.getAllFirstType();User user = (User) session.getAttribute("user");if (user == null) {return "redirect:/";}List<Good> goods = goodService.getAllGoods(0, 5);if (!(goodService.updateGood(good) > 0)) {System.out.println("修改物品失败!");}List<Image> goodImages = imageService.getImageByGoodId(good.getId());model.addAttribute("goods", goods);model.addAttribute("good", good);model.addAttribute("goodImages", goodImages);model.addAttribute("firstTypes", firstTypes);return "goods/userGoodEdit";}@RequestMapping(value = "/goods/userGoodEdit/updateImage", method = RequestMethod.POST)public String updateImage(HttpSession session,@RequestParam(value = "goodId", required = false) Integer goodId,@RequestParam(value = "mainFile", required = false) MultipartFile mainFile,@RequestParam(value = "file", required = false) MultipartFile[] file)throws IOException {User user = (User) session.getAttribute("user");FileCheck fileCheck = new FileCheck();imageService.deleteImage(goodId);RandomString randomString = new RandomString();String filePath = "/statics/image/goods/" + user.getId() + "/" + goodId;String pathRoot = fileCheck.checkGoodFolderExist(filePath);String name;if (!mainFile.isEmpty()) {String contentType = mainFile.getContentType();String fileName = goodId + randomString.getRandomString(10);String imageName = contentType.substring(contentType.indexOf("/") + 1);name = fileName + "." + imageName;mainFile.transferTo(new File(pathRoot + name));String photoUrl = filePath + "/" + name;goodService.updateGoodPhotoUrl(photoUrl, goodId);}for (MultipartFile mf : file) {if (!mf.isEmpty()) {String contentType = mf.getContentType();String fileName = goodId + randomString.getRandomString(10);String imageName = contentType.substring(contentType.indexOf("/") + 1);name = fileName + "." + imageName;System.out.println("name:" + name);mf.transferTo(new File(pathRoot + name));Image image = new Image();image.setGoodId(goodId);image.setName(name);image.setUrl(filePath + "/" + name);imageService.insertImage(image);}}return "redirect:/goods/goodInfo?goodId=" + goodId;}@RequestMapping(value = "/goods/userGoodEdit/delete/{goodId}", method = RequestMethod.GET)public ResponseEntity deleteGood(@PathVariable Integer goodId) {Boolean success;success = goodService.deleteGood(goodId) > 0;return ResponseEntity.ok(success);}@RequestMapping(value = "/goods/userGoodEdit/updateGoodStatus/{goodId}", method = RequestMethod.GET)public ResponseEntity updateGoodStatus(@PathVariable Integer goodId) {Boolean success;success = goodService.updateGoodStatusId(0, goodId) > 0;return ResponseEntity.ok(success);}@RequestMapping(value = "/admin/goods/allGoods", method = RequestMethod.GET)public ResponseEntity adminGetAllGoods() {List<Good> goodList = goodService.getAllGoodList();for (Good good : goodList) {good.setGoodUser(userService.getUserById(good.getUserId()));good.setGoodSecondType(typeService.getSecondTypeById(good.getSecondTypeId()));}return ResponseEntity.ok(goodList);}
}

订单管理控制层:

@Controller
public class OrderController {private final GoodService goodService;private final OrderService orderService;@Autowiredpublic OrderController(GoodService goodService, OrderService orderService) {this.goodService = goodService;this.orderService = orderService;}@RequestMapping(value = "/user/orderInfo", method = RequestMethod.GET)public String getOrderInfo(ModelMap model,@RequestParam(value = "orderId", required = false) Integer orderId,HttpSession session) {User sessionUser = (User) session.getAttribute("user");if (sessionUser == null) {return "redirect:/";}Order orderInfo = orderService.getOrderById(orderId);List<Order> orders = orderService.getOtherOrderByCustomerId(sessionUser.getId(), orderId);model.addAttribute("orderInfo", orderInfo);model.addAttribute("orders", orders);return "user/orderInfo";}@RequestMapping(value = "/user/sellerInfo", method = RequestMethod.GET)public String getSellerInfo(ModelMap model,@RequestParam(value = "orderId", required = false) Integer orderId,HttpSession session) {User sessionUser = (User) session.getAttribute("user");if (sessionUser == null) {return "redirect:/";}Order orderInfo = orderService.getOrderById(orderId);List<Order> orders = orderService.getOtherOrderBySellerId(sessionUser.getId(), orderId);model.addAttribute("orderInfo", orderInfo);model.addAttribute("orders", orders);System.out.println("sellerInfo.size:" + orders.size());return "user/sellerInfo";}@RequestMapping(value = "/user/order/delete/{orderId}", method = RequestMethod.GET)public ResponseEntity deleteOrderById(@PathVariable Integer orderId) {Boolean success;success = orderService.deleteOrderById(orderId) > 0;return ResponseEntity.ok(success);}@RequestMapping(value = "/user/sellerOrder/delete/{orderId}&{goodId}", method = RequestMethod.GET)public ResponseEntity deleteSellerOrderById(@PathVariable Integer orderId,@PathVariable Integer goodId) {Boolean success;success = goodService.updateGoodStatusId(1, goodId) > 0;if (success) {success = orderService.deleteOrderById(orderId) > 0;}return ResponseEntity.ok(success);}@RequestMapping(value = "/user/order/update/status/{orderId}&{statusId}", method = RequestMethod.GET)public ResponseEntity updateOrderStatus(@PathVariable Integer orderId,@PathVariable Integer statusId) {Boolean success = orderService.updateStatus(statusId, orderId) > 0;if (success) {Order order = orderService.getOrderById(orderId);return ResponseEntity.ok(order);}return ResponseEntity.ok(success);}@RequestMapping(value = "/user/order/create", method = RequestMethod.POST)public ResponseEntity createOrder(@RequestBody Order order) {Boolean success = orderService.insertOrder(order) > 0;if (success) {success = goodService.updateGoodStatusId(0, order.getGoodId()) > 0;if (success) {return ResponseEntity.ok(order.getId());} else {orderService.deleteOrderById(order.getId());return ResponseEntity.ok(success);}}return ResponseEntity.ok(success);}@RequestMapping(value = "/user/order/allOrder", method = RequestMethod.GET)public ResponseEntity getAllOrders() {List<Order> orderList = orderService.getOrderList();return ResponseEntity.ok(orderList);}
}

用户管理控制层:

@Controller
@RequestMapping(value = "user")
public class UserController {private final GoodService goodService;private final OrderService orderService;private final ReviewService reviewService;private final UserService userService;private final CollectService collectService;@Autowiredpublic UserController(GoodService goodService, OrderService orderService,ReviewService reviewService, UserService userService,CollectService collectService) {this.goodService = goodService;this.orderService = orderService;this.reviewService = reviewService;this.userService = userService;this.collectService = collectService;}@RequestMapping(value = "userProfile", method = RequestMethod.GET)public String getMyProfile(ModelMap model, HttpSession session) {User user = (User) session.getAttribute("user");if (user == null) {return "redirect:/";}List<Collect> collects = collectService.getCollectByUserId(user.getId());for (Collect collect : collects) {collect.setGood(goodService.getGoodById(collect.getGoodId()));}List<Good> goods = goodService.getGoodByUserId(user.getId());List<Order> orders = orderService.getOrderByCustomerId(user.getId());List<Review> reviews = reviewService.gerReviewByToUserId(user.getId());List<Reply> replies = reviewService.gerReplyByToUserId(user.getId());List<Order> sellGoods = orderService.getOrderBySellerId(user.getId());model.addAttribute("collects", collects);model.addAttribute("goods", goods);model.addAttribute("orders", orders);model.addAttribute("reviews", reviews);model.addAttribute("replies", replies);model.addAttribute("sellGoods", sellGoods);return "user/userProfile";}@RequestMapping(value = "/review", method = RequestMethod.GET)public String getReviewInfo(@RequestParam(required = false) Integer goodId,@RequestParam(required = false) Integer reviewId) {System.out.println("reviewId" + reviewId);if (reviewId != null) {System.out.println("reviewId" + reviewId);if (reviewService.updateReviewStatus(1, reviewId) == 1) {return "redirect:/goods/goodInfo?goodId=" + goodId;}}return "redirect:/user/userProfile";}@RequestMapping(value = "/reply", method = RequestMethod.GET)public String getReplyInfo(@RequestParam(required = false) Integer reviewId,@RequestParam(required = false) Integer replyId) {if (replyId != null) {if (reviewService.updateReplyStatus(1, replyId) == 1) {Integer goodId = reviewService.getGoodIdByReviewId(reviewId);return "redirect:/goods/goodInfo?goodId=" + goodId;}}return "redirect:/user/userProfile";}@RequestMapping(value = "/userEdit", method = RequestMethod.GET)public String getUserEdit(ModelMap model,@RequestParam(value = "userId", required = false) Integer userId,HttpSession session) {User sessionUser = (User) session.getAttribute("user");if (sessionUser == null) {return "redirect:/";}User user = userService.getUserById(userId);List<Order> sellGoods = orderService.getOrderBySellerId(user.getId());List<Review> reviews = reviewService.gerReviewByToUserId(user.getId());List<Reply> replies = reviewService.gerReplyByToUserId(user.getId());model.addAttribute("user", user);model.addAttribute("sellGoods", sellGoods);model.addAttribute("reviews", reviews);model.addAttribute("replies", replies);return "user/userEdit";}@RequestMapping(value = "/userEdit", method = RequestMethod.POST)public String postUserEdit(ModelMap model, @Valid User user,HttpSession session,@RequestParam(value = "photo", required = false) MultipartFile photo)throws IOException {String status;Boolean insertSuccess;User sessionUser = (User) session.getAttribute("user");user.setId(sessionUser.getId());InfoCheck infoCheck = new InfoCheck();if (!infoCheck.isMobile(user.getMobile())) {status = "请输入正确的手机号!";} else if (!infoCheck.isEmail(user.getEmail())) {status = "请输入正确的邮箱!";} else if (userService.getUserByMobile(user.getMobile()).getId() != user.getId()) {System.out.println(userService.getUserByMobile(user.getMobile()).getId() + " " + user.getId());status = "此手机号码已使用!";} else if (userService.getUserByEmail(user.getEmail()).getId() != user.getId()) {status = "此邮箱已使用!";} else {if (!photo.isEmpty()) {RandomString randomString = new RandomString();FileCheck fileCheck = new FileCheck();String filePath = "/statics/image/photos/" + user.getId();String pathRoot = fileCheck.checkGoodFolderExist(filePath);String fileName = user.getId()+ randomString.getRandomString(10);String contentType = photo.getContentType();String imageName = contentType.substring(contentType.indexOf("/") + 1);String name = fileName + "." + imageName;photo.transferTo(new File(pathRoot + name));String photoUrl = filePath + "/" + name;user.setPhotoUrl(photoUrl);} else {String photoUrl = userService.getUserById(user.getId()).getPhotoUrl();user.setPhotoUrl(photoUrl);}insertSuccess = userService.updateUser(user);if (insertSuccess) {session.removeAttribute("user");session.setAttribute("user", user);return "redirect:/user/userProfile";} else {status = "修改失败!";model.addAttribute("user", user);model.addAttribute("status", status);return "user/userEdit";}}System.out.println(user.getMobile());System.out.println(status);model.addAttribute("user", user);model.addAttribute("status", status);return "user/userEdit";}@RequestMapping(value = "/password/edit", method = RequestMethod.POST)public ResponseEntity editPassword(@RequestBody Password password) {User user = userService.getUserById(password.getUserId());String oldPass = DigestUtils.md5DigestAsHex((password.getOldPassword() + user.getCode()).getBytes());if (oldPass.equals(user.getPassword())) {RandomString randomString = new RandomString();String code = (randomString.getRandomString(5));String md5Pass = DigestUtils.md5DigestAsHex((password.getNewPassword() + code).getBytes());Boolean success = userService.updatePassword(md5Pass, code,password.getUserId());if (success) {return ResponseEntity.ok(true);} else {return ResponseEntity.ok("密码修改失败!");}} else {return ResponseEntity.ok("原密码输入不正确!");}}}

 源码获取:博客首页 "资源" 里下载!

相关文章:

SQL用法总结

1、创建数据库语句 create table persons(id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255) NOT NULL,firstname VARCHAR(255) NOT NULL,PRIMARY KEY (ID)) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 2、创建数据库时&#xff0c;PK、NN、UQ、BIN、UN、…

[leetcode] Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,2,3]. Note: Recursive solution is trivial, could you do it iteratively? 给定一棵二叉树&#xff0c;使用非递归的方法进行先序遍历。…

error C2065: “M_PI”: 未声明的标识符

1.首先&#xff0c;程序中头文件的选择&#xff0c;要选择<math.h>头文件&#xff0c;在<cmath>文件中是没有对M_PI 的定义的&#xff08;现在的<cmath>中对M_PI好像已有定义&#xff09;。2.选择&#xff1a;项目——>”XXX属性"——>配置属性—…

区分HPUX是Itanium还是PA-RISC

转自&#xff1a;http://blog.csdn.net/nbzll0920/article/details/7961232 pa-risc的产品号以rp打头&#xff0c;itanium的产品号以rx打头 用model或者uname -a命令看一下就知道了 PS: Intel安腾处理器构建在IA-64&#xff08;Intel Architecture 64&#xff09;&#xff0c;…

Java项目:食品溯源系统(java+Springboot+Maven+mybatis+Vue+mysql+wd)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

使用sqlite保存数据返回主键

/// <summary>/// 返回insert后的主键值/// </summary>/// <param name"SQLString"></param>/// <param name"para"></param>/// <returns></returns>public static int ExecuteSql(string SQLString, Li…

Pycharm初始创建项目和环境搭建(解决aconda库文件引入不全等问题)

1.新建工程 1&#xff0e;选择新建一个Pure Python项目&#xff0c;新建项目路径可以在Location处选择。 2.Project Interpreter部分是选择新建项目所依赖的python库&#xff0c;第一个选项会在项目中简历一个venv&#xff08;virtualenv&#xff09;目录&#xff0c;这里存放…

Java项目:宠物商城系统(java+Springboot+Maven+mybatis+Vue+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

android插件化-apkplug中以监听方式获取OSGI服务-09

2019独角兽企业重金招聘Python工程师标准>>> 我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OSGIService 一 需求 通过 <<apkplug中OSGI服务基本原理-08>>我们知道怎样注册于查询OSGI Service。但查询方式必须在Servi…

网页失去焦点事件 visibilitychange

当网页失去焦点事件时会触发 visibilitychange 事件&#xff0c;可进行相关逻辑处理 如失去焦点需暂停播放 或 变更title吸引用户回来.. eg: <script>document.addEventListener(visibilitychange, function () {var isHidden document.hidden;if (isHidden) {//失去焦点…

UML类图符号 各种关系说明以及举例

UML中描述对象和类之间相互关系的方式包括&#xff1a;依赖&#xff08;Dependency&#xff09;&#xff0c;关联&#xff08;Association&#xff09;&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组合&#xff08;Composition&#xff09;&#xff0c;泛…

Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

《暗时间》读后感

什么是暗时间 什么是暗时间&#xff1f;你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉&#xff0c;所有这些时间都可以称为“暗时间”。我理解暗时间就是把自己平时在不知不觉中度过的&#xff0c;看不到它流逝的时光充分利用起来的时间。这些时间在作者的眼里是可以…

AbstractMap详解

/ 包:java.util// 包:java.util package java . util;Map.Entry;​同 SimpleEntry 一样,都继承了 Map.Entry 和 序列化接口。

OpenGL渲染流水中的处理步骤

显示列表:不管数据描述的是几何体还是像素,都可以被存储在显示列表中,供现在或以后使用;也可以不将数据存储在显示列表中,而是立刻对数据进行处理,这被称为直接模式.显示列表被执行时,其中存储的数据被发送出去,就像在应用程序中用直接模式发送一样.求值程序:所有的几何图元最终…

需要在method方法被调用之后,仅打印出a=100,b=200,请写出method方法的代码

通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。public static final PrintStream err“标准”错误输出流。PrintStream 是打印输出流,它继承于FilterOutputStream。第二个用的是用的是char类型,根本不是方法,当要输出方法体的时候,会给你遍历数组。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。诡异的是,如果错了,面试官对你说了一句:你回去看看,

Linux复制文件scp

cp 复制文件(copy) cp sourcefile destfile scp 跨服务器复制(secure copy) (1) 复制文件&#xff1a; scp local_file remote_usernameremote_ip:remote_folder 或 scp local_file remote_usernameremote_ip:remote_file 或 scp local_file remote_ip:remote_folder 或 scp lo…

一键部署 SpringCloud 微服务,这套流程值得学习一波儿!

一键部署 springcloud 微服务,需要用到 Jenkins K8S Docker等工具。本文使用jenkins部署,流程如下图开发者将代码push到git运维人员通过jenkins部署,自动到git上pull代码通过maven构建代码将maven构建后的jar打包成docker镜像 并 push docker镜像到docker registry通过k8s发起 发布/更新 服务 操作其中 2~5步骤都会在jenkins中进行操作。

Observer Pattern 观察者模式

Observer Pattern (观察者模式) 定义&#xff1a; 《设计模式》中对Observer模式的意图是这样描述的&#xff1a;“定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到通知并且自动更新”。 The Observer Patt…

Java项目:精美风在线音乐网站(java+JDBC+C3P0+servlet+mysql+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 1.运行环境 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; 项目技术&#xff1a; JSP C3P0 Servlert html css JavaS…

Solution 24: 链表翻转

程序 public class ListReverse {public ListNode reverseList(ListNode head) {if (head null) {return head;}ListNode pre head;ListNode cur pre.next;pre.next null;while (cur ! null) {ListNode next cur.next;cur.next pre;pre cur;cur next;}return pre;}pu…

Android开发实践:以“专业”的态度处理多线程

刚开始学一门编程语言的时候&#xff0c;我总是会有一种困惑&#xff0c;怎样让自己的代码看起来更“专业”&#xff1f;很多时候&#xff0c;我们可以照着教材实现一些基本的功能&#xff0c;比如用Socket发送/接收几个字符&#xff0c;写一个线程完成某个异步任务&#xff0c…

js 正则匹配URL,网址,带端口,带query的

function isURL(url) {const strRegex ^((https|http|ftp)://)?//(https或http或ftp):// 可有可无 (([\\w_!~*\()\\.&$%-]: )?[\\w_!~*\()\\.&$%-])? //ftp的user 可有可无 (([0-9]{1,3}\\.){3}[0-9]{1,3} // IP形式的URL- 3位数字.3位数字.3位数字.3位数字 | // 允…

接入层的流程和非接入层

所谓接入层的流程和非接入层的流程&#xff0c;实际是从协议栈的角度出发的。在协议栈中&#xff0c;RRC和RANAP层及其以下的协议层称为接入层&#xff0c;它们之上的MM、SM、CC、SMS 等称为非接入层。简单地说&#xff0c;接入层的流程&#xff0c;也就是指无线接入层的设备RN…

Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 音乐播放 用户登录注册 用户信息编辑、头像修改 歌曲、歌单搜索 歌单打分 歌单、歌曲评论 歌单列表、歌手列表分页显示 歌词同步显不 音乐收藏、下载、拖动控制、…

UICollectionView的使用方法

1、遵守协议 <UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> 2、创建 UICollectionViewFlowLayout * layout [[UICollectionViewFlowLayout alloc]init]; layout.minimumInteritemSpacing 10; //最小item之间的间距 layout.minimumLineSpaci…

python学习--服务期间通讯和mysql数据库操作

服务端import socket import json ssocket.socket(socket.AF_INET,socket.SOCK_STREAM,0) host port1234 s.bind((host,port)) s.listen(3) while True:client,ipaddrs.accept()print "Got a connect from %s" %str(ipaddr)dataclient.recv(1024)metadatajson.loads(…

[Angular JS教程] HeroService: getHeroes failed: undefined 问题解决方法

最近在学习入门Angular JS&#xff0c;学习资源是https://angular.cn/tutorial&#xff0c; 在学习到 “https://angular.cn/tutorial/toh-pt6模拟数据服务器” 阶段时&#xff0c;客户端访问http://localhost:4200/无法get到英雄列表&#xff0c;Message系统记录日志如下&…

BZOJ 4059: [Cerc2012]Non-boring sequences ( )

要快速在一段子序列中判断一个元素是否只出现一次 , 我们可以预处理出每个元素左边和右边最近的相同元素的位置 , 这样就可以 O( 1 ) 判断.考虑一段序列 [ l , r ] , 假如我们找到了序列中唯一元素的位置 p , 那我们只需检查 [ l , p - 1 ] & [ p 1 , r ] 是否 non-boring…

Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 用户功能模块&#xff1a; 用户注册&#xff1a; 用户登录&#xff1a;商品模块&#xff1a;订单模块&#xff1b;后台管理系统功能&#xff1a;管理员模块&#xff1a; 商品模块&#xff1a;…