Java项目:宠物商城系统(java+Springboot+Maven+mybatis+Vue+mysql)
源码获取:博客首页 "资源" 里下载!
一、项目运行
环境配置:
Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。
项目技术:
Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等。
后台相关接口:
/*** 后台相关接口*/
@Controller
@RequestMapping("/admin")
public class AdminController {private static final int rows = 10;@Autowiredprivate AdminService adminService;@Autowiredprivate OrderService orderService;@Autowiredprivate UserService userService;@Autowiredprivate GoodService goodService;@Autowiredprivate TopService topService;@Autowiredprivate TypeService typeService;/*** 管理员登录* @return*/@RequestMapping("/login")public String login(Admins admin, HttpServletRequest request, HttpSession session) {if (adminService.checkUser(admin.getUsername(), admin.getPassword())) {session.setAttribute("username", admin.getUsername());return "redirect:index";}request.setAttribute("msg", "用户名或密码错误!");return "/admin/login.jsp";}/*** 退出* @return*/@RequestMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("admin");return "/admin/login.jsp";}/*** 后台首页* @return*/@RequestMapping("/index")public String index(HttpServletRequest request) {request.setAttribute("msg", "恭喜你! 登录成功了");return "/admin/index.jsp";}/*** 订单列表* * @return*/@RequestMapping("/orderList")public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 1);request.setAttribute("status", status);request.setAttribute("orderList", orderService.getList(status, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows));return "/admin/order_list.jsp";}/*** 订单发货* * @return*/@RequestMapping("/orderDispose")public String orderDispose(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.dispose(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 订单完成* * @return*/@RequestMapping("/orderFinish")public String orderFinish(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.finish(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 订单删除* * @return*/@RequestMapping("/orderDelete")public String orderDelete(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.delete(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 顾客管理* * @return*/@RequestMapping("/userList")public String userList(HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 2);request.setAttribute("userList", userService.getList(page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows));return "/admin/user_list.jsp";}/*** 顾客添加* * @return*/@RequestMapping("/userAdd")public String userAdd(HttpServletRequest request) {request.setAttribute("flag", 2);return "/admin/user_add.jsp";}/*** 顾客添加* * @return*/@RequestMapping("/userSave")public String userSave(Users user, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (userService.isExist(user.getUsername())) {request.setAttribute("msg", "用户名已存在!");return "/admin/user_add.jsp";}userService.add(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客密码重置页面* * @return*/@RequestMapping("/userRe")public String userRe(int id, HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("user", userService.get(id));return "/admin/user_reset.jsp";}/*** 顾客密码重置* * @return*/@RequestMapping("/userReset")public String userReset(Users user, @RequestParam(required=false, defaultValue="1") int page) {String password = SafeUtil.encode(user.getPassword());user = userService.get(user.getId());user.setPassword(password);userService.update(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客更新* * @return*/@RequestMapping("/userEdit")public String userEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("user", userService.get(id));return "/admin/user_edit.jsp";}/*** 顾客更新* * @return*/@RequestMapping("/userUpdate")public String userUpdate(Users user, @RequestParam(required=false, defaultValue="1") int page) {userService.update(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客删除* * @return*/@RequestMapping("/userDelete")public String userDelete(Users user, @RequestParam(required=false, defaultValue="1") int page) {userService.delete(user);return "redirect:userList?flag=2&page="+page;}/*** 产品列表* * @return*/@RequestMapping("/goodList")public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 3);request.setAttribute("page", page);request.setAttribute("status", status);request.setAttribute("goodList", goodService.getList(status, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));return "/admin/good_list.jsp";}/*** 产品添加* * @return*/@RequestMapping("/goodAdd")public String goodAdd(HttpServletRequest request) {request.setAttribute("flag", 3);request.setAttribute("typeList", typeService.getList());return "/admin/good_add.jsp";}/*** 产品添加* * @return* @throws Exception */@RequestMapping("/goodSave")public String goodSave(String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2, @RequestParam(required=false, defaultValue="1") int page) throws Exception {Goods good = new Goods();good.setName(name);good.setPrice(price);good.setIntro(intro);good.setStock(stock);good.setTypeId(typeId);good.setCover(UploadUtil.fileUpload(cover));good.setImage1(UploadUtil.fileUpload(image1));good.setImage2(UploadUtil.fileUpload(image2));goodService.add(good);return "redirect:goodList?flag=3&page="+page;}/*** 产品更新* * @return*/@RequestMapping("/goodEdit")public String goodEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 3);request.setAttribute("typeList", typeService.getList());request.setAttribute("good", goodService.get(id));return "/admin/good_edit.jsp";}/*** 产品更新* * @return* @throws Exception */@RequestMapping("/goodUpdate")public String goodUpdate(int id, String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2,@RequestParam(required=false, defaultValue="1") int page) throws Exception {Goods good = goodService.get(id);good.setName(name);good.setPrice(price);good.setIntro(intro);good.setStock(stock);good.setTypeId(typeId);if (Objects.nonNull(cover) && !cover.isEmpty()) {good.setCover(UploadUtil.fileUpload(cover));}if (Objects.nonNull(image1) && !image1.isEmpty()) {good.setImage1(UploadUtil.fileUpload(image1));}if (Objects.nonNull(image2) && !image2.isEmpty()) {good.setImage2(UploadUtil.fileUpload(image2));}goodService.update(good);return "redirect:goodList?flag=3&page="+page;}/*** 产品删除* * @return*/@RequestMapping("/goodDelete")public String goodDelete(int id, @RequestParam(required=false, defaultValue="1") int page) {goodService.delete(id);return "redirect:goodList?flag=3&page="+page;}/*** 添加推荐* @return*/@RequestMapping("/topSave")public @ResponseBody String topSave(Tops tops, @RequestParam(required=false, defaultValue="0")byte status,@RequestParam(required=false, defaultValue="1") int page) {int id = topService.add(tops);return id > 0 ? "ok" : null;}/*** 删除推荐* @return*/@RequestMapping("/topDelete")public @ResponseBody String topDelete(Tops tops, @RequestParam(required=false, defaultValue="0")byte status,@RequestParam(required=false, defaultValue="1") int page) {boolean flag = topService.delete(tops);return flag ? "ok" : null;}/*** 类目列表* * @return*/@RequestMapping("/typeList")public String typeList(HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("typeList", typeService.getList());return "/admin/type_list.jsp";}/*** 类目添加* * @return*/@RequestMapping("/typeSave")public String typeSave(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.add(type);return "redirect:typeList?flag=4&page="+page;}/*** 类目更新* * @return*/@RequestMapping("/typeEdit")public String typeUp(int id, HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("type", typeService.get(id));return "/admin/type_edit.jsp";}/*** 类目更新* * @return*/@RequestMapping("/typeUpdate")public String typeUpdate(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.update(type);return "redirect:typeList?flag=4&page="+page;}/*** 类目删除* * @return*/@RequestMapping("/typeDelete")public String typeDelete(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.delete(type);return "redirect:typeList?flag=4&page="+page;}/*** 管理员列表* * @return*/@RequestMapping("/adminList")public String adminList(HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 5);request.setAttribute("adminList", adminService.getList(page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows));return "/admin/admin_list.jsp";}/*** 管理员修改自己密码* * @return*/@RequestMapping("/adminRe")public String adminRe(HttpServletRequest request, HttpSession session) {request.setAttribute("flag", 5);request.setAttribute("admin", adminService.getByUsername(String.valueOf(session.getAttribute("username"))));return "/admin/admin_reset.jsp";}/*** 管理员修改自己密码* * @return*/@RequestMapping("/adminReset")public String adminReset(Admins admin, HttpServletRequest request) {request.setAttribute("flag", 5);if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) {admin.setPassword(SafeUtil.encode(admin.getPasswordNew()));adminService.update(admin);request.setAttribute("admin", admin);request.setAttribute("msg", "修改成功!");}else {request.setAttribute("msg", "原密码错误!");}return "/admin/admin_reset.jsp";}/*** 管理员添加* * @return*/@RequestMapping("/adminSave")public String adminSave(Admins admin, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (adminService.isExist(admin.getUsername())) {request.setAttribute("msg", "用户名已存在!");return "/admin/admin_add.jsp";}adminService.add(admin);return "redirect:adminList?flag=5&page="+page;}/*** 管理员修改* * @return*/@RequestMapping("/adminEdit")public String adminEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 5);request.setAttribute("admin", adminService.get(id));return "/admin/admin_edit.jsp";}/*** 管理员更新* * @return*/@RequestMapping("/adminUpdate")public String adminUpdate(Admins admin, @RequestParam(required=false, defaultValue="1") int page) {admin.setPassword(SafeUtil.encode(admin.getPassword()));adminService.update(admin);return "redirect:adminList?flag=5&page="+page;}/*** 管理员删除* * @return*/@RequestMapping("/adminDelete")public String adminDelete(Admins admin, @RequestParam(required=false, defaultValue="1") int page) {adminService.delete(admin);return "redirect:adminList?flag=5&page="+page;}}
用户相关接口:
/*** 用户相关接口*/
@Controller
@RequestMapping("/index")
public class UserController{private static final String INDENT_KEY = "order";@Resourceprivate UserService userService;@Resourceprivate OrderService orderService;@Resourceprivate GoodService goodService;@Resourceprivate TypeService typeService;/*** 注册用户* @return*/@RequestMapping("/register")public String register(@RequestParam(required=false, defaultValue="0")int flag, Users user, Model model){model.addAttribute("typeList", typeService.getList());if(flag==-1) {model.addAttribute("flag", 5); // 注册页面return "/index/register.jsp";}if (user.getUsername().isEmpty()) {model.addAttribute("msg", "用户名不能为空!");return "/index/register.jsp";}else if (userService.isExist(user.getUsername())) {model.addAttribute("msg", "用户名已存在!");return "/index/register.jsp";}else {String password = user.getPassword();userService.add(user);user.setPassword(password);return "redirect:login?flag=-1"; // 注册成功后转去登录}}/*** 用户登录* @return*/@RequestMapping("/login")public String login(@RequestParam(required=false, defaultValue="0")int flag, Users user, HttpSession session, Model model) {model.addAttribute("typeList", typeService.getList());if(flag==-1) {flag = 6; // 登录页面return "/index/login.jsp";}if(userService.checkUser(user.getUsername(), user.getPassword())){session.setAttribute("user", userService.get(user.getUsername()));return "redirect:index";} else {model.addAttribute("msg", "用户名或密码错误!");return "/index/login.jsp";}}/*** 注销登录* @return*/@RequestMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("user");session.removeAttribute("order");return "/index/login.jsp";}/*** 查看购物车* @return*/@RequestMapping("/cart")public String cart(Model model) {model.addAttribute("typeList", typeService.getList());return "/index/cart.jsp";}/*** 购买* @return*/@RequestMapping("/buy")public @ResponseBody String buy(int goodid, HttpSession session){Goods goods = goodService.get(goodid);if (goods .getStock() <= 0) { // 库存不足return "empty";}Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order==null) {session.setAttribute(INDENT_KEY, orderService.add(goods));}else {session.setAttribute(INDENT_KEY, orderService.addOrderItem(order, goods));}return "ok";}/*** 减少*/@RequestMapping("/lessen")public @ResponseBody String lessen(int goodid, HttpSession session){Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order != null) {session.setAttribute(INDENT_KEY, orderService.lessenIndentItem(order, goodService.get(goodid)));}return "ok";}/*** 删除*/@RequestMapping("/delete")public @ResponseBody String delete(int goodid, HttpSession session){Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order != null) {session.setAttribute(INDENT_KEY, orderService.deleteIndentItem(order, goodService.get(goodid)));}return "ok";}/*** 提交订单* @return*/@RequestMapping("/save")public String save(ServletRequest request, HttpSession session, Model model){model.addAttribute("typeList", typeService.getList());Users user = (Users) session.getAttribute("user");if (user == null) {request.setAttribute("msg", "请登录后提交订单!");return "/index/login.jsp";}Orders sessionOrder = (Orders) session.getAttribute(INDENT_KEY);if (sessionOrder != null) {if (sessionOrder != null) {for(Items item : sessionOrder.getItemList()){ // 检测商品库存(防止库存不足)Goods product = goodService.get(item.getGoodId());if(item.getAmount() > product.getStock()){request.setAttribute("msg", "商品 ["+product.getName()+"] 库存不足! 当前库存数量: "+product.getStock());return "/index/cart.jsp";}}}sessionOrder.setUserId(user.getId());sessionOrder.setUser(userService.get(user.getId()));int orderid = orderService.save(sessionOrder); // 保存订单session.removeAttribute(INDENT_KEY); // 清除购物车return "redirect:topay?orderid="+orderid;}request.setAttribute("msg", "处理失败!");return "/index/cart.jsp";}/*** 支付页面* @return*/@RequestMapping("/topay")public String topay(int orderid, ServletRequest request, Model model) {model.addAttribute("typeList", typeService.getList());request.setAttribute("order", orderService.get(orderid));return "/index/pay.jsp";}/*** 支付(模拟)* @return*/@RequestMapping("/pay")public String pay(Orders order, Model model) {model.addAttribute("typeList", typeService.getList());orderService.pay(order);return "redirect:payok?orderid="+order.getId();}/*** 支付成功* @return*/@RequestMapping("/payok")public String payok(int orderid, ServletRequest request, Model model) {model.addAttribute("typeList", typeService.getList());Orders order = orderService.get(orderid);int paytype = order.getPaytype();if(paytype == Orders.PAYTYPE_WECHAT || paytype == Orders.PAYTYPE_ALIPAY) {request.setAttribute("msg", "订单["+orderid+"]支付成功");}else {request.setAttribute("msg", "订单["+orderid+"]货到付款");}return "/index/payok.jsp";}/*** 查看订单* @return*/@RequestMapping("/order")public String order(HttpSession session, Model model){model.addAttribute("flag", 3);model.addAttribute("typeList", typeService.getList());Users user = (Users) session.getAttribute("user");if (user == null) {model.addAttribute("msg", "请登录后查看订单!");return "/index/login.jsp";}List<Orders> orderList = orderService.getListByUserid(user.getId());if (orderList!=null && !orderList.isEmpty()) {for(Orders order : orderList){order.setItemList(orderService.getItemList(order.getId()));}}model.addAttribute("orderList", orderList);return "/index/order.jsp";}/*** 个人信息* @return*/@RequestMapping("/my")public String my(Users user, HttpSession session, Model model){model.addAttribute("flag", 4);model.addAttribute("typeList", typeService.getList());Users userLogin = (Users) session.getAttribute("user");if (userLogin == null) {model.addAttribute("msg", "请先登录!");return "/index/login.jsp";}// 进入个人中心if (Objects.isNull(user) || Objects.isNull(user.getId())) {return "/index/my.jsp";}Users u = userService.get(user.getId());// 修改资料u.setName(user.getName());u.setPhone(user.getPhone());u.setAddress(user.getAddress());userService.update(u); // 更新数据库session.setAttribute("user", u); // 更新sessionmodel.addAttribute("msg", "信息修改成功!");// 修改密码if(user.getPasswordNew()!=null && !user.getPasswordNew().trim().isEmpty()) {if (user.getPassword()!=null && !user.getPassword().trim().isEmpty() && SafeUtil.encode(user.getPassword()).equals(u.getPassword())) {if (user.getPasswordNew()!=null && !user.getPasswordNew().trim().isEmpty()) {u.setPassword(SafeUtil.encode(user.getPasswordNew()));}userService.update(u); // 更新数据库session.setAttribute("user", u); // 更新sessionmodel.addAttribute("msg", "密码修改成功!");}else {model.addAttribute("msg", "原密码错误!");}}return "/index/my.jsp";}}
前台相关接口:
/*** 前台相关接口*/
@Controller
@RequestMapping("/index")
public class IndexController{private static final int rows = 16; // 默认每页数量@Autowiredprivate TopService topService;@Autowiredprivate GoodService goodService;@Autowiredprivate TypeService typeService;/*** 首页* @return*/@RequestMapping("/index")public String index(HttpServletRequest request){request.setAttribute("flag", 1);request.setAttribute("typeList", typeService.getList());request.setAttribute("top1List", topService.getList(Tops.TYPE_SCROLL, 1, 1));request.setAttribute("top2List", topService.getList(Tops.TYPE_LARGE, 1, 6));request.setAttribute("top3List", topService.getList(Tops.TYPE_SMALL, 1, 8));return "/index/index.jsp";}/*** 推荐列表* @return*/@RequestMapping("/top")public String tops(int typeid, @RequestParam(required=false, defaultValue="1")int page, HttpServletRequest request) {request.setAttribute("flag", typeid==2 ? 7 : 8);request.setAttribute("typeList", typeService.getList());request.setAttribute("goodList", goodService.getList(typeid, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(typeid), page, rows));return "/index/goods.jsp";}/*** 商品列表* @return*/@RequestMapping("/goods")public String goods(int typeid, @RequestParam(required=false, defaultValue="1")int page, HttpServletRequest request){request.setAttribute("flag", 2);if (typeid > 0) {request.setAttribute("type", typeService.get(typeid));}request.setAttribute("typeList", typeService.getList());request.setAttribute("goodList", goodService.getListByType(typeid, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotalByType(typeid), page, rows));return "/index/goods.jsp";}/*** 商品详情* @return*/@RequestMapping("/detail")public String detail(int goodid, HttpServletRequest request){request.setAttribute("good", goodService.get(goodid));request.setAttribute("typeList", typeService.getList());return "/index/detail.jsp";}/*** 搜索* @return*/@RequestMapping("/search")public String search(String name, @RequestParam(required=false, defaultValue="1")int page, HttpServletRequest request) {if (Objects.nonNull(name) && !name.trim().isEmpty()) {request.setAttribute("goodList", goodService.getListByName(name, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotalByName(name), page, rows));}request.setAttribute("typeList", typeService.getList());return "/index/goods.jsp";}}
源码获取:博客首页 "资源" 里下载!
相关文章:

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

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

UML类图符号 各种关系说明以及举例
UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛…

Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

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

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) 复制文件: 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 (观察者模式) 定义: 《设计模式》中对Observer模式的意图是这样描述的:“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并且自动更新”。 The Observer Patt…

Java项目:精美风在线音乐网站(java+JDBC+C3P0+servlet+mysql+JSP)
源码获取:博客首页 "资源" 里下载! 1.运行环境 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: 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开发实践:以“专业”的态度处理多线程
刚开始学一门编程语言的时候,我总是会有一种困惑,怎样让自己的代码看起来更“专业”?很多时候,我们可以照着教材实现一些基本的功能,比如用Socket发送/接收几个字符,写一个线程完成某个异步任务,…

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位数字 | // 允…

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

Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 音乐播放 用户登录注册 用户信息编辑、头像修改 歌曲、歌单搜索 歌单打分 歌单、歌曲评论 歌单列表、歌手列表分页显示 歌词同步显不 音乐收藏、下载、拖动控制、…

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,学习资源是https://angular.cn/tutorial, 在学习到 “https://angular.cn/tutorial/toh-pt6模拟数据服务器” 阶段时,客户端访问http://localhost:4200/无法get到英雄列表,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)
源码获取:博客首页 "资源" 里下载! 一、项目简述 用户功能模块: 用户注册: 用户登录:商品模块:订单模块;后台管理系统功能:管理员模块: 商品模块:…

WebBrowserProgramming - Python Wiki
WebBrowserProgramming - Python WikiWeb Browser Programming in Python

C++ transform for_each
#include<iostream>#include<vector>#include <list>#include <algorithm>#include <functional> using namespace std; //不需拷贝,速度快void square(int &elementParam){ elementParam elementParam*elementParam;} //速度…

When should static_cast, dynamic_cast and reinterpret_cast be used?
这是我偶然在 http://stackoverflow.com/questions/ 网页上发现的一个问题(类似博客园的博问),问题主要是关于询问应该怎样使用,以及何时使用C里面的这几种类型转换操作符:static_case, dynamic_cast,以及 …

Java项目:养老院管理系统(java+SSM+JSP+Easyui+maven+mysql)
源码获取:博客首页 "资源" 里下载! 运行环境: JDK1.8、tomcat8、eclipse、mysql5.6、Navicat 功能实现: 用户: 用户名,登录密码,姓名,性别,出生日期,用户照片,联系电话,邮箱,家庭地址,注册时间 老人: 老人编号,姓名,…

Linux访问Windows磁盘实现共享
业务需求说明:公司在部署hadoop集群和DB server与SAN存储,公司的想法是前端通过DB Server能够将非结构化的数据能放进SAN存储当中,而hadoop集群也能够访问这个SAN存储。因此需要在SAN磁盘阵列中开辟一个共享区域,这个区域技能让DB…

ubuntu环境ceph配置入门(一)
为什么80%的码农都做不了架构师?>>> 环境:ubuntu server 14.04 64bit,安装ceph版本0.79 正常情况下应有多个主机,这里为了快速入门以一台主机为例,多台主机配置方式类似。 1. 配置静态IP及主机名 静态IP配…

mysql查看当前实时连接数
静态查看: SHOW PROCESSLIST; SHOW FULL PROCESSLIST; SHOW VARIABLES LIKE %max_connections%; SHOW STATUS LIKE %Connection%; 实时查看: mysql> show status like Threads%; -------------------------- | Variable_name | Value | ------------…

lsof 简介
lsof简介 lsof(listopen files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协…