【网络应用开发】实验4——会话管理
目录
会话管理预习报告
一、实验目的
二、实验原理
三、实验预习内容
1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束?
2. 服务器是如何识别管理属于某一个特定客户的会话的?
3. 什么是Cookie,它的作用是什么?Cookie会给客户端带来安全隐患吗?
4.如何使用隐藏表单域传递会话信息,一般用在什么情况下?
会话管理实验报告
一、实验目的
二、实验要求
三、实验内容与步骤
1. 使用HttpSession对象管理会话。在名为exp04的Web项目下,创建一个名为ShowSessionInfo的Servlet,显示当前客户的会话ID、会话创建时间、最近一次访问会话的时间、该客户访问会话次数等信息,运行的结果要求如下图所示。
2. 使用HttpSession会话对象设计一个GuessNumberServlet.java,实现简单的猜数游戏:
4. 编写HomeServlet.java,对通过超链接请求的两个URL进行重写,在浏览器中禁用Cookie后,servlet运行效果要求如下图所示。
四、思考题
1. 如何理解会话失效与超时?如何通过程序设置最大失效时间?如何通过Web应用程序部署描述文件设置最大超时时间?二者有什么区别?
2. 能否通过客户机的IP地址实现会话跟踪?
3. 假如开发的Web应用程序是假设客户支持Cookie的,但应用程序部署后,你发现大多数客户禁用了Cookie,这对应用程序有何影响?如何修改它?
会话管理预习报告
一、实验目的
1. 了解Web服务器对客户会话跟踪的各种方法;
2. 重点掌握使用HttpSession对象跟踪会话的方法;
3. 掌握使用Cookie技术跟踪会话的方法;
4. 了解URL重写和隐藏表单域的方法。
二、实验原理
HTTP协议是无状态的协议。在很多情况下,Web服务器必须能够跟踪客户的状态。比如,对于一个购物网站,在一个时刻可能有多个客户购物,Web服务器必须能够区分不同的客户。一般情况下,Web服务器为每个客户配置了虚拟的购物车(ShoppingCart)。当某个客户请求将一个商品放入购物车时,Web服务器必须根据发出请求的客户的身份,找到该客户的购物车,然后把商品放入其中。
Web服务器跟踪客户的状态通常有4种方法:
(1)使用HttpSession对象管理会话;(2)使用持久的Cookie对象;(3)使用URL重写机制;(4)使用隐藏的表单域。
三、实验预习内容
1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束?
会话:是客户与服务器之间的不中断的请求-响应序列。
开始:当一个未知的客户向web应用程序发送第一个请求时就开始了一个会话。
结束:当客户结束会话或服务器在一定时限内没有接到客户任何请求时,会话结束。
2. 服务器是如何识别管理属于某一个特定客户的会话的?
一个客户对应一个会话,服务器能够识别出请求来自于哪个客户的会话。
3. 什么是Cookie,它的作用是什么?Cookie会给客户端带来安全隐患吗?
Cookie:是客户访问Web服务器时,服务器在客户端用户硬盘上存放的信息,好像是服务器送给客户的“点心”。Cookie实际上是一小段的文本信息。
作用:可以在客户端上保存用户数据,起到简单的缓存和用户身份识别等作用;保存用户的登陆状态,用户进行登陆,成功登陆后,服务器生成特定的cookie返回给客户端,客户端下次访问该域名下的任何页面,将该cookie的信息发送给服务器,服务器经过检验,来判断用户是否登陆;记录用户的行为。
安全问题:客户可能认为Cookie会带来安全问题,因此禁用Cookie。事实上,Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点的Cookie最多存放20个,每个Cookie的大小限制为4 KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。
4.如何使用隐藏表单域传递会话信息,一般用在什么情况下?
在HTML页面中,可以使用下面代码实现隐藏的表单域:
<input type="hidden" name="session" value="a1234">;
当表单提交时,浏览器将指定的名称和值包含在GET或POST的数据中。这个隐藏域可以用来存储有关会话的信息。
会话管理实验报告
一、实验目的
1. 了解Web服务器对客户会话跟踪的各种方法;
2. 重点掌握使用HttpSession对象跟踪会话的方法;
3. 掌握使用Cookie技术跟踪会话的方法;
4. 了解URL重写和隐藏表单域的方法。
二、实验要求
1. 实验前进行预习,完成实验预习报告;
2.按照每一项实验内容进行上机实践与编程,将程序源代码和运行结果图附在实验报告中实验内容对应的部分。
3. 实验预习报告和实验报告打印装订在一起。
4. 将每一次实验的源代码按目录组织保存并压缩,按照老师指定的要求进行提交。代码保存方式如:exp04表示实验四的Web项目的名称,其下保存各项实验内容的源文件及相关资源,将整个exp04文件夹进行压缩后命名为班级-姓名-实验04,如计171-张三-实验04。
三、实验内容与步骤
1. 使用HttpSession对象管理会话。在名为exp04的Web项目下,创建一个名为ShowSessionInfo的Servlet,显示当前客户的会话ID、会话创建时间、最近一次访问会话的时间、该客户访问会话次数等信息,运行的结果要求如下图所示。
package exp04;import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; import java.sql.Date;@WebServlet(name = "ShowSessionInfo", value = "/Show") public class ShowSessionInfo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=gb2312");HttpSession session = req.getSession(true);String heading = null;String info = "Information about your session";Integer accessCount = (Integer) session.getAttribute("accessCount");if (accessCount == null) {accessCount = new Integer(1);heading = "Welcome,enter this page first time! ";} else {heading = "Welcome Back! ";accessCount = accessCount + 1;}session.setAttribute("accessCount",accessCount);PrintWriter out = resp.getWriter();out.println("<HTML>");out.println(" <BODY><center>");out.println("<h2>"+heading + "</h2>" +"<h3>" +info+"</h3>");out.println("<table border='0'>");out.println("<tr bgcolor=\"ffad0\"><td><b>Info Type</b><td><b>Value</b>\n");out.println("<tr><td>ID:<td>"+session.getId()+"\n");out.println("<tr><td>Creation Time:<td>");out.println(""+new Date(session.getCreationTime())+"\n");out.println("<tr><td>Time of last access:<td>");out.println(""+new Date(session.getLastAccessedTime())+"\n");out.println("<tr><td>Access number:<td>"+accessCount+"\n");out.println("</table>");out.println(" </center> </BODY>");out.println("</HTML>");} }
2. 使用HttpSession会话对象设计一个GuessNumberServlet.java,实现简单的猜数游戏:
doget()方法显示当前会话的相关信息,产生一个1-100的随机数并保存到session作用域中,显示表单让用户输入所猜数字,表单以post方式提交给该servlet本身进行处理。
dopost()方法中将用户输入的数字和session中保存的随机数进行比较,如果用户猜的结果正确,强制结束会话,通过超链接可以在此请求该Servlet重新开始一轮猜数游戏;如果结果错误,显示错误提示信息和猜数表单,允许用户重新猜数。
package exp04;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;@WebServlet(name = "GuessNumberServlet",value = "/GuessNumberServlet") public class GuessNumberServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int num1 = (int)(Math.random()*101);HttpSession session = req.getSession();session.setAttribute("num",new Integer(num1));resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();out.println("<html><body>");out.println("请猜一个0-100的数字!");out.println("<form action='GuessNumberServlet' method='post'>");out.println("<input type='text' name='guess' />");out.println("<input type='submit' value='提交'/>");out.println("</form>");out.println("</body></html>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int guess = Integer.parseInt(req.getParameter("guess"));HttpSession session = req.getSession();int magic = (Integer)session.getAttribute("num");resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();out.println("<html><body>");if(guess==magic){session.invalidate();out.println("猜对了!");out.println("<a href = 'GuessNumberServlet'>再猜一次.</a>");}else if(guess>magic){out.println("猜大了, 请重猜!");}else{out.println("猜小了, 请重猜!");}out.println("<form action='GuessNumberServlet' method='post'>");out.println("<input type='text' name='guess' />");out.println("<input type='submit' value='确定'/>");out.println("</form>");out.println("</body></html>");} }
3. 编写一个CheckUserServlet,通过Cookie实现自动登录的功能。当用户以get方式请求该Servlet时,判断来自请求的cookie中是否包含用户的登录名和口令,如果有判断是否合法,如果通过验证显示欢迎信息;否则显示登录表单让用户重新填写用户名和口令,表单提交以post方式请求CheckUserServlet进行处理,如果用户登录成功并且勾选了“自动登录”,则提示登录成功,并向客户端发送cookie信息保存用户名和口令,否则提示登录失败,并在浏览器端显示登录表单让用户重新登录。
Checka.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>login</title> </head> <body> ${sessionScope.message}<br> <form action="CheckUserServlet" method="post">请您输入用户名和口令:<br>用户名:<input type="text" name="username"/><br>口令:<input type="password" name="password"/><br><input type="checkbox" name="check" value="check"/>自动登录<br><input type="submit" value="提交"/><input type="reset" value="重置"/> </form> </body> </html> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>welcome</title> </head> <body> <h1>欢迎你</h1> </body> </html>
CheckUserServlet:
package exp04;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/CheckUserServlet") public class CheckUserServlet extends HttpServlet {String message=null;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");String value1 = "",value2="";Cookie cookie =null;Cookie[] cookies = req.getCookies();if(cookies!=null){for(int i=0;i<cookies.length;i++){cookie = cookies[i];if(cookie.getName().equals("username")){value1 = cookie.getValue();}if(cookie.getName().equals("password")){value2 = cookie.getValue();}}if (value1.equals("little bears")&&value2.equals("123456")){message = "Welcome!!!(*╹▽╹*)欢迎您!"+value1+"再次登录该页面!";req.getSession().setAttribute("message",message);resp.sendRedirect("check_second.jsp");}else {resp.sendRedirect("check_first.jsp");}}else {resp.sendRedirect("check_first.jsp");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");String username = req.getParameter("username").trim();String password = req.getParameter("password").trim();if (!username.equals("little bears")||!password.equals("123456")){message = "o(╥﹏╥)o用户名或口令不正确,请重试!";req.getSession().setAttribute("message",message);resp.sendRedirect("check_first.jsp");}else {if ((req.getParameter("check")!=null) && (req.getParameter("check").equals("check"))){Cookie nameCookie = new Cookie("username",username);Cookie pswdCookie = new Cookie("password",password);nameCookie.setMaxAge(60*60);pswdCookie.setMaxAge(60*60);resp.addCookie(nameCookie);resp.addCookie(pswdCookie);}message ="Welcome!!!(*╹▽╹*)登录成功!";req.getSession().setAttribute("message",message);resp.sendRedirect("check_second.jsp");}} }
check_first.html
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>login</title> </head> <body> ${sessionScope.message}<br> <form action="CheckUserServlet" method="post">请您输入用户名和口令:<br>用户名:<input type="text" name="username"/><br>口令:<input type="password" name="password"/><br><input type="checkbox" name="check" value="check"/>自动登录<br><input type="submit" value="提交"/><input type="reset" value="重置"/> </form> </body> </html>
check_second.html
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>welcome</title> </head> <body> <h1>欢迎你</h1> </body> </html>
首次登录
选择自动登录再次打开,已经被记忆
密码或者用户名错误
4. 编写HomeServlet.java,对通过超链接请求的两个URL进行重写,在浏览器中禁用Cookie后,servlet运行效果要求如下图所示。
package exp04;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;@WebServlet("/HomeServlet") public class HomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html; charset = utf - 8"); //HttpSession session=request.getSession();PrintWriter out = resp.getWriter();String url1 = resp.encodeURL("GuessNumberServlet");String url2 = resp.encodeURL("CheckUserServlet");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" A test page showing two URLs:<br> ");out.println("<a href=\"" + url1 + "\">View GuessNumber Servlet</a><br>");out.println("<a href=\"" + url2 + "\">View CheckUser Servlet</a><br>");out.println(" </BODY>");out.println("</HTML>");} }
四、思考题
1. 如何理解会话失效与超时?如何通过程序设置最大失效时间?如何通过Web应用程序部署描述文件设置最大超时时间?二者有什么区别?
当用户在一个指定的期限内处于不活动状态时,就将用户的会话终止,会话失效,超过设定时间终止是会话超时。public void setMaxInactiveInterval(int Interval)设置最大失效时间。在部署文件中下中设置最大超时时间。一个是通过编程方式设置,一个是在部署时就已设置。
2. 能否通过客户机的IP地址实现会话跟踪?
容器不能使用客户的IP地址唯一标识客户。因为是通过局域网访问Internet尽管在局域网中每个客户有一个IP地址,但对于服务器来说,客户的实际IP地址是路由器的IP地址,所以该局域网的所有客户的IP地址都相同。
3. 假如开发的Web应用程序是假设客户支持Cookie的,但应用程序部署后,你发现大多数客户禁用了Cookie,这对应用程序有何影响?如何修改它?
来自网站的所有Cookie都被阻止,并且计算机上现有的Cookie不能被网站读取。可在Internet选项中设置。
相关文章:

【网络应用开发】实验4——会话管理
目录 会话管理预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束? 2. 服务器是如何识别管理属于某一个特定客户的会话的? 3. 什么是Cookie,它的…...

Linux服务器怎么分区
Linux服务器怎么分区 我是艾西,linux系统除了从业某个行业经常要用到的程序员比较熟悉,对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区,让身为小白的你也能一眼看懂直接上手操作感受程序…...

传统机器学习(四)聚类算法DBSCAN
传统机器学习(四)聚类算法DBSCAN 1.1 算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇,并在…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】A题:ASIC 芯片上的载波恢复 DSP 算法设计与实现(附获奖论文及matlab代码实现)
目录 摘 要: 1.问题重述 1.1 问题背景 1.2 问题提出 1.3 研究基础 2.模型假设和已知...

1043.分隔数组以得到最大和
题目: 给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元素最大和。本题所用到的测试…...

微服务治理框架(Istio)的认证服务与访问控制
本博客地址:https://security.blog.csdn.net/article/details/130152887 一、认证服务 1.1、基于JWT的认证 在微服务架构下,每个服务是无状态的,由于服务端需要存储客户端的登录状态,因此传统的session认证方式在微服务中不再适…...

数据结构 | 排序 - 总结
排序的方式 排序的稳定性 什么是排序的稳定性? 不改变相同数据的相对顺序 排序的稳定性有什么意义? 假定一个场景: 一组成绩:100,88,98,98,78,100(按交卷顺序…...

crontab -e 系统定时任务
crontab -e解释 crontab 是由 “cron” 和 “table” 两个单词组成的缩写。其中,“cron” 是一个在 Linux 和类 Unix 操作系统中用于定时执行任务的守护进程,而 “table” 则是指一个表格或者列表,因此 crontab 就是一个用于配置和管理定时任…...

前后端交互系列之Axios详解(包括拦截器)
目录 前言一,服务器的搭建二,Axios的基本使用2.1 Axios的介绍及页面配置2.2 如何安装2.3 Axios的前台代码2.4 Axios的基本使用2.5 axios请求响应结果的结构2.6 带参数的axios请求2.7 axios修改默认配置 三,axios拦截器3.1 什么是拦截器3.2 拦…...

定时任务之时间轮算法
初识时间轮 我们先来考虑一个简单的情况,目前有三个任务A、B、C,分别需要在3点钟,4点钟和9点钟执行,可以把时间想象成一个钟表。 如上图中所示,我只需要把任务放到它需要被执行的时刻,然后等着时针转到这个…...

实验4 Matplotlib数据可视化
1. 实验目的 ①掌握Matplotlib绘图基础; ②运用Matplotlib,实现数据集的可视化; ③运用Pandas访问csv数据集。 2. 实验内容 ①绘制散点图、直方图和折线图,对数据进行可视化; ②下载波士顿数房价据集,并…...

【软件工程】为什么要选择软件工程专业?
个人主页:【😊个人主页】 文章目录 前言软件工程💻💻💻就业岗位👨💻👨💻👨💻就业前景🛩️🛩️🛩️工作环…...

5类“计算机”专业很吃香,人才缺口巨大,就业前景良好
说到目前最热门的专业,计算机绝对占有一席之地,是公认的发展前景好、人才缺口大的专业。有人称该专业人数如此众多,势必会导致人才饱和,但是从当前社会互联网发展的趋势来看,计算机专业在很长一段时间都是发展很好的专…...

数仓选型对比
1、数仓选型对比如下(先列举表格,后续逐个介绍) 数仓应用目标产品特点适用于 适用数据类型数据处理速度性能拓展 实施难度运维难度性能优化成本传统数仓(SQLServer、Oracle等关系型数据库)面向主题设计的,为 分析数据而设计基于Oracle、 SQLServer、MyS…...

二叉树的遍历(前序、中序、后序)Java详解与代码实现
递归遍历 前序,中序,后序 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, Tree…...

如何找出消耗CPU最多的线程?
如何找出消耗CPU最多的线程? 1.使用 top -c 找出所有当前进程的运行列表 top -c 2.按P(Shiftp)对所有进程按CPU使用率进行排序,找出消耗最高的线程PID 显示Java进程 PID 为 136 的java进程消耗最 3.使用 top -Hp PID,查出里面消…...

【论文笔记】Attention Augmented Convolutional Networks(ICCV 2019 入选文章)
目录 一、摘要 二、介绍 三、相关工作 卷积网络Convolutional networks: 网络中注意力机制Attention mechanisms in networks: 四、方法 1. 图像的自注意力Self-attention over images: 二维位置嵌入Two-dimensional Positional Enco…...

虚幻图文笔记:Character Creator 4角色通过AutoSetup For Unreal Engine插件导入UE5.1的过程笔记
在UE5端安装AutoSetup For Unreal Engine插件 AutoSetup For Unreal Engine是Reallusion官方提供的免费插件,官方下载地址,下载到的是一个可执行文件,点击安装,记住安装的位置⬇ 看装完毕后会打开一个文件夹,这里就是对…...

JAVAWeb04-DOM
1. DOM 1.1 概述 1.1.1 官方文档 地址: https://www.w3school.com.cn/js/js_htmldom.asp 1.1.2 DOM 介绍 DOM 全称是 Document Object Model 文档对象模型就是把文档中的标签,属性,文本,转换成为对象来管理 1.2 HTML DOM(文档…...

C++内存管理基础知识
C 内存管理 C内存管理是一个重要的主题,因为它涉及到程序运行时资源的分配和释放。它可以分为三种类型:静态内存、栈内存和堆内存。 静态内存 静态内存(Static Memory):静态内存用于存储全局变量、静态变量和常量。这…...

命令执行漏洞概述
命令执行漏洞概述 命令执行定义命令执行条件命令执行成因命令执行漏洞带来的危害远程命令执行漏洞相关函数assert()preg_replace()call_user_func() a ( a( a(b)可变函数远程命令执行漏洞的利用系统命令执行漏洞相关函数system()exec()shell_exec()passthru(&#x…...

【初试复试第一】脱产在家二战上岸——上交819考研经验
笔者来自通信考研小马哥23上交819全程班学员 先介绍一下自己,我今年初试426并列第一,加上复试之后总分600,电子系第一。 我本科上交,本科期间虽然没有挂科但是成绩排名处于中下游水平。参加过全国电子设计大赛,虽然拿…...

PTA:C课程设计(7)
山东大学(威海)2022级大一下C习题集(7) 函数题7-6-1 递增的整数序列链表的插入7-6-2 查找学生链表7-6-3 统计专业人数7-6-4 建立学生信息链表 编程题7-7-1 查找书籍7-7-2 找出总分最高的学生 函数题 7-6-1 递增的整数序列链表的插…...

POSTGRESQL LINUX 与 PG有关的内存参释义
开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…...

Docker的常见命令
前言:使用Docker得学会的几个常见命令 常见命令前置学习: docker --help这个命令必须得会因为,很多命令是记不住的,得使用他们的官方help下面是一些实例 docker load --help常见命令集合: 一: docker images #查看全部镜像 docker rmi #删除某个镜像(例如:docker rmi redis…...

详细介绍性能测试的方法(含文档)
性能测试是软件测试中的一个重要环节,其目的是评估系统在不同负荷下的性能表现,包括响应时间、吞吐量、并发数等指标。通常可以通过以下几种方法进行性能测试: 1、负载测试 负载测试是模拟多用户同时访问系统,测试系统在高并发、…...

深入剖析 Qt QHash :原理、应用与技巧
目录标题 引言QHash 基础用法基础用法示例基础用法综合示例 QHash 的高级用法迭代器:遍历 QHash 中的元素(Iterators: Traversing Elements in QHash )QHash和其他容器的对比QHash 和 std::unordered\_map QHash的底层原理和内存管理QHash 的…...

技术分享 | MySQL级联复制下进行大表的字段扩容
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生开源社区出品,…...

工业互联网业务知识
文章目录 背景第四次工业革命带动制造业产业升级主要工业大国不同路径 架构ISA95体系架构变革趋势基础通用架构数据采集平台 工业互联网应用软件工业互联网全要素连接产品视角:产销服务企业的业务流程企业数字化改造:车间级全要素连接 工业互联网的产品体…...

jsp+java自行车租赁租借和买卖系统
自行车租借和买卖系统 系统包括四个模块。1,系统模块,2,车辆管理模块,3.租借车管理模块,4,买卖车管理模块。 1,系统模块包括: 连接数据库,工作人员登录,退出。 2&#…...