php、Java、python酒店预约与送餐系统 酒店管理系统 酒店预订入住系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社

💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!

💕💕学习资料、程序开发、技术解答、文档报告

💕💕如需要源码,可以扫取文章下方二维码联系咨询

💕💕Java项目
💕💕微信小程序项目
💕💕Android项目
💕💕Python项目
💕💕PHP项目
💕💕ASP.NET项目
💕💕Node.js项目
💕💕选题推荐

项目实战|酒店预订与送餐系统Java、php、python

文章目录

1、研究背景

随着社会经济的发展和生活水平的提高,人们对旅行和住宿的需求不断增加。传统的酒店预约和送餐服务存在着操作繁琐、效率低下等问题,无法满足现代用户对便捷、高效、个性化服务的需求。尤其在疫情期间,用户对无接触的服务需求激增,传统的服务模式显得尤为滞后。因此,开发一个集成酒店预约与送餐功能的系统,能够有效解决这些问题,提高用户体验,并适应市场的新需求,成为当务之急。通过技术创新和智能化手段,我们可以突破传统服务模式的限制,提供更为灵活、便捷的服务解决方案。

2、研究目的和意义

本系统的开发旨在通过先进的技术手段,提升酒店预约和送餐服务的效率与便利性。首先,系统将整合酒店的房间信息、价格、实时空房状况等,实现一站式的在线预约功能,简化用户的操作流程。其次,系统将提供智能化的送餐服务,通过用户下单后的实时跟踪、个性化推荐等功能,提升服务质量和用户满意度。系统还将支持多种支付方式和数据分析功能,以优化服务流程和提升用户体验。通过这些功能的实现,系统力求在提升服务质量的同时,降低运营成本,实现酒店与用户之间的高效对接。

开发一个集成酒店预约与送餐功能的系统,不仅有助于提升用户的服务体验,还能推动酒店业和餐饮业的数字化转型。系统的推出将使酒店能够更好地管理房间资源,提高入住率,并通过数据分析洞察市场需求,优化运营策略。同时,送餐功能的集成将为用户提供更为便捷的餐饮服务,提升酒店的附加值和竞争力。在更广泛的层面上,该系统的开发将推动整个行业向智能化、信息化发展,为未来的服务创新奠定基础,从而带来经济效益和社会效益的双重提升。

3、系统研究内容

  1. 系统架构设计

    研究系统的整体架构,包括前端用户界面和后端服务器的设计。前端用户界面需要提供直观、易用的操作界面,支持酒店房间的搜索、筛选、预订以及送餐服务的选择。后端服务器则负责处理用户请求、管理酒店房间信息、订单处理以及支付系统的集成。需要考虑系统的可扩展性和可维护性,以适应未来功能的扩展和升级。

  2. 数据管理与分析

    研究如何有效地管理和分析系统中的数据,包括用户数据、酒店房间信息、订单记录和送餐数据等。设计高效的数据存储方案,确保数据的准确性和安全性。通过数据分析功能,能够生成用户行为报告、销售分析报告和市场趋势预测,帮助酒店管理者优化运营策略和提升服务质量。

  3. 实时处理与智能推荐

    研究如何实现实时处理用户请求和订单。包括实时更新房间空闲状态、订单状态跟踪以及送餐进度跟踪等。开发智能推荐算法,根据用户的历史行为、偏好和当前需求,提供个性化的酒店房间和送餐服务推荐,提高用户体验和满意度。

  4. 支付系统集成

    研究如何集成多种支付方式,确保用户能够便捷地完成支付。包括信用卡、电子钱包、移动支付等多种支付渠道的支持。需要处理支付安全问题,确保用户的支付信息不被泄露,并实现支付交易的快速、准确处理。

  5. 安全性与隐私保护

    研究系统的安全性设计和隐私保护措施。包括数据加密、用户身份验证、权限管理等,以保护用户数据和交易信息的安全。设计系统防护机制,防止潜在的网络攻击和数据泄露,确保系统的可靠性和用户的信任。

  6. 用户体验优化

    研究用户体验的优化策略,包括用户界面的友好性、操作的流畅性以及服务的响应速度。通过用户反馈和体验测试,不断改进系统的功能和设计,提高系统的易用性和用户满意度。设计简洁直观的界面,提供友好的用户指导和帮助,提高用户的整体体验。

4、系统页面设计







如需要源码,可以扫取文章下方二维码联系咨询

5、参考文献

1\]朱玉凤.基于JavaWeb的酒店管理系统的设计与实现\[J\].网络安全和信息化,2023,(12):91-94. \[2\]张莹,王运霞,易超,等.铁路企业差旅酒店预订系统数据治理技术研究\[J\].铁路计算机应用,2023,32(10):23-26. \[3\]郭志英.基于Web的酒店管理系统的设计与实现\[J\].长江信息通信,2022,35(12):120-123. \[4\]刘雨.酒店管理信息系统的发展演变\[J\].今日财富,2022,(14):40-42. \[5\]钱春霞.智慧酒店系统设计研究\[J\].电子技术与软件工程,2022,(14):175-178. \[6\]洪晖煌,潘善亮.基于MQTT的智慧酒店系统设计\[J\].无线通信技术,2022,31(02):59-62. \[7\]钱春霞.连锁酒店管理系统的设计研究\[J\].电子技术与软件工程,2022,(11):216-219. \[8\]Wong E .破解四大云酒店管理系统误区\[J\].软件和集成电路,2022,(05):12-13.DOI:10.19609/j.cnki.cn10-1339/tn.2022.05.010. \[9\]于盛洋.智慧酒店管理系统设计与实现------基于RFID模块\[J\].产业科技创新,2022,4(02):37-40. \[10\]关世友,刘晓辉.基于物联网六域模型的智慧酒店系统设计及应用\[J\].物联网技术,2022,12(03):95-99.DOI:10.16667/j.issn.2095-1302.2022.03.028. \[11\]董华军.酒店管理系统的设计与实现\[J\].工业控制计算机,2022,35(01):140-141. \[12\]张若淼,吴明霞.基于评论情感分析需求的酒店客房预定系统\[J\].电脑编程技巧与维护,2021,(12):13-14+20.DOI:10.16184/j.cnki.comprg.2021.12.005. \[13\]冯朔,郑学智.基于边云协同的智慧酒店系统\[J\].电子设计工程,2021,29(19):19-24+30.DOI:10.14022/j.issn1674-6236.2021.19.004. \[14\]王岩,一种基于人脸识别和卡片识别的酒店管理系统.陕西省,西安顶吉智能科技有限公司,2021-08-17. \[15\]邵全勇,雒海东.基于CRM的酒店管理信息系统设计与实现\[J\].电子设计工程,2021,29(14):15-19.DOI:10.14022/j.issn1674-6236.2021.14.004. \[16\]朱云杰.翼云居酒店管理系统前置服务设计\[J\].电子元器件与信息技术,2021,5(06):182-185.DOI:10.19772/j.cnki.2096-4455.2021.6.081. \[17\]刘映群,刘俊钦,梁健煊.智慧酒店管理系统设计与实现\[J\].现代信息科技,2021,5(09):87-92.DOI:10.19850/j.cnki.2096-4706.2021.09.023. \[18\]于燕秀,俞睿,严飞杰.基于面部识别的智能酒店管理系统\[J\].工业技术创新,2021,08(01):70-73+107.DOI:10.14103/j.issn.2095-8412.2021.01.011. \[19\]冯朔.基于边云协同计算的智慧酒店系统\[D\].武汉邮电科学研究院,2021. DOI:10.27386/d.cnki.gwyky.2021.000002. \[20\]刘聪.酒店管理系统设计与研究\[J\].电子技术与软件工程,2021,(01):165-166. ## 6、核心代码 ```java token(); $tokens = json_decode(base64_decode($token),true); if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>401,'msg'=>"你还没有登录。"])); $userid = $tokens['id']; $where = " where 1 ";//查询条件 $orwhere = ''; $page = isset($_REQUEST['page'])?$_REQUEST['page']:"1"; $limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10"; $sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id"; $order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc"; foreach ($_REQUEST as $k => $val){ if(in_array($k, $this->columData)){ if ($val != ''){ $where.= " and ".$k." like '".$val."'"; } } } $sql = "select * from `caipinxinxi` ".$where; $count = table_sql($sql); if ($count->num_rows < 1){ $numberCount = 0; }else{ $numberCount = $count->num_rows; } $page_count = ceil($numberCount/$limt);//页数 $startCount = ($page-1)*$limt; $where .= empty($orwhere) ? '' : "and (".$orwhere.")"; $lists = "select * from `caipinxinxi` ".$where." order by ".$sort." ".$order." limit ".$startCount.",".$limt; $result = table_sql($lists); $arrayData = array(); if ($result->num_rows > 0) { while ($datas = $result->fetch_assoc()){ array_push($arrayData,$datas); } } exit(json_encode([ 'code'=>0, 'data' => [ "total" => $numberCount, "pageSize" => $limt, "totalPage" => $page_count, "currPage" => $page, "list" => $arrayData ] ])); } /** * 分页,列表list * get */ public function lists(){ $sql = "select * from `caipinxinxi`"; $result = table_sql($sql); $arrayData = array(); if ($result->num_rows > 0) { while ($datas = $result->fetch_assoc()){ array_push($arrayData,$datas); } } exit(json_encode([ 'code'=>0, 'data' =>$arrayData ])); } /** * 分页,列表list * get */ public function list(){ $page = isset($_REQUEST['page'])?$_REQUEST['page']:"1"; $limt = isset($_REQUEST['limit'])?$_REQUEST['limit']:"10"; $sort = isset($_REQUEST['sort'])?$_REQUEST['sort']:"id"; $order = isset($_REQUEST['order'])?$_REQUEST['order']:"asc"; $refid = isset($_REQUEST['refid']) ? $_REQUEST['refid'] : "0"; $where = " where 1 ";//查询条件 if(isset($_REQUEST['goodid'])) { $where .= " and goodid = ".$_REQUEST['goodid']." "; } $sorts = explode(",", $sort); $orders = explode(",", $order); $sortorders = ""; foreach ($sorts as $index => $value) { if($index == count($sorts)-1){ $sortorders =$sortorders.$value." ".$orders[$index]; }else{ $sortorders =$sortorders.$value." ".$orders[$index].","; } } foreach ($_REQUEST as $k => $val){ if(in_array($k, $this->columData)){ $where.= " and ".$k." like '".$val."'"; } } $sql = "select * from `caipinxinxi`".$where; $count = table_sql($sql); if ($count->num_rows < 1){ $numberCount = 0; }else{ $numberCount = $count->num_rows; } $page_count = ceil($numberCount/$limt);//页数 $startCount = ($page-1)*$limt; $lists = "select * from `caipinxinxi` ".$where." order by ".$sortorders." limit ".$startCount.",".$limt; $result = table_sql($lists); $arrayData = array(); if ($result->num_rows > 0) { while ($datas = $result->fetch_assoc()){ array_push($arrayData,$datas); } } exit(json_encode([ 'code'=>0, 'data' => [ "total" => $numberCount, "pageSize" => $limt, "totalPage" => $page_count, "currPage" => $page, "list" => $arrayData ] ])); } /** * 新增数据接口 * post */ public function save(){ $token = $this->token(); $tokens = json_decode(base64_decode($token),true); if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>401,'msg'=>"你还没有登录。"])); $uid = $tokens['id']; $keyArr = $valArr = array(); $tmpData = strval(file_get_contents("php://input"));//Content-Type: application/json 需要用到php://input 处理输入流 if (!empty($tmpData)&& isset($tmpData)){ $postData = json_decode($tmpData,true); $caipinbianhao = $postData['caipinbianhao']; $resultInfo = table_sql("select caipinbianhao from `caipinxinxi` where `caipinbianhao` = '".$caipinbianhao."'"); if ($resultInfo->num_rows > 0) { exit(json_encode(['code'=>500,'msg'=>"菜品编号已存在"])); } foreach ($postData as $key => $value){ if (in_array($key, $this->columData)){ if(!empty($value) || $value === 0) { if ($key == 'id') { continue; } array_push($keyArr,"`".$key."`"); if($key == 'clicktime') { array_push($valArr,"'".date('Y-m-d h:i:s', time())."'"); } else { array_push($valArr,"'".$value."'"); } } } } } $k = implode(',',$keyArr); $v = implode(',',$valArr); $sql = "INSERT INTO `caipinxinxi` (".$k.") VALUES (".$v.")"; $result = table_sql($sql); exit(json_encode(['code'=>0])); } /** * 新增数据接口 add * post */ public function add(){ $keyArr = $valArr = array(); $token = $this->token(); $tokens = json_decode(base64_decode($token),true); if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>401,'msg'=>"你还没有登录。"])); $uid = $tokens['id']; $tmpData = strval(file_get_contents("php://input")); if (!empty($tmpData)&& isset($tmpData)){ $postData = json_decode($tmpData,true); $caipinbianhao = $postData['caipinbianhao']; $resultInfo = table_sql("select caipinbianhao from `caipinxinxi` where `caipinbianhao` = '".$caipinbianhao."'"); if ($resultInfo->num_rows > 0) { exit(json_encode(['code'=>500,'msg'=>"菜品编号已存在"])); } foreach ($postData as $key => $value){ if (in_array($key, $this->columData)){ if(!empty($value) || $value === 0) { if ($key == 'id') { continue; } array_push($keyArr,"`".$key."`"); if($key == 'clicktime') { array_push($valArr,"'".date('Y-m-d h:i:s', time())."'"); } else { array_push($valArr,"'".$value."'"); } } } } } $k = implode(',',$keyArr); $v = implode(',',$valArr); $sql = "INSERT INTO `caipinxinxi` (".$k.") VALUES (".$v.")"; $result = table_sql($sql); exit(json_encode(['code'=>0])); } /** * 更新接口 * post */ public function update(){ $token = $this->token(); $tokens = json_decode(base64_decode($token),true); if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>401,'msg'=>"你还没有登录。"])); $uid = $tokens['id']; $tmpData = strval(file_get_contents("php://input")); $postData = json_decode($tmpData,true); $caipinbianhao = $postData['caipinbianhao']; $id = $postData['id']; $resultInfo = table_sql("select caipinbianhao from `caipinxinxi` where id <> ".$id." and `caipinbianhao` = '".$caipinbianhao."'"); if ($resultInfo->num_rows > 0) { exit(json_encode(['code'=>500,'msg'=>"菜品编号已存在"])); } $v = array(); foreach ($postData as $key => $value){ if (in_array($key, $this->columData)){ if ($key == "id"){ $id = $value; } if(!empty($value) || $value === 0) { array_push($v,$key." = '".$value."'"); } } } $value = implode(',',$v); $sql = "UPDATE caipinxinxi SET ".$value." where id = ".$id; $result = table_sql($sql); exit(json_encode(['code'=>0])); } /** * 删除 * post */ public function delete(){ $ids = strval(file_get_contents("php://input"));//发现接收的是字符串 preg_match_all('/\d+/',$ids,$arr); $str = implode(',',$arr[0]);//拼接字符, $sql = "delete from caipinxinxi WHERE id in({$str})"; $result = table_sql($sql); exit(json_encode(['code'=>0])); } // 查询单条记录(前端) public function query(){ $where = "1"; foreach ($_REQUEST as $k => $val){ if(in_array($k, $this->columData) && !empty($val)){ $where.= " and ".$k." like '".$val."'"; } } $sql = "select * from `caipinxinxi` where ".$where; $result = table_sql($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { $lists = $row; } } exit(json_encode([ 'code'=>0, 'data'=> $lists ])); } /** * 查询一条数据 * get */ public function info($id=false){ $token = $this->token(); $tokens = json_decode(base64_decode($token),true); if (!isset($tokens['id']) || empty($tokens['id'])) exit(json_encode(['code'=>401,'msg'=>"你还没有登录。"])); $userid = $tokens['id']; $name = isset($_REQUEST['name'])? $_REQUEST['name']:""; if (!empty($id)){ $where = "`id` = ".$id; }else{ $where = "`name` = ".$name; } $sql = "select * from `caipinxinxi` where ".$where; $result = table_sql($sql); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { $lists = $row; } } exit(json_encode([ 'code'=>0, 'data'=> $lists ])); } /** * 查询一条数据 * get */ public function detail($id=false){ $name = isset($_REQUEST['name'])? $_REQUEST['name']:""; if ($id){ $where = "`id` = ".$id; }else{ $where = "`name` = ".$name; } $sql = "select * from `caipinxinxi` where ".$where; $result = table_sql($sql); if (!$result) exit(json_encode(['code'=>500,'msg'=>"查询数据发生错误。"])); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { $lists = $row; } } exit(json_encode([ 'code'=>0, 'data'=> $lists ])); } /** * 按值统计接口 **/ public function value(){ $url = explode('?',$_SERVER['REQUEST_URI']); $request = explode('/',$url[0]); $xColumnName = $request[4]; $yColumnName = $request[5]; $token = $this->token(); $tokens = json_decode(base64_decode($token),true); $where = " where 1 "; $sql = "SELECT ".$xColumnName.",sum(".$yColumnName.") total FROM caipinxinxi ".$where." group by ".$xColumnName; if(urldecode($request[6]) == '日') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m-%d') ".$xColumnName.", sum(".$yColumnName.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m-%d')"; } if(urldecode($request[6]) == '月') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m') ".$xColumnName.", sum(".$yColumnName.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m')"; } if(urldecode($request[6]) == '年') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y') ".$xColumnName.", sum(".$yColumnName.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y')"; } $result = table_sql($sql); if ($result->num_rows > 0) { // 输出数据 $total = array(); while($row = $result->fetch_assoc()) { array_push($total,array('total' => intval($row['total']),$xColumnName => $row[$xColumnName])); } } exit(json_encode(['code'=>0,'data'=>$total])); } /** * (按值统计)时间统计类型(多) **/ public function valueMul(){ $url = explode('?',$_SERVER['REQUEST_URI']); $request = explode('/',$url[0]); $xColumnName = $request[4]; $yColumnName = isset($_REQUEST['yColumnNameMul'])? $_REQUEST['yColumnNameMul']:""; $token = $this->token(); $tokens = json_decode(base64_decode($token),true); $where = " where 1 "; $valueData = array(); foreach(explode(",", $yColumnName) as $item){ $sql = "SELECT ".$xColumnName.",sum(".$item.") total FROM caipinxinxi ".$where." group by ".$xColumnName." LIMIT 10"; if(urldecode($request[6]) == '日') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m-%d') ".$xColumnName.", sum(".$item.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m-%d') LIMIT 10"; } if(urldecode($request[6]) == '月') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y-%m') ".$xColumnName.", sum(".$item.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y-%m') LIMIT 10"; } if(urldecode($request[6]) == '年') { $sql = "SELECT DATE_FORMAT(".$xColumnName.", '%Y') ".$xColumnName.", sum(".$item.") total FROM caipinxinxi ".$where." GROUP BY DATE_FORMAT(".$xColumnName.", '%Y') LIMIT 10"; } $result = table_sql($sql); if ($result->num_rows > 0) {// 输出数据 $total = array(); while($row = $result->fetch_assoc()) { array_push($total,array('total' => intval($row['total']),$xColumnName => $row[$xColumnName])); } $valueData[] = $total; } } exit(json_encode(['code'=>0,'data'=>$valueData])); } /** * 获取需要提醒的记录数接口 * get */ public function remind($columnName,$type){ $remindStart = isset($_GET['remindstart'])?$_GET['remindstart']:""; $remindEnd = isset($_GET['remindend'])?$_GET['remindend']:""; $token = $this->token(); $tokens = json_decode(base64_decode($token),true); $where = " where 1 ";//查询条件 if ($type == 1){//数字 if ($remindStart && $remindEnd){ $where .= " and ".$columnName."<='".$remindEnd."' and ".$columnName.">='".$remindStart."'"; }elseif($remindStart){ $where .= " and ".$columnName.">='".$remindStart."'"; }elseif($remindEnd){ $where .= " and ".$columnName."<='".$remindEnd."'"; } }else{ if ($remindStart && $remindEnd){ $where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."' and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'"; }elseif($remindStart){ $where .= " and ".$columnName.">='".date("Y-m-d",strtotime("+".$remindStart." day"))."'"; }elseif($remindEnd){ $where .= " and ".$columnName."<='".date("Y-m-d",strtotime("+".$remindEnd." day"))."'"; } } $sql = "select * from `caipinxinxi` ".$where; $result = table_sql($sql); exit(json_encode(['code'=> 0 ,'count' => $result->num_rows])); } public function group($columnName){ $token = $this->token(); $tokens = json_decode(base64_decode($token),true); $where = " where 1 "; $sql = "SELECT ".$columnName.",count(".$columnName.") as total FROM caipinxinxi ".$where." GROUP BY ".$columnName." ORDER BY $columnName asc"; $result = table_sql($sql); if ($result->num_rows > 0) { // 输出数据 $total = array(); while($row = $result->fetch_assoc()) { array_push($total,array('total' => $row['total'],$columnName => $row[$columnName])); } } exit(json_encode(['code'=>0,'data'=>$total])); } } ``` > 💕💕**作者:计算机源码社** > > 💕💕**个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!** > > 💕💕**学习资料、程序开发、技术解答、文档报告** > > 💕💕**如需要源码,可以扫取文章下方二维码联系咨询**

相关推荐
独好紫罗兰3 分钟前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
27669582924 分钟前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息6 分钟前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
橘子在努力13 分钟前
【橘子大模型】关于PromptTemplate
python·ai·llama
程序猿chen15 分钟前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
SheepMeMe31 分钟前
蓝桥杯2024省赛PythonB组——日期问题
python·算法·蓝桥杯
莓事哒40 分钟前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
松韬1 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存
绝顶少年1 小时前
Spring Boot 注解:深度解析与应用场景
java·spring boot·后端
心灵宝贝1 小时前
Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)
java·tomcat·jenkins