- 浏览: 507760 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- java基础 (30)
- ajax (19)
- 乱写 (5)
- groovy (2)
- db (8)
- gwt (0)
- jee (2)
- 我关注的开源 (1)
- RIA AIR (1)
- spring (11)
- lucene (0)
- 工具 (10)
- 百科 (2)
- linux (6)
- android (40)
- 移动开发 (21)
- 代码片断 (15)
- tomcat (1)
- css (1)
- html5 (2)
- jquery (2)
- playframework (3)
- web (2)
- nio (3)
- design (1)
- nosql (3)
- 日志 (12)
- mysql (4)
- 图表 (1)
- python (3)
- ruby (1)
- git (0)
- hibernate (1)
- springboot (1)
- guava (1)
- mybatis (0)
- 工作问题 (3)
- php (1)
最新评论
-
linzm1990:
踩了很多坑啊。。。。
hibernate @Nofound 与@ManyToOne fetch lazy的问题 -
Ccccrrrrrr:
...
转: Spring boot 文件上传 -
rmzdb:
兄弟,你这个东西,在ie内核的浏览器,貌似不识别 文件名
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
107x:
问题解决了,谢谢!
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
klxqljq:
额鹅鹅鹅
android布局实现头尾固定, 中间多余内容可以滚动
转自: http://blog.csdn.net/lgg201/archive/2010/09/23/5902321.aspx
插件官方地址: http://www.thomasfrank.se/sessionvars.html
下载地址: http://www.thomasfrank.se/sessvars.js
原文地址: http://www.thomasfrank.se/sessionvars.html
译者: selfimpr
博客: http://blog.csdn.net/lgg201
插件源代码解析: http://blog.csdn.net/lgg201/archive/2010/09/23/5902274.aspx
参考信息: http://blog.reybango.com/2010/04/08/alternative-client-side-storage-using-sessvars-js/
不使用cookie的session变量
我不喜欢javascript的cookie实现, 存储空间限制在4 * 20K每域名, 仅仅可以使用字符串类型, 并且获取和设置cookie的语法过于复杂.
最重要的是浏览器发送的每个请求头都会携带cookie, 而很多防火墙对请求报头长度有限制导致你的网页的加载可能被阻止.(我看到过这样的事情, 这很糟糕)
因此我写了这个小脚本, 以便于不使用cookie来实现javascript的session变量, 它允许你存储2MB的数据, 并且远比使用cookie来的简单.
使用方法:
当引入了sessvars脚本后, 就有了一个sessvars对象, 它基本上就是一个普通的javascript对象, 可以增加新的属性或者改变已有属性的值, 不同的是sessvars可以在不同的页面之间传递, 比如, 你可以使用:
sessvars.myObj = {name: "Thomas", age: 35}
在另一个引入了sessvars的页面中, 你同样可以通过sessvars.myObj得到这个对象.
方法:
在存储数据的时候, sessvars.$这个名字是不可以使用的, 因为它包含了一些插件内部实现的有用的方法
sesvars.$.clearMem(): 清除已经存储的所有数据
sessvars.$.usedMem(): 返回存储数据已经使用的内存大小, 单位KB
sessvars.$.usedMemPercent(): 返回存储数据已经使用的内存所占百分比
sessvars.$.debug(): 打印一个调试信息到页面, 包含已使用内存, 已使用内存百分比, 已存储所有数据
sessvars.$.flush(): 使当前已经保存的数据在下一次页面切换时也可以使用(因为直接通过sessvars.xx =
xxx赋值的数据其实并不会立刻写入到window.name, 而是需要显示调用这个方法, 当然, 可以通过配置autoflush的方式自动刷入,
autoflush默认是启用的)
属性/标记:
一些标记用来觉得sessvars的行为
sessvars.$.prefs.memlimit: 默认2000(KB), 只sessvars可以使用的最大内存, 这个值还会受浏览器限制,
opera 9.25限制在2M左右, IE7.0, firefox1.5/2.0以及safari3.0都更高一些, 是10MB.
sessvars.$.prefs.autoFlush: 默认true, 决定sessvars是否在window.unload事件发生时自动的调用flush将数据写入window.name
sessvars.$.prefs.includeFunctions: 默认false, 决定sessvars是否可以存储方法
sesvars.$.prefs.includeProtos: 默认false, 决定sessvars是否存储对象的prototype中的值
表象的后面: 怎么样完成的数据存储?
window.name原来的目的是保存window和frame的名字以便于在脚本中使用名字定位访问, 为了不产生干扰, 在我的脚本中只使用了top.name
window.name的优势在于可以在页面切换的时候保存(哪怕是跨域), 并且它可以保存一个很长的名字, 不足之处在于它仅能存储字符串值, 我使用了JSON格式串来进行序列化/反序列.
最主要的是我在window.unload中做了自动的flush消除了每次值改变后去手动save/flush的工作.
安全注意事项:
sessvars有一个跨域选项(crossDomain), 但是它默认是false,
当它是false时你不能使用sessvars访问其他站点的window.name,
自己站点设置的数据别人则可以通过在浏览器地址栏输入javascript:alert(window.name)获取到.
因此, 请不要使用sessvars存储敏感信息比如密码, visa卡号等.
但是sessvars也有比cookie安全的地方: window.name的内容不会在请求头发送.
-----------------------------分割线---------------------
源代码解析:
勘误: 里面的prefs中配置项的单位是KB, 不是MB。
/* sessvars ver 1.01 - JavaScript based session object copyright 2008 Thomas Frank This EULA grants you the following rights: Installation and Use. You may install and use an unlimited number of copies of the SOFTWARE PRODUCT. Reproduction and Distribution. You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT either in whole or in part; each copy should include all copyright and trademark notices, and shall be accompanied by a copy of this EULA. Copies of the SOFTWARE PRODUCT may be distributed as a standalone product or included with your own product. Commercial Use. You may sell for profit and freely distribute scripts and/or compiled scripts that were created with the SOFTWARE PRODUCT. v 1.0 --> 1.01 sanitizer added to toObject-method & includeFunctions flag now defaults to false @url: http://www.thomasfrank.se/sessionvars.html @译者: selfimpr @blog: http://blog.csdn.net/lgg201 @mail: lgg860911@yahoo.com.cn sessvars是一款利用window.name实现前台跨窗口(跨域)会话对象的javascript插件. */ sessvars=function(){ // var x={}; // x.$={ //一些配置属性 prefs:{ //使用内存大小限制, 单位MB, Opera 9.25限制在2M左右, IE7.0, Firefox 1.5/2.0, Safari 3.0都可以支持10M memLimit:2000, //每当window的unload事件触发时, 是否自动将当前保存页面中保存的数据写入window.name以便跨页面传播(参见x.$.flush方法末尾) autoFlush:true, //是否允许跨域数据共享, 开启后, 跨域的多个脚本需要同时使用此插件 crossDomain:false, includeProtos:false, includeFunctions:false }, //一个指向外层x对象的引用, 所有数据时临时暂存在这个对象上, 在flush时写入到window.name parent:x, //清理内存 clearMem:function(){ //将parent中所有非$的属性全部清除, $就是x.$, 是一些配置信息, 而不是要保存的信息 for(var i in this.parent){if(i!="$"){this.parent[i]=undefined}}; //将清理后的结果写入window.name, 这样, 页面切换时, 就不会保存数据 this.flush(); }, //获取当前已使用的内存大小, 单位KB usedMem:function(){ x={}; //使用一个空对象调用flush, 返回已存数据大小 return Math.round(this.flush(x)/1024); }, //获取当前使用内存占配置的最大内存占用的比例 usedMemPercent:function(){ return Math.round(this.usedMem()/this.prefs.memLimit); }, //将当前页面保存的数据写入到window.name flush:function(x){ //这里this是x.$(外面的那个, 也就是sessvars=function 这个函数内的第一句声明的x) var y,o={},j=this.$$; //x(内部x)默认为顶层window对象 x=x||top; //由于this是x.$, 所以, parent实际上就是x(注意, 这里还是外面的x), 即这里将x.$.parent中存放的变量全部拷贝到o这个对象中 for(var i in this.parent){o[i]=this.parent[i]}; //将o里面的$对象重新赋值为当前的prefs配置 o.$=this.prefs; //下面两句设置了外层x.$.$$中的两个配置项includeProtos和includeFunctions使用当前的prefs中的配置 j.includeProtos=this.prefs.includeProtos; j.includeFunctions=this.prefs.includeFunctions; //调用x.$.$$.make(外面x)方法, 将o对象转换的字符串(json转换) y=this.$$.make(o); //如果x(内部x)不是顶层window对象, 比如usedMem方法中的调用, 就返回字符串长度, 这里就得到了已经存放的长度 if(x!=top){return y.length}; //如果y的长度超过了配置的memLimit参数, 返回false if(y.length/1024>this.prefs.memLimit){return false} //此时可以确定内部的x是顶层window对象, 将字符串y写入到window.name中. x.name=y; return true; }, //获取当前域名 getDomain:function(){ var l=location.href l=l.split("///").join("//"); l=l.substring(l.indexOf("://")+3).split("/")[0]; while(l.split(".").length>2){l=l.substring(l.indexOf(".")+1)}; return l }, //输出调试信息 debug:function(t){ //t保存一个要调试的sessvars对象, a获取当前函数 var t=t||this,a=arguments.callee; //如果文档没有body, 200毫秒后重试一次 if(!document.body){setTimeout(function(){a(t)},200);return}; //调用一次要调试的对象的flush, 将值刷入到window.name t.flush(); //以下内容构建一个用来显示调试信息的html元素, 显示信息包括已使用内存大小, 已使用内存百分比, 已保存数据. var d=document.getElementById("sessvarsDebugDiv"); if(!d){d=document.createElement("div");document.body.insertBefore(d,document.body.firstChild)}; d.id="sessvarsDebugDiv"; d.innerHTML='<div style="line-height:20px;padding:5px;font-size:11px;font-family:Verdana,Arial,Helvetica;'+ 'z-index:10000;background:#FFFFCC;border: 1px solid #333;margin-bottom:12px" mce_style="line-height:20px;padding:5px;font-size:11px;font-family:Verdana,Arial,Helvetica;'+ 'z-index:10000;background:#FFFFCC;border: 1px solid #333;margin-bottom:12px">'+ '<b style="font-family:Trebuchet MS;font-size:20px" mce_style="font-family:Trebuchet MS;font-size:20px">sessvars.js - debug info:</b><br/><br/>'+ 'Memory usage: '+t.usedMem()+' Kb ('+t.usedMemPercent()+'%) '+ '<span style="cursor:pointer" mce_style="cursor:pointer"><b>[Clear memory]</b></span><br/>'+ top.name.split('\n').join('<br/>')+'</div>'; d.getElementsByTagName('span')[0].onclick=function(){t.clearMem();location.reload()} }, //初始化sessvars对象 init:function(){ //以下提到的x都是外面的x //t和this都是x.$ var o={}, t=this; //将之前保存的window.name使用x.$.$$.toObject函数(反json)成为一个对象, 如果之前没有, 那么o是新的空对象 try {o=this.$$.toObject(top.name)} catch(e){o={}}; //如果之前使用过sessvars, 那么当前对象的prefs使用上一次的(从o中获取到的) this.prefs=o.$||t.prefs; //如果允许跨域或就是当前域, 将上一次保存的所有数据写入到新的对象的中 //(这里this.parent实际上还是外层的x对象, 因为this = x.$, x.$.parent = x) if(this.prefs.crossDomain || this.prefs.currentDomain==this.getDomain()){ for(var i in o){this.parent[i]=o[i]}; } else { //如果不是, 保存一次当前域名 this.prefs.currentDomain=this.getDomain(); }; this.parent.$=t; //将内容写入到window.name t.flush(); //定义一个用来处理自动刷入数据的闭包 var f=function(){if(t.prefs.autoFlush){t.flush()}}; //绑定unload事件处理autoflush if(window["addEventListener"]){addEventListener("unload",f,false)} else if(window["attachEvent"]){window.attachEvent("onunload",f)} else {this.prefs.autoFlush=false}; } }; x.$.$$={ //对输出进行压缩 compactOutput:false, //是否处理原型属性(未被重新赋值的) includeProtos:false, //是否处理函数 includeFunctions: false, //是否检测循环引用 detectCirculars:true, //是否还原循环引用 restoreCirculars:true, //创建json串 make:function(arg,restore) { //resotre表明是否还原循环引用 this.restore=restore; //用于循环引用检测及路径生成的暂存数组 this.mem=[];this.pathMem=[]; return this.toJsonStringArray(arg).join(''); }, //将json串转换成对象 toObject:function(x){ //检测是否匹配json格式的正则 if(!this.cleaner){ try{this.cleaner=new RegExp('^("(\\\\.|[^"\\\\\\n\\r])*?"|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$')} catch(a){this.cleaner=/^(true|false|null|\[.*\]|\{.*\}|".*"|\d+|\d+\.\d+)$/} }; //如果不是合法json, 返回空对象 if(!this.cleaner.test(x)){return {}}; //使用eval创建对象 eval("this.myObj="+x); //如果不还原循环引用直接返回对象 if(!this.restoreCirculars || !alert){return this.myObj}; //处理函数的json反序列化 if(this.includeFunctions){ var x=this.myObj; for(var i in x){if(typeof x[i]=="string" && !x[i].indexOf("JSONincludedFunc:")){ x[i]=x[i].substring(17); eval("x[i]="+x[i]) }} }; //创建还原循环引用缓冲存储 this.restoreCode=[]; //创建当前对象的json串, 这里使用了make函数restore参数, 所以会将需要还原的循环引用保存到restoreCode中 this.make(this.myObj,true); //把记录的需要还原的循环引用join成字符串, 方便正则替换 var r=this.restoreCode.join(";")+";"; //处理数组下标访问及path末尾的".;", 这些字符的生成参见toJsonStringArray中循环引用字符串生成部分 eval('r=r.replace(/\\W([0-9]{1,})(\\W)/g,"[$1]$2").replace(/\\.\\;/g,";")'); //用eval建立循环引用 eval(r); //返回json反序列化后的对象 return this.myObj }, //把对象转换成json字符串数据 toJsonStringArray:function(arg, out) { if(!out){this.path=[]}; out = out || []; var u; // undefined switch (typeof arg) { case 'object': //最后处理的对象保存 this.lastObj=arg; //检测循环引用 if(this.detectCirculars){ //m用来保存已处理对象, n用来保存已处理对象路径 var m=this.mem; var n=this.pathMem; for(var i=0;i<m.length;i++){ if(arg===m[i]){ out.push('"JSONcircRef:'+n[i]+'"');return out } }; //循环引用处理的对象记录及路径记录 m.push(arg); n.push(this.path.join(".")); }; if (arg) { //处理数组对象 if (arg.constructor == Array) { out.push('['); for (var i = 0; i < arg.length; ++i) { //路径处理 this.path.push(i); //处理数组元素的间隔符 if (i > 0) out.push(',\n'); //递归处理数组元素的字符串化 this.toJsonStringArray(arg[i], out); //路径处理 this.path.pop(); } out.push(']'); return out; //普通对象处理 } else if (typeof arg.toString != 'undefined') { out.push('{'); var first = true; for (var i in arg) { //如果不处理原型属性, 并且当前对象的i属性和原型的i属性严格相等, 则不处理 if(!this.includeProtos && arg[i]===arg.constructor.prototype[i]){continue}; //路径处理 this.path.push(i); //记录处理当前属性时输出数组的长度 var curr = out.length; //处理对象属性的间隔符 if (!first) out.push(this.compactOutput?',':',\n'); //译者注: 如果是压缩输出就不输出换行, 这个在数组对象处理处也应该使用 //递归处理元素属性名称 this.toJsonStringArray(i, out); //属性名和属性值的间隔 out.push(':'); //递归处理元素属性值 this.toJsonStringArray(arg[i], out); //如果当前处理的属性值是undefiend, 则删除针对该属性的输出 if (out[out.length - 1] == u) out.splice(curr, out.length - curr); else //除第一次外, 都不再是first, 即要输出属性间隔符 first = false; //路径处理 this.path.pop(); } out.push('}'); return out; } return out; } //如果不是数组对象, 且没有toString方法, 认为是空对象 out.push('null'); return out; case 'unknown': case 'undefined': case 'function': //如果不处理函数, 将函数输出为一个undefind if(!this.includeFunctions){out.push(u);return out}; //将函数转换成字符串 arg="JSONincludedFunc:"+arg; out.push('"'); var a=['\n','\\n','\r','\\r','"','\\"']; //对函数中的原文字符串进行转义替换 arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])}; out.push(arg); out.push('"'); return out; case 'string': //如果需要对循环引用进行还原, 处理还原 if(this.restore && arg.indexOf("JSONcircRef:")==0){ //将需要还原的循环引用写入restoreCode暂存, 对此的下一步处理参见x.$.$$.toObject方法 this.restoreCode.push('this.myObj.'+this.path.join(".")+"="+arg.split("JSONcircRef:").join("this.myObj.")); }; out.push('"'); var a=['\n','\\n','\r','\\r','"','\\"']; //转义处理 arg+=""; for(var i=0;i<6;i+=2){arg=arg.split(a[i]).join(a[i+1])}; out.push(arg); out.push('"'); return out; default: //非特殊情况, 直接使用String转类型 out.push(String(arg)); return out; } } }; x.$.init(); return x; }()
发表评论
-
jquery 1.6新加功能
2011-10-29 17:36 958见http://webin.us/chunterg/330 ... -
jQuery 1.5 的Deferred对象
2011-10-29 17:33 1111Jquery.Deferred对象是jquery1.5新引入的 ... -
jquery 1.5 ajax的改进
2011-10-28 19:55 1266源文见: http://api.jquery.com/exte ... -
利用HTTP-only Cookie缓解XSS之痛
2011-05-25 10:35 4540详细介绍请看: http://netsecurity.51ct ... -
用javascript来检测你在页面上的发呆时间(jquery插件)
2011-03-21 08:53 1346There are a few cases where you ... -
前端开发最佳实践与编程规范
2011-03-17 13:09 1111http://na.isobar.com/standards/ ... -
jquery1.5改进
2011-01-25 08:27 979jQuery1.5的改进细节 一小段jQuery代码的分析与优 ... -
Endless scroller jQuery plugin 到面面底部后在加载信息的插件
2010-12-21 08:56 1706http://pushingtheweb.com/2010/0 ... -
Reaching out of the browser sandbox using jQuery Title Alert. jquery插件tile提示来消息
2010-12-21 08:47 1267转自:http://pushingtheweb.com/201 ... -
jquery插件开发
2010-11-30 12:24 1110转自: http://www.cnblogs.com/from ... -
SQLike – a small query engine
2010-11-30 11:40 1690插件官方地址:http://www.thomasfrank.s ... -
CSS 中选择器的详解
2010-11-30 08:55 1165http://zachary-guo.iteye.com/bl ... -
【多浏览器的兼容问题】IE6.0、IE7.0 、FireFox 在样式中的不同写法
2010-11-30 08:54 1560原文出处:http://www.xianzheng.net.c ... -
JavaScript 面向对象程序设计
2010-11-30 08:17 1111近期在网上看到一篇关 ... -
jQuery 的原型关系图,让你快速对 jQuery 有个整体的把握
2010-11-30 07:51 985若干个月前,在博客园中看到一篇文章 ,内容很简单,就是一幅图 ... -
jquery 插件
2010-07-09 15:44 20980. 表单校验插件 http://www.position- ... -
jquery 几点笔记
2010-07-06 10:50 01. javascript里的函数和变量 在javascri ... -
ajax push
2009-12-24 08:56 3322很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化 ... -
javascript学习收集
2009-04-22 08:49 1176YUI中文文档 http://www.blogjava.n ...
相关推荐
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
精选毕设项目-宅男社区
精选毕设项目-扫描条形码
配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点,采用matlab+yalmip+cplex编写,两阶段模型采用CCG算法求解。 模型中一阶段变量主要包括01变量和无功优化变量,核心变量主要存在于二阶段,因此在叠加二阶段变量优化过程中更容易得到最优解,所以有限次迭代即得到收敛的结果。 模型以网损为目标,包括功率平衡、网络潮流、电压电流、蓄电池出力以及无功设备出力等约束。 复现《两阶段鲁棒优化的主动配电网动态无功优化》-熊壮壮,具体内容可自行下载了解。
comsol光栅仿真 计算复合波导光栅准BIC增强古斯汉森位移
精选毕设项目-车源宝寻车广场
数字农业产业项目整体解决方案
精选毕设项目-幸运大抽奖
SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: [1]. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; [2]. 求解机械臂在给定末端位姿下的有效臂角范围,有效即在该区间内机械臂关节角度不会超出关节限位; [3]. 以避关节限位为目标在有效臂角区间内进行最优臂角的选取,进而获取机械臂在给定末端位姿下的最优关节角度。 购前须知: 1. 代码均为个人手写,主要包含运动学建模全套代码; 2. 代码已经包含必要的注释; 包含原理推导文档,不包含绘图脚本以及urdf;
精选毕设项目-微信小程序天气源码
bmjebm-29-6.pdf
chromedriver-linux64_123.0.6273.0
精选毕设项目-腾讯云小程序一站式解决方案
精选毕设项目-仿饿了么
Spring Boot是Spring框架的一个模块,它简化了基于Spring应用程序的创建和部署过程。Spring Boot提供了快速启动Spring应用程序的能力,通过自动配置、微服务支持和独立运行的特性,使得开发者能够专注于业务逻辑,而不是配置细节。Spring Boot的核心思想是约定优于配置,它通过自动配置机制,根据项目中添加的依赖自动配置Spring应用。这大大减少了配置文件的编写,提高了开发效率。Spring Boot还支持嵌入式服务器,如Tomcat、Jetty和Undertow,使得开发者无需部署WAR文件到外部服务器即可运行Spring应用。 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现为Oracle公司的一部分)在1995年首次发布。Java以其“编写一次,到处运行”(WORA)的特性而闻名,这一特性得益于Java虚拟机(JVM)的使用,它允许Java程序在任何安装了相应JVM的平台上运行,而无需重新编译。Java语言设计之初就是为了跨平台,同时具备面向对象、并发、安全和健壮性等特点。 Java语言广泛应用于企业级应用、移动应用、桌面应用、游戏开发、云计算和物联网等领域。它的语法结构清晰,易于学习和使用,同时提供了丰富的API库,支持多种编程范式,包括面向对象、命令式、函数式和并发编程。Java的强类型系统和自动内存管理减少了程序错误和内存泄漏的风险。随着Java的不断更新和发展,它已经成为一个成熟的生态系统,拥有庞大的开发者社区和持续的技术创新。Java 8引入了Lambda表达式,进一步简化了并发编程和函数式编程的实现。Java 9及以后的版本继续在模块化、性能和安全性方面进行改进,确保Java语言能够适应不断变化的技术需求和市场趋势。 MySQL是一个关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)来管理和存储数据。MySQL由瑞典MySQL AB公司开发,并于2008年被Sun Microsystems收购,随后在2010年,Oracle公司收购了Sun Microsystems,从而获得了MySQL的所有权。MySQL以其高性能、可靠性和易用性而闻名,它提供了多种特性来满足不同规模应用程序的需求。作为一个开源解决方案,MySQL拥有一个活跃的社区,不断为其发展和改进做出贡献。它的多线程功能允许同时处理多个查询,而其优化器则可以高效地执行复杂的查询操作。 随着互联网和Web应用的快速发展,MySQL已成为许多开发者和公司的首选数据库之一。它的可扩展性和灵活性使其能够处理从小规模应用到大规模企业级应用的各种需求。通过各种存储引擎,MySQL能够适应不同的数据存储和检索需求,从而为用户提供了高度的定制性和性能优化的可能性。
精选毕设项目-体育新闻赛事数据
chromedriver-linux64_122.0.6254.0
基于FPGA的硬件电子琴设计(文档+程序)
在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本线上辅导班系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此线上辅导班系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理字典管理、论坛管理、公开课管理、课程管理、课程报名管理、课程收藏管理、课程留言管理、师资力量管理、用户管理、管理员管理等功能。线上辅导班系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:线上辅导班系统;SSM框架;Mysql;自动化