在vue.js中如何整合mint-ui里的轮播图
这篇文章主要介绍了vue.js整合mint-ui里的轮播图的方法,首先我们需要初始化vue项目,然后安装mint-ui。具体内容详情大家通过学习初始化vue项目npm install -g vue-clivue init webpack demo # 中间会让你选npm yarn 等来安装依赖,我选的是yarn,因为它快些安装mint-uiyarn add mint-uimint-ui装好了,还要配置一下babel,方法跟着mint-ui的官方文档来配置就可以了下面是我配置好的 .babelrc 文件,启动的时候会报跟es2015相关的错,装一下 babel-preset-es2015 就好了{ "presets": [ ["env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } }], "stage-2", ["es2015", { "modules": false }] ], "plugins": [["component", [ { "libraryName": "mint-ui", "style": true } ]],"transform-vue-jsx", "transform-runtime"], "env": { "test": { "presets": ["env", "stage-2", "es2015"], "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] } }}集成打开创建的vue项目demo,在src里找到 components/HelloWorld.vue 文件,然后将内容换成下面内容<template> <p> <mt-swipe :auto="2000"> <mt-swipe-item v-for="item in items" :key="item.id"> <a :href="item.href" rel="external nofollow" > <img :src="item.url" class="img"/> <span class="desc"></span> </a> </mt-swipe-item> </mt-swipe> </p></template><script> import {Swipe, SwipeItem} from "mint-ui" import "mint-ui/lib/style.css" export default { components: { "mt-swipe": Swipe, "mt-swipe-item": SwipeItem }, data () { return { items: [{ title: "你的名字", href: "http://google.com", url: "http://localhost:8080/static/img1.png" }, { title: "我的名字", href: "http://baidu.com", url: "http://localhost:8080/static/img2.png" }] } } }</script><style scoped> img { width: 100%; } .mint-swipe { height: 218px; } .desc { font-weight: 600; opacity: .9; padding: 5px; height: 20px; line-height: 20px; width: 100%; color: #fff; background-color: gray; position: absolute; bottom: 0; }</style>找两张图片,名字分别是 img1.png , img2.png , 放在demo项目的static里,然后启动项目npm run dev打开浏览器:http://localhost:8080/注意1.如果发现文字都是居中的可以找到文件 App.vue 把里面的居中css代码去掉就好了1.如果页面有内边距设置一下 body 的样式 margin: 0 auto;1.页面里用的时候,必须要给类样式一个高度,要不然图片不出来 .mint-swipe { height: 218px; }上面是我整理给大家的,希望今后会对大家有帮助。相关文章:使用React如何防止出现重复渲染在nodejs中基于mssql模块如何实现封装在vue中如何实现directive功能在js中如何实现二级联动
求类似于swipe.js的js插件,可以在移动设备触摸屏滑动图片
现在触摸屏图片滑动用得比较多的是idangerous.swiper,你可以试一下。
swipe.js怎么停止自动播放
var mySwiper = new Swiper(".swiper-container",{ autoplay:false,});或者mySwiper.autoplay = false;
autojs怎么上滑屏幕
"auto";while (true) {swipe(device.width / 2, 800, device.width / 2, 500, 2000);swipe(device.width / 2, 500, device.width / 2, 800, 2000);sleep(2000)}
swipe.js怎么动态添加滑动元素
你直接百度,就有demo供你参考的。
海尔热水器JSQ22-12ust与JSQ25-13ust谁好
差不多。说实话这海尔JSQ25-13WGS(12T)燃气热水器入手总体感受还挺不错的哈,质量挺好的,外观是我喜欢的,做工用料足,款式时尚大气相当上档次。
深入理解js中的yield
上述错误的调用中,会的到如下结果 { value: 7, done: false } { value: undefined, done: true } 因为在while判断中的next也会进行消耗,导致输出结果与预期不符,得到的只是符合条件的偶数项 它的意义在于,可以在不同阶段从外部直接向内部注入不同的值来调整函数的行为(这一点是其他循环很难做到的,或要付出较大的代价才可以做到) 如果刚才没有让你有一个清晰的认识,那么这个例子一定会让你彻底明白的 next() 传参是对yield整体的传参,否则yield类似于return 在前端项目中,用的机会很少,完全可以忽略他的存在,但是在后台项目中,就显得比较重要了,因为其优越的可控性,可是极大的提升线程的效率。 目前只是根据官网,ES6规范,大站等总结出来的,但是很遗憾,目前我们的项目中由于node项目较简单,并不需要进行实际改造。 如果需要实例的话,可参考github上的一些python后端项目,调用方式稍有不同,由于js参考的python语言,他们又同为动态语言,所以原理都是相同的,用处也一样。
easyplayerjs好用不
该设备好用。EasyPlayer是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等,具备较高的可用性。EasyPlayer具备多个版本,可满足用户的多场景需求。
求大神教JS题目
都不用你们写流程这么简单
如何调用WebService接口把数据存储到数据库里而不使用JSP页面
直接用WSDL生成一个客户端,就可以调用方法了
电子表上北京时间的缩写是BJS 还是CHI
BJS,北京市的意思,chi是chicago芝加哥的意思
如何复用node.js包或代码
Meteor基于Node.js,但是却有自己的包管理系统(atmosphere)以及代码加载机制,且meteor是非异步的,这些都意味着,node.js包(npm package)和代码通常不能直接用于meteor程序。这里分享三种方法以在meteor中复用node.js包和代码。meteorhacks:npm + meteorhacks:asyncnpm+async是复用npm包最便捷的方式。meteor程序添加npm包之后,便可以在packages.json中声明包依赖,在程序中通过Meteor.npmRequire来加载包。值得一提的是,由于大部分npm包都是异步调用的,而meteor是同步运行的,所以需要某种方法将异步调用转为同步调用。async就是这样一个meteor包,添加之后,通过Async.runSync方法便可以同步地调用异步方法。具体安装、使用方法以及更多介绍,请参考文档。适配node.js代码如果需要复用的代码仅仅是个别文件、函数、片段等,可以手工修改代码以适配meteor程序。需要注意到,node.js的每一个文件都是一个模块,通过module.exports和require进行组织,但是在meteor中,每一个文件都是会被自动加载的(具体顺序参考meteor文档),通过全局变量进行跨文件调用;meteor中不能直接加载npm包;meteor框架是同步运行的(非异步)。综上,适配代码的工作包括:使用meteorhacks:npm来加载npm包修改跨文件调用方式,将原来的module.exports=xxx改为暴露全局变量,而调用方,将require(xxx)改为直接引用全局变量直接被meteor框架调用的方法,使用meteorhacks:async包,将其从异步调用改为同步调用形式创建meteor包这种方法更复杂,但是也更进阶,不仅可以封装npm包,也能封装任意node.js代码(当然需要修改、适配),更能创建新的meteor包。创建meteor包的具体方法不再赘述,参考如下:Writing Meteor Packagespackage.js docMeteor Packages Tutorial学会创建meteor包之后,只需要按照上述方法适配代码,并封装成meteor包,便可以方便地使用和分享了。参考项目meteor-submail该项目规模很小,便于分析。原始代码在submail-sdk文件夹中,其余代码为对原始代码的适配和封装。
如何复用node.js包或代码
打包成模块
meteorXJJS是什么牌子的羽毛球拍?
威克多VICTOR 羽毛球拍尖锋系列 MXJJS MX-JJS 该球拍于2012年7月上市,这是一支普通的球员签名球拍,也是尖锋系列的革命性突破。除了延续尖锋系列家族八面刀锋结构拍框以及80孔独家穿线模式外,MX-JJS在球拍三通位置加入了石墨烯强化科技。
eclipse通过jetty服务器访问不到jsp页面:报404错误
404是找不到服务器,原因一般只有几种:1.路径写错了,少了斜杠或者字母大小写等2.tomcat没启动或者没配置好即服务器没启动多试几次看看
英语wjsyzs是什么意思?
你确定这个单词是英语?怎么看都不像
JSON作为函数参数时应该如何使用
这次给大家带来JSON作为函数参数时应该如何使用,JSON作为函数参数时使用的注意事项有哪些,下面就是实战案例,一起来看一下。一直对json不太懂,最近看了一些介绍才发现,原来这个东西这么好用,下面就为大家介绍一下1、我们可以随时为一个函数添加/删除参数或在任意参数位置添加新参数,而不会像传统参数一样必须按照规定的顺序书写,而且每次添加或删除函数某个参数都要函数内容进行修改。而使用JSON作为参数可以不用考虑参数顺序。看下面代码演示:<script type="text/javascript"> <!-- //普通方法 function commonArg(name,age,desc){ var userinfo="name: "+name+","+"age: "+age+" description: "+desc; alert(userinfo); } commonArg("yemoo",22,"a boy!")//每次调用都必须按照规定的参数顺序书写,如果写成commonArg(22,"yemoo","desc")则返回信息就不对,每次都必须记忆每个参数意义及顺序 //JSON参数法 function jsonArg(info){ var userinfo="name: "+info.name+" age: "+info.age+" description: "+info.desc; alert(userinfo); } jsonArg({name:"blue",age:22,desc:"a gril?"}); jsonArg({desc:"not a people!",name:"sss",age:0}); //参数位置可以随意写 //--> </script>普通函数缺点很明显:必须记忆参数意义和顺序。而使用JSON的方法则不需要。2、使用者对函数的调用非常方便,特别是在只需要传入其中几个或一个参数时。看下面的代码演示:<script type="text/javascript"> <!-- //普通方法 function commonArg(name,age,desc){ var userinfo="name: "+(name||"empty")+" age: "+(age||0)+" description: "+desc||"empty"; alert(userinfo); } //当只需要设定后面的参数时前面每个参数都需要设置为null commonArg("tempUser"); commonArg(null,null,"a boy!"); commonArg(null,20); //JSON参数法 function jsonArg(info){ var userinfo="name: "+(info.name||"empty")+" age: "+(info.age||0)+" description: "+(info.desc||"empty"); alert(userinfo); } //每次只需要设置需要设定参数项 jsonArg({name:"tempUser"}); jsonArg({desc:"a boy!"}); jsonArg({age:20}); //--> </script>JSON方法优点很明显:每次只需传入需要的参数即可,而不用考虑其他参数。JSON真是一个好用的东西,不用在ajax方面还是在js的其他方面都体现了其方便灵活的特性,的确应该好好去挖掘和学习json。相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:使用Json.net的方法JSON字符串与JSON对象相互转化方法总结
有人有ASP_JS_Support.zxp的资源?可以分享一下不?
一个个解决过去,ie6下可能正常,随时浏览器版本的提高,很多语法不规范导致的错误、 可以用chrome审核元素,点console看错误的行号来修复问题。
与javabean,jsp,b/s构架 有关的论文参考文献
[1]飞思科技产品研发中心.JSP应用开发详解(第二版)[M].北京:电子工业出版社,2004[2]吴以欣,陈小宁.JavaScript 脚本程序设计[M].北京:人民邮电出版社,2005[3]萨师煊,王珊.数据库系统概论(第三版) [M].北京:高等教育出版社, 2000[4] 孙卫琴、李洪成.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2004[5] 曾云飞 ,基于Struts框架的电子政务研究和实现 [M].东北大学出版社 2005[6]程凯.JSP中文问题及一套整体解决方案[J].许昌学院学报,2006,25(5):77-80.[7]刘长生,谢强,丁秋林.Java应用中的汉字乱码问题分析[J].计算机技术与发展,2006,16(1):158-161[8]乐秀潘,沈琴.structs1.1与struct1s.2的比较[J].电力系统通信.2000,20(5):35—39[9]孙东卫,张冀红,李声利. 数据库访问技术研究[J].现代电子技术.2002,18(5).20-34.[10] 苟凌怡,魏生民. SQL Server 中索引的有效选取[J].计算机工程与应用, 1999,35(6): 70-71[11] 张树亮, 李超.ASP.NET 2.0+SQL Server网络应用系统开发案例精解[M].北京:清华大学出版社,2006 [12] G.E.Hobona, S.J.Abele, Philip James [J]. University of Newcastle upon Tyne, 2006[13] Mark Wutka,Alan Moffet,Kunal Mittal.Sams Teach Yourself JAVAServer Pages 2.0 with Apache Tomcat in 24 Hours[M].Sams Publishing,2003[14]James Turner,Kevin Bedell. Struts Kick Start[M]. SAMS,2004[15] Kong Michael. An environment for secure SQL/Server computing [M].Oxford University Press Inc., 1993: 149[1] 程凯. 计算机技术与应用研究[J]. 许昌学院学报,2006, 25(5):77-80[2] 赵川,丁志刚,宗宇伟等. 基于Eclipse的测试工具管理平台构建[J]. 软件世界, 2006年 14期:78-79[3] 张红梅,王磊. 计算机及网络技术应用[J]. 实验科学与技术 ,2006,4(4):39-40,50[4] 郝艳芳,廉永健. 制造业信息化[J].机电产品开发与创新 ,2006,19(4):110-112[5] 任永功,王政军. 软件技术与数据库[J]. 计算机工程 ,2006,32(5):60-62,134[6] 孙琳、李素芬. 计算机应用研究[J]. 计算机技术与发展 ,2006,16(4):209-211,214[7] 张宁等. 生物技术[J]. 高技术通讯,2006,16[12]: 1289-1293[8] 刘杰. Eclipse下插件的设计方法[J]. 程序员 ,2006(5):57-59[9] 张红梅,王磊. 在JSP中访问数据库的方法[J]. 农业图书情报学刊, 2006,18(12):142-144[10] 张宁,吴捷,杨卓,张涛. 基于SQL Server的脑电数据库的构建[J]. 广西科学院学报 ,2006 22(4):275-278[11] 卫建文,蒋咏梅. 计算机网络编程语言——JAVA[J]. 计算机系统应用, 2006(7): 67-70[12] 周观民,刘书伦等. 用Java实现多线程程序设计[J]. 计算机时代, 2006(7):61-63[13] Tsui,Frank F. JSP EM DASH A RESEARCH SIGNAL PROCESSOR IN JOSEPHSON TECHNOLOGY[C]. IBM Journal of Research and Development,Vol24, No2,1980:243-252 [14] Sanden, Bo. SYSTEMS PROGRAMMING WITH JSP:EXAMPLE - A VDU CONTROLLER[C]. Communications of the ACM,Vol28,No10,1985:1059-1067[15] Burgess, R. S. DESIGNING CODASYL DATABASE PROGRAMS USING JSP[C]. Information and Software Technology,Vol29,No3,1987:151-158[16] Javey. S. CONCEPT OF "CORRESPONDENCE" IN JSP[C]. Proceedings of the Hawaii International Conference on System Science,Vol2,1987:14-22[17] Markus Aleksy,Axel Korthaus, Martin Schader. Use Java and the CORBA realization distribute type system [J]. Journal of Pingxiang College, No.4,2005:104-105[18] Jon Titus. ECN Technical Editor:The Eclipse of stand[J]. Journal of Zhongkai Agrotechnical College,Vol.19, No.2, 2006:32-35[19] Markus Aleksy,Axel Korthaus, Martin Schader.Use Java and the CORBA realization distribute type system[J]. Journal of Pingxiang College,No.4,2005:104-105[20] W.Clay,Richardson, Donald,Avondolio. The Java high class weaves a distance:JDK 5[J]. Scientific & Technology Book Review,No.3, 2006:17-18
struts2中,jsp页面通过ajax访问了action,action如何返回一个json数据给这个jsp页面,
后台返回JsonConvert.SerializeObject(object value)这样的json数据应该可以using Newtonsoft.Json.Converters;json在这个命名空间下
找不到tld标签(jsp +structs配置问题)
导入struts的包后,会自动在WEB-INFO添入struts-bean.tld标签,可能是你在jsp页面引入该标签文件的uri写错了吧!
structs的jsp中:更新数据和更新数据有什么区别
。jsp是直接转向update.jsp这个页面 不需要Structs里面配置的 。do 是需要在structs的配置文件配置的 。。看他配置的怎么样 update.do不一定转向的就是update.jsp 也可以配置成其他jsp页面的
jsp与struts的区别
一个是页面,一个是框架。。。。完全不同的东西
使用tangram.js库如何实现js类
这篇文章主要介绍了tangram.js库实现js类的方式,结合实例形式分析了tangram.js库实现类的创建、继承等相关操作技巧,需要的朋友可以本文实例讲述了tangram.js库实现js类的方式。分享给大家供大家参考,具体如下:前面一篇//www.gxlcms.com/article/25781.htm对tangram.js库做了较为详细的介绍,这里结合实例分析一下tangram.js库实现js类的方式。代码如下:/* * Tangram * Copyright 2010 Baidu Inc. All rights reserved. * * @author: meizz * @namespace: baidu.lang.createClass * @version: 1.6.0 *////import baidu.lang;///import baidu.lang.Class;///import baidu.lang.Event;/** * 创建一个类,包括创造类的构造器、继承基类Class * @name baidu.lang.createClass * @function * @grammar baidu.lang.createClass(constructor[, options]) * @param {Function} constructor 类的构造器函数 * @param {Object} [options] * @config {string} [type] 类名 * @config {Function} [superClass] 父类,默认为baidu.lang.Class * @version 1.2 * @remark * 使用createClass能方便的创建一个带有继承关系的类。同时会为返回的类对象添加extend方法,使用obj.extend({});可以方便的扩展原型链上的方法和属性 * @see baidu.lang.Class,baidu.lang.inherits * * @returns {Object} 一个类对象 */baidu.lang.createClass = /**@function*/function(constructor, options) { options = options || {}; var superClass = options.superClass || baidu.lang.Class; // 创建新类的真构造器函数 var fn = function(){ var me = this; // 20101030 某类在添加该属性控制时,guid将不在全局instances里控制 options.decontrolled && (me.__decontrolled = true); // 继承父类的构造器 superClass.apply(me, arguments); // 全局配置 for (i in fn.options) me[i] = fn.options[i]; constructor.apply(me, arguments); for (var i=0, reg=fn["x06r"]; reg && i<reg.length; i++) { reg[i].apply(me, arguments); } }; // [TODO delete 2013] 放置全局配置,这个全局配置可以直接写到类里面 fn.options = options.options || {}; var C = function(){}, cp = constructor.prototype; C.prototype = superClass.prototype; // 继承父类的原型(prototype)链 var fp = fn.prototype = new C(); // 继承传参进来的构造器的 prototype 不会丢 for (var i in cp) fp[i] = cp[i]; // 20111122 原className参数改名为type var type = options.className || options.type; typeof type == "string" && (fp.__type = type); // 修正这种继承方式带来的 constructor 混乱的问题 fp.constructor = cp.constructor; // 给类扩展出一个静态方法,以代替 baidu.object.extend() fn.extend = function(json){ for (var i in json) { fn.prototype[i] = json[i]; } return fn; // 这个静态方法也返回类对象本身 }; return fn;};上面是我整理给大家的,希望今后会对大家有帮助。相关文章:React Native有关跨域资源出错问题在nodejs中安装最新版npm(详细教程)在js中如何实现函数去抖(详细教程)在vue-scroller中如何标记记录滚动位置
有什么办法可以限制JS起作用的范围
限制JS起作用的范围<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body><style> td{ width: 100px; height: 20px; background-color: #FF0; }</style><table> <tr> <td></td> <td id="kele"></td> <td></td> <td></td> <td></td> </tr></table><script type="text/javascript">(function (){ var kele = document.getElementById("kele"); kele.style.background = "#00F";})();</script></body></html>
如何用JS获取audio标签的已播放时长并控制进度条的width?
<audio id="audio" controls>。<source src="horse.ogg" type="audio/ogg">。<source src="horse.mp3" type="audio/mpeg">。您的浏览器不支持 audio 元素。</audio>。<script>。var audio=document.getElementById("audio")。audio.duration//播放时间。audio.currentTime//播放进度。</script>。udio是英文单词,有多种含义:Audio是AU格式一种经过压缩的数字声音格式的详写;Audio是音频的单词;Audio是听觉的单词。听觉声波作用于听觉器官,使其感受细胞兴奋并引起听神经的冲动发放传入信息,经各级听觉中枢分析后引起的感觉。
如何用JS获取audio标签的已播放时长并控制进度条的width
<audio id="audio" controls> <source src="horse.ogg" type="audio/ogg"> <source src="horse.mp3" type="audio/mpeg">您的浏览器不支持 audio 元素。</audio><script> var audio=document.getElementById("audio"); audio.duration//播放时间 audio.currentTime//播放进度</script>
JS14A晶体管时间继电器的接法是什么?它的工作原理是什么?
时间继电器(time relay)是指当加入(或去掉)输入的动作信号后,其输出电路需经过规定的准确时间才产生跳跃式变化(或触头动作)的一种继电器。是一种使用在较低的电压或较小电流的电路上,用来接通或切断较高电压、较大电流的电路的电气元件。同时,时间继电器也是一种利用电磁原理或机械原理实现延时控制的控制电器。它的种类很多,有空气阻尼型、电动型和电子型等。代替小型接触器,中间继电器的触点具有一定的带负荷能力,当负载容量比较小时,可以用来替代小型接触器使用,比如电动卷闸门和一些小家电的控制,这样的优点是不仅可以起到控制的目的,而且可以节省空间,使电器的控制部分做得比较精致,增加接点数量,这是中间继电器最常见的用法,例如,在电路控制系统中一个接触器的接点需要控制多个接触器或其他元件时而是在线路中增加一个中间继电器。一般的电路常分成主电路和控制电路两部分,继电器主要用于控制电路,接触器主要用于主电路;通过继电器可实现用一路控制信号控制另一路或几路信号的功能,完成启动、停止、联动等控制,主要控制对象是接触器;接触器的触头比较大,承载能力强,通过它来实现弱电到强电的控制,控制对象是电器。线圈通电,动铁芯在电磁力作用下动作吸合,带动动触点动作,使常闭触点分开,常开触点闭合;线圈断电,动铁芯在弹簧的作用下带动动触点复位,继电器的工作原理是当某一输入量(如电压、电流、温度、速度、压力等)达到预定数值时,使它动作,以改变控制电路的工作状态,从而实现既定的控制或保护的目的,在此过程中,继电器主要起了传递信号的作用 。
JS-10型电动机式时间继电器工作原理
时间继电器有机械式和电子式,作用都是控制电路的延时接通或断开。2只时间继电器可以组成一个闪烁电路,使灯交替的亮一会灭一会,也可以控制设备周而复始的运行一段时间再停一段时间
Windows安装Node.js报错:2503、2502怎么办
本文主要给大家介绍了关于在Windows系统下安装Node.js报错:2503、2502的解决方法,文中将解决的方法一步步介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧,希望能帮助到大家。前言Windows真的是太恶心了!!!不仅会出现大量的垃圾文件,而且有时莫名的安装不上一些软件(正常软件)。前久因为想学学Koa2,打算升级下nodejs的版本以体验下ES6、ES7的aync,await等新特性,却死活安装不上nodejs同时也卸载不了老版的nodejs,不知所措,放了一段时间,今晚想看看D3准备学学,并借助Koa做个展示性的学习练手项目,决心查查资料解决下nodejs安装报错问题。功夫不负有心人,终于得以解决,故以此文记录下。目录权限问题?首先我想是不是权限问题,于是我把要安装的目录和Windos下的Temp目录权限都设为完全控制,还是不行,绝望!设置文件目录权限绝望之际,看到网上的一篇文章完美解决,握草还是权限问题!以管理员身份用msiexec安装1、以管理员身份运行cmd命令 (Win + X, A)以管理员身份运行cmd2、用msiexec安装用msiexec安装nodejsmsiexec /package node-v8.7.0-64.msi至此,安装完成!查看nodejs版本
怎样使用AngularJS实现base64编码与解码
这次给大家带来怎样使用AngularJS实现base64编码与解码,使用AngularJS实现base64编码与解码的注意事项有哪些,下面就是实战案例,一起来看一下。<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>base64加密</title> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> <script> function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); } return output; } // public method for decoding this.decode = function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9+/=]/g, ""); while (i < input.length) { enc1 = _keyStr.indexOf(input.charAt(i++)); enc2 = _keyStr.indexOf(input.charAt(i++)); enc3 = _keyStr.indexOf(input.charAt(i++)); enc4 = _keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } output = _utf8_decode(output); return output; } // private method for UTF-8 encoding _utf8_encode = function (string) { string = string.replace(/ /g, " "); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } // private method for UTF-8 decoding _utf8_decode = function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while (i < utftext.length) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if ((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i + 1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i + 1); c3 = utftext.charCodeAt(i + 2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } </script></head><body><p id="p1">PHAgc3R5bGU9ImxpbmUtaGVpZ2h0OiAyZW07Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxNnB4OyBmb250LWZhbWlseTog5b6u6L2v6ZuF6buRLCAnTWljcm9zb2Z0IFlhSGVpJzsiPu+7vzxpbWcgc3JjPSJodHRwOi8vd3d3LmpiNTEubmV0L2ltYWdlcy9sb2dvLmdpZiIgdGl0bGU9ImxvZ28uZ2lmIi8+PC9zcGFuPjwvcD48cCBzdHlsZT0idGV4dC1pbmRlbnQ6IDJlbTsgbGluZS1oZWlnaHQ6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE2cHg7IGZvbnQtZmFtaWx5OiDlvq7ova/pm4Xpu5EsICdNaWNyb3NvZnQgWWFIZWknOyI+5qyi6L+O6K6/6Zeu6ISa5pys5LmL5a62PC9zcGFuPjwvcD48cCBzdHlsZT0ibWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7IHBhZGRpbmc6IDBweDsgdGV4dC1pbmRlbnQ6IDJlbTsgY29sb3I6IHJnYigzNCwgMzQsIDM0KTsgZm9udC1mYW1pbHk6ICdNaWNyb3NvZnQgWWFIZWknLCDlvq7ova/pm4Xpu5E7IGZvbnQtc2l6ZTogMTRweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE2cHg7IGZvbnQtZmFtaWx5OiDlvq7ova/pm4Xpu5EsICdNaWNyb3NvZnQgWWFIZWknOyI+6ISa5pys5LmL5a625piv5Zu95YaF5LiT5Lia55qE572R56uZ5bu66K6+6LWE5rqQ44CB6ISa5pys57yW56iL5a2m5Lmg57G7572R56uZ77yM5o+Q5L6bYXNw44CBcGhw44CBYXNwLm5ldOOAgWphdmFzY3JpcHTjgIFqcXVlcnnjgIF2YnNjcmlwdOOAgWRvc+aJueWkhOeQhuOAgee9kemhteWItuS9nOOAgee9kee7nOe8lueoi+OAgee9keermeW7uuiuvuetiee8lueoi+i1hOaWmeOAgjwvc3Bhbj48L3A+PHAgc3R5bGU9Im1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4OyBwYWRkaW5nOiAwcHg7IHRleHQtaW5kZW50OiAyZW07IGNvbG9yOiByZ2IoMzQsIDM0LCAzNCk7IGZvbnQtZmFtaWx5OiAnTWljcm9zb2Z0IFlhSGVpJywg5b6u6L2v6ZuF6buROyBmb250LXNpemU6IDE0cHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiAyZW07Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxNnB4OyBmb250LWZhbWlseTog5b6u6L2v6ZuF6buRLCAnTWljcm9zb2Z0IFlhSGVpJzsiPui/memHjOi/mOaPkOS+m+Wkp+mHj+eahOa6kOeggeOAgeeUteWtkOS5puS4i+i9ve+8jOS7peWPiuWQhOenjeW4uOingeeahOWunueUqOWcqOe6v+W3peWFtzwvc3Bhbj48L3A+</p><script> var b = new Base64(); str = document.getElementById("p1").innerHTML; //解密 str = b.decode(str); document.getElementById("p1").innerHTML = str;</script></body></html>相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!推荐阅读:在不使用select的情况下vue怎么实现下拉框功能webpack-dev-server配置与使用步奏详解
WXWTZXRKS,JBJS,YNCZYG 这是每个拼音的第一个字母,帮帮忙翻译成为汉语,前面五个汉字是:我希望躺在
wxwtzxrks 我希望躺在向日葵上jbjs 既不沮丧ynczyg 也能穿着阳光大概这么个意思吧
JS如何使用贪心算法解决找零问题
在现实生活中,经常遇到找零问题,假设有数目不限的面值为20,10,5,1的硬币。 给出需要找零数,求出找零方案,要求:使用数目最少的硬币。对于此类问题,贪心算法采取的方式是找钱时,总是选取可供找钱的硬币的最大值。比如,需要找钱数为25时,找钱方式为20+5,而不是10+10+5。贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。本文我们就和大家分享JS使用贪心算法解决找零问题示例。可惜的是,它需要证明后才能真正运用到题目的算法中。结果是:需要说明的是,在一些情况下,找零钱问题使用贪心算法并不能得到整体最优解,其结果可能只是最优解的很好近似。比如,如果提供找零的面值是11,5,1,找零15。使用贪心算法找零方式为11+1+1+1+1,需要五枚硬币而最优解为5+5+5,只需要3枚硬币。
js如何创建不可变的对象
对象的不变性意味着我们不希望对象在创建后以任何方式更改(将它们设置为只读类型)。假设我们需要定义一个 car 对象,并在整个项目中使用它的属性来执行操作。我们不能允许错误地修改任何数据。const myTesla = { maxSpeed: 155, batteryLife: 300, weight: 2300};Object.preventExtensions() 防止扩展此方法可防止向现有对象添加新属性,preventExtensions() 是不可逆的操作,我们永远不能再向对象添加额外的属性。Object.isExtensible(myTesla); // trueObject.preventExtensions(myTesla);Object.isExtensible(myTesla); // falsemyTesla.color = "blue";console.log(myTesla.color) // undefinedObject.seal() 密封它可以防止添加或删除属性,seal() 还可以防止修改属性描述符。Object.isSealed(myTesla); // falseObject.seal(myTesla);Object.isSealed(myTesla); // truemyTesla.color = "blue";console.log(myTesla.color); // undefineddelete myTesla.batteryLife; // falseconsole.log(myTesla.batteryLife); // 300Object.defineProperty(myTesla, "batteryLife"); // TypeError: Cannot redefine property: batteryLifeObject.freeze() 冻结它的作用与 Object.seal() 相同,而且它使属性不可写。Object.isFrozen(myTesla); // falseObject.freeze(myTesla);Object.isFrozen(myTesla); // truemyTesla.color = "blue";console.log(myTesla.color); // undefineddelete myTesla.batteryLife;console.log(myTesla.batteryLife); // 300Object.defineProperty(myTesla, "batteryLife"); // TypeError: Cannot redefine property: batteryLifemyTesla.batteryLife = 400;console.log(myTesla.batteryLife); // 300注意:如果希望在尝试修改不可变对象时抛出错误,请使用严格模式。推荐教程:js入门教程
js如何实现木马轮播图效果
首先,我们来看一下木马轮播图效果:具体代码如下:(推荐教程:js教程)html部分代码:<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>旋转木马轮播图</title> <link rel="stylesheet" href="css/myStyle.css" rel="external nofollow" /> <script type="text/javascript" src="js/animate.js"></script> <script type="text/javascript" src="js/my.js"></script></head><body><div id="wrap"> <div id="slide"> <ul> <li><a href="#"><img src="images/slidepic1.jpg" alt=""/></a></li> <li><a href="#"><img src="images/slidepic2.jpg" alt=""/></a></li> <li><a href="#"><img src="images/slidepic3.jpg" alt=""/></a></li> <li><a href="#"><img src="images/slidepic4.jpg" alt=""/></a></li> <li><a href="#"><img src="images/slidepic5.jpg" alt=""/></a></li> </ul> <div id="arrow"> <a href="javascript:;" id="arrLeft"></a> <a href="javascript:;" id="arrRight"></a> </div> </div></div></body></html>在html部分引入的myStyle.css文件部分代码@charset "UTF-8";blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul{ margin:0; padding:0}body,button,input,select,textarea{ font:12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif; color:#666;}ol,ul{ list-style:none}a{ text-decoration:none}fieldset,img{ border:0; vertical-align:top;}a,input,button,select,textarea{ outline:none}a,button{ cursor:pointer}.wrap{ width:1200px; margin:100px auto;}.slide{ height:500px; position: relative;}.slide li{ position:absolute; left:200px; top:0}.slide li img{ width:100%}.arrow{ opacity:0;}.prev ,.next{ width:76px; height:112px; position:absolute; top:50%; margin-top:-56px; background:url(../images/prev.png) no-repeat; z-index:99;}.next{ right:0; background-image:url(../images/next.png);}在html部分引入的animate.js文件部分代码/** * Created by RENPINGSHENG on 2018/4/6. */function animate(obj,json,fn) { clearInterval(obj.timer); obj.timer = setInterval(function () { var flag = true; for(var k in json){ if( k == "opacity"){ var leader = getStyle(obj,k) * 100; var target = json[k] * 100; var step = (target - leader) /10; step = step > 0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader /100; } else if ( k == "zIndex"){ obj.style[k] = json[k]; }else{ var leader = parseInt(getStyle(obj,k)) || 0; var target = json[k]; var step = (target - leader) /10; step = step >0 ? Math.ceil(step) : Math.floor(step); leader = leader + step; obj.style[k] = leader + "px"; } console.log("target:" + target + "leader:" + leader + "step:" + step); if (leader != target){ flag = false; } } if (flag){ clearInterval(obj.timer); if(fn){ fn(); } } },15)}function getStyle(obj,attr){ if (obj.currentStyle){ return obj.currentStyle[attr]; }else{ return window.getComputedStyle(obj,null)[attr]; }}在html部分引入的my.js文件部分代码/** * Created by RENPINGSHENG on 2018/4/6. */window.onload = function () { var wrap = document.getElementById("wrap"); var slide = document.getElementById("slide"); var ul = slide.children[0]; var lis = ul.children; var arrow = document.getElementById("arrow"); var arrRight = document.getElementById("arrRight"); var arrLeft = document.getElementById("arrLeft"); var config = [ { width:400, top:20, left:50, opacity:0.2, zIndex:2 }, { width:600, top:70, left:0, opacity:0.8, zIndex:3 }, { width:800, top:100, left:200, opacity:1, zIndex:4 }, { width:600, top:70, left:600, opacity:0.8, zIndex:3 }, { width:400, top:20, left:750, opacity:0.2, zIndex:2 } ]; wrap.onmouseover = function () { animate(arrow,{"opacity":1}); } wrap.onmouseout = function () { animate(arrow,{"opacity":0}); } function assign() { for(var i = 0;i < lis.length;i++){ animate(lis[i],config[i],function(){ flag = true; }) } } var flag = true; assign(); arrRight.onclick = function () { flag = false; config.push(config.shift()); assign(); }; arrLeft.onclick = function () { flag = false; config.unshift(config.pop()); assign(); }}整个页面的文件结构如下图所示:更多炫酷CSS3、html5、javascript特效代码,尽在:js特效大全
以下哪些对象不是jsp页面中包含的,可直接使用的隐藏对象
1、异常的处理,可在该方法的代码段中包含3类代码:(try)、(catch)和finally代码块。2、jsp主要内置对象有:(request)、(response)、(session)、(application)、(pageContext)、(exception)、out、config、page。3、JDBC的主要任务是:(连接数据库)、(发送sql语句)、(得到返回结果)。4、在一个应用程序中不同的页面共享数据时,最好的JSP内置对象为(session)。5、JSP是(sun)公司倡导,由多家公司参与一起建立的一种动态网页技术标准,主要用于开发动态网页。6、JDBC中(Connection)接口用于连接数据库。7、如果要获取请求客户端的IP地址,应使用(request)对象。10、JSP是(sun)公司倡导,由多家公司参与一起建立的一种动态网页技术标准,主要用于开发动态网页。1、在传统的HTML页面中加入(D)就构成了一个JSP页面文件。A、JAVA程序片B、JSP标签C、用“”标记符号括起来的程序D、JAVA程序片和JSP标签2、假设在helloapp应用中有一个hello.jsp,它的文件路径如下:%JAVA_HOME%/webapps/helloapp/hello/hello.jsp那么在浏览器端访问hello.jsp的URL是什么?(c)A、HelloServlet.class6、在客户端浏览器的源代码中可以看到(b)A、JSP注释B、HTML注释C、JSP注释和HTML注释D、JAVA注释7、page指令的作用是:(a)A、用来定义整个JSP页面的一些属性和这些属性的值B、用来在JSP页面内某处嵌入一个文件C、使该JSP页面动态包含一个文件D、指示JSP页面加载Javaplugin8、page指令的import属性的作用是(c)A、定义JSP页面响应的MIME类型B、定义JSP页面使用的脚本语言C、为JSP页面引入JAVA包中的类D、定义JSP页面字符的编码9、page指令的(c)属性可以设置JSP页面是否可多线程访问A、sessionB、bufferC、isThreadSafeD、info问题补充:16、在JSP中使用标记时,不会出现的属性是:(c)A.nameB.propertyC.valueD.以上皆不会出现17、Page指令用于定义JSP文件中的全局属性,下列关于该指令用法的描述不正确的是:(d)A.作用于整个JSP页面。B.可以在一个页面中使用多个指令。C.为增强程序的可读性,建议将指令放在JSP文件的开头,但不是必须的。D.指令中的属性只能出现一次。18、在JSP中调用JavaBean时不会用到的标记是:(a)A.B.C.D.19、关于JavaBean正确的说法是:(b)A、Java文件与Bean所定义的类名可以不同,但一定要注意区分字母的大小写B、在JSP文件中引用Bean,其实就是用语句C、被引用的Bean文件的文件名后缀为.javaD、Bean文件放在任何目录下都可以被引用
如何使用JS+HTML+CSS来实现轮播效果
这篇文章主要为大家详细介绍了JS+HTML+CSS实现轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下1.lunbo.html代码:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>大轮播</title> <link rel="stylesheet" type="text/css" href="CSS/lunbo.css"/> <script src="JS/lunbo.js" type="text/javascript"></script> </head> <body> <p id="container"> <p id="list" style="left: -1350px;"> <img src="image/banner_3.jpg"/> <img src="image/banner_1.jpg"/> <img src="image/banner_2.jpg"/> <img src="image/banner_3.jpg"> <img src="image/banner_1.jpg"/></p> <p id="buttons"> <span index="1"></span> <span index="2"></span> <span index="3"></span> </p> <a href="javascript:;" id="prev" class="arrow" style="font-size:100px; text-align:center;"><</a> <a href="javascript:;" id="next" class="arrow" style="font-size:100px; text-align:center;">></a></p> </body> </html>2.CSS/lunbo.css代码:body { margin: 0px; padding: 0px; width: 1350px; height: 618px; } a { text-decoration: none; } #container { width: 1350px; height: 618px; overflow: hidden; position: relative; border-top: 1px solid #ac6a0a; } #list { width: 6750px; height: 618px; position: absolute; z-index: 1; } #list img { float: left; width: 1350px; height: 618px; } #buttons { position: absolute; height: 20px; width: 60px; z-index: 2; bottom: 20px; left: 50%; } #buttons span { cursor: pointer; float: left; border: 1px solid #ad6a0a; width: 10px; height: 10px; -webkit-border-radius: 50%; -moz-border-radius: 50%; border-radius: 50%; margin-right: 5px; } #buttons .on { background: orangered; } .arrow { cursor: pointer; display: none; line-height: 100px; text-align: center; width: 40px; height: 40px; position: absolute; z-index: 2; top: 180px; background-color: RGBA(0, 0, 0, 0); color: #fff; } .arrow:hover { background-color: RGBA(0, 0, 0, 0); } #container:hover .arrow { display: block; } #prev { left: 10px; color: #ffffff; } #next { right: 10px; color: #ffffff; }3.JS/lunbo.js代码:window.onload = function () { var container = document.getElementById("container"); var list = document.getElementById("list"); var buttons = document.getElementById("buttons").getElementsByTagName("span"); var prev = document.getElementById("prev"); var next = document.getElementById("next"); var index = 1; var len = 3; var animated = false; var interval = 3000; var timer; var size = 1350; function animate(offset) { if (offset == 0) { return; } animated = true; var time = 300; var inteval = 10; var speed = offset / (time / inteval); console.log("speed:" + speed); var left = parseInt(list.style.left) + offset; var go = function () { if ((speed > 0 && parseInt(list.style.left) < left) || (speed < 0 && parseInt(list.style.left) > left)) { list.style.left = parseInt(list.style.left) + speed + "px"; console.log(list.style.left); setTimeout(go, inteval); } else { list.style.left = left + "px"; if (left > -200) { list.style.left = -size * len + "px"; } if (left < ( -size * len)) { list.style.left = "-" + size + "px"; } animated = false; console.log("left:" + list.style.left); } } go(); } function showButton() { for (var i = 0; i < buttons.length; i++) { if (buttons[i].className == "on") { buttons[i].className = ""; break; } } buttons[index - 1].className = "on"; } function play() { timer = setTimeout(function () { next.onclick(); play(); }, interval); } function stop() { clearTimeout(timer); } next.onclick = function () { if (animated) { return; } if (index == len) { index = 1; } else { index += 1; } animate(-size); showButton(); } prev.onclick = function () { if (animated) { return; } if (index == 1) { index = len; } else { index -= 1; } animate(size); showButton(); } for (var i = 0; i < buttons.length; i++) { buttons[i].onclick = function () { if (animated) { return; } if (this.className == "on") { return; } var myIndex = parseInt(this.getAttribute("index")); var offset = -size * (myIndex - index); animate(offset); index = myIndex; showButton(); } } container.onmouseover = stop; container.onmouseout = play; play(); };上面是我整理给大家的,希望今后会对大家有帮助。相关文章:在jQuery中如何使用EasyUI window窗口在JS中如何实现十字坐标跟随鼠标效果使用Angular4有关图片路径不安全的问题在Webpack中如何构建Electron应用
js14p时间继电器接线图
如图所示:
jsp 能用freemarker标签么
在jsp页面中使用FreeMarker标签,需要在html引入相应的标签,如下步骤: 1.在web.xml文件中启动JspSupportServlet: 在web.xml文件中作如下配置 Xml代码 <servlet> <servlet-name>JspSupportServlet</servlet-name> <servlet-class> org.apache.struts2.views.JspSupportServlet </servlet-class> <!--配置JspSupportServlet自启动--> <load-on-startup>1</load-on-startup> </servlet> 2.在FreeMarker模板文件中使用“assign指令”导入标签库 Java代码 <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 3.编写登录页面FTL文件: Html代码 <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <html> <head> <title>登录页面</title> </head> <body> 登陆 <@s.form action="Login.action"> <@s.textfield name="username" label="用户名"/> <@s.textfield name="password" label="密码"/> <@s.submit value="提交"/> </@s.form> 提示:${name1}=${name2} </body> </html> 注意: name1和name2属性,是后面从Action里面获取的属性,这里是为了验证在模版中获取属性值 WEB容器默认不会处理 FreeMarker模板页面,如果直接通过浏览器直接请求该页面,否则看到的不是我们想要的结果,而是该模板页面的源代码
freemarker怎么使用CSS样式表以及JS文件
html里边怎么用freemarker用,一样的
freemarker 需要引用js吗
要的在action中可以设置项目的根路径 /xiangmupages/map.put("basePath","/xiangmu/");freemarker是根据项目的根路径开始找的 href="${basePath}pages/...运行结果:< link rel="stylesheet" type="text/css" href="/xiangmu/pages/ww/jschart/style.css" / >< script type="text/javascript" src="/xiangmu/pages/ww/jschart/amcharts.js" >< /script > 分享:
为啥freemarker比jsp慢
因为freemarker要转化成html等。freemarker 布局不错。
freemarker和jsp的区别
jsp是大家最熟悉的技术优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。velocity是较早出现的用于代替jsp的模板语言优点:1、不能编写java代码,可以实现严格的mvc分离2、性能良好,据说比jsp性能还要好些3、使用表达式语言,据说jsp的表达式语言就是学velocity的缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多。3、对jsp标签支持不够好freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便
"freemarker"和"jsp"的不同?
"freemarker"和"jsp"的区别和联系有:一、jsp优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。二、freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离
freemarker和"jsp"的不同?
"freemarker"和"jsp"的区别和联系有:一、jsp优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。二、freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离
freemarker和jsp的区别
运行机制就不大一样,jsp是编译成继承自servlet的class文件,运行jsp就是运行一个servlet而freemarker就是套模板,通过模板+内容直接生成HTML然后输出从开发角度来说freemarker 自带一套模板语言,语法实现更简单直观,而且可以通过marco宏编写控件,如果宏无法满足,freemarker也还提供了很多JAVA扩展接口。而JSP不管JSTL还是其他,都是靠taglib实现的,taglib的效率其实并不高,所以在复杂页面的渲染上 ,freemarker会明显高于jsp同时 ,freemarker也不仅仅局限于B/S应用,可以广泛应用到比如代码生成、票据打印模板等各个方面
freemarker和jstl的区别
JSTL是SUN推出的标准,它不依赖与任何框架,只要将jar包引入,并在页面中引入即可使用,JSTL的流行依赖于它强大的标签库。而FREEMARKER是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。
freemarker怎么使用CSS样式表以及JS文件
freemarker文件还是html代码占多数,即使是freemarker代码,也会经过服务器翻译成html代码返回到浏览器端,所以说,你可以在freemarker文件里,直接用html的语法引入CSS和JS。说白了,freemarker只是辅助你写html文件而已,你当做写html文件就行了,不用想那么复杂。如下代码,只有标记到的地方是freemarker语法,其余都是html语法<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><!-- 这句是freemaker --><title>${webSite.title!}</title><!-- 这句的base是freemaker,其余不是 --><script src="${base}/resource/plugin/require/require.js"></script></head><body><!-- 这句的user.name是freemaker,其余不是 --><h1>欢迎您,${user.name}</h1><!-- 这句是freemaker --><#include "body.html"></body></html>
freemarker如何读取js变量
什么需求要获取js变量???
Jsp 和Freemarker 各自的优点:
jsp是大家最熟悉的技术优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。velocity是较早出现的用于代替jsp的模板语言优点:1、不能编写java代码,可以实现严格的mvc分离2、性能良好,据说比jsp性能还要好些3、使用表达式语言,据说jsp的表达式语言就是学velocity的缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多。3、对jsp标签支持不够好freemarker优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错3、对jsp标签支持良好4、内置大量常用功能,使用非常方便5、宏定义(类似jsp标签)非常方便6、使用表达式语言缺点:1、不是官方标准2、用户群体和第三方标签库没有jsp多选择freemarker的原因:1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。2、宏定义比jsp tag方便3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便4、支持jsp标签5、可以实现严格的mvc分离
jsp中freemarker 数字格式化
一 使用内建函数 c 特点 不管其表现形式是怎样的( 例如" " " " " " " " " ") 只要小数分割符是 它就能转化成计算机能够识别的字符串形式 而且都是 计算机处理的时候是没有那些所谓的千位分隔符的(空格或逗号) 而且计算机支持的最大的小数点后面的位数是 位 目前来说 已经够我们用了 用法: 假设strmun是一个字符串形式的数字 则可以这样写 ${strnum?c} 例如${" "?c} 值为 可能用处 对一些表单允许用户按照个人习惯输入数字 提交的时候统一转换 二 使用预定义的数字格式 有四种预定义的数字格式 分别是puter(跟内建函数c功能一样 用法不一样) currency(货币格式) number(数字格式) percent(百分比形式) 特点 这些格式的明确含义是本地化(国家)指定的 受 Java 平台安装环境所控制 而不是 FreeMarker 所以不建议用这些函数 而且受默认数字格式的影响 用法不灵活 三 使用类似于Java中数字格式语法形式 特点 例如" #" 左边的 的个数代表整数部分最少为多少位 右边 #"的个数代表小数部分最多为多少位;例如" ## #"表示整数部分的千位分割符是 小数部分最多保留两位 最少保留一位;例如" ##%"以百分比的形式表示 小数部分最多两位 用法: 假设strnum是一个数字 则可以这样写${strnum?string(" ## #")} 例如${ ?string(" ## #")} 值为 注意 数字格式是本地化敏感的 不过我们一般都会给freemarker设置默认的本地化语言 问题不大 可能用处 当在某一个地方突然要用到数字格式时 调用 string 函数是可以的 当在很多地方都需要用到数字格式是 这样处理太麻烦了 可以考虑设置默认的数字格式化形式 四 局部设置 特点 如果在某个页面 或者某几个页面(其它页面可import进来) 用到的数字格式化是相同的 可考虑统一配置数字的格式化形式 用法 只需在用到需要格式化的数字之前 设置就可以了 格式如下 <#setting number_format=" ## ##"> 其中" ## ##"的内容是采用类似于java中数字格式的语法形式 也就是以上的第三点 注意 如果用在一个页面 则整个页面默认就是那种格式 除非用string函数覆盖了默认的格式 同样的 如果放在一个公共的页面 其它页面只要include它 也会是同样的格式 五 全局设置 特点 在所有的页面都默认提供数字的格式化形式 用法 (针对spring) 在freemarker的配置文件中设置其默认的数字格式化形式 如下 代码如下 < property name = "freemarkerSettings" > < props> < prop key = "number_format"> ## 六 舍入处理 有几种舍入处理方式 分别是 round floor ceiling 和string(" ") 特点 前面三种 从字面上很好理解 我们也经常使用 要说的最后一种 先看一个例子 ?string(" ")和 ?string(" ") 的值都是 说明如下 在金融和统计学中 四舍五入都是根据所谓的一半原则 这就意味着对最近的“邻居”进行四舍五入 除非离两个邻居距离相等 这种情况下 它四舍五入到偶数的邻居 如果你注意看 和 的四舍五入的话 这在上面的示例中是可以看到的 两个都被四舍五入到 因为 是偶数 但 和 是奇数 用法 假设strnum是一个数字 则可以这样写${strnum?round(floor/ceiling)} 或者${strmun?string(" ")} 可能用法 可用在一些对数字精确度不高的情况(分页处理时也许有用) 一些对小数敏感的 还是用 string函数 例如 ${num?string( )} 如果小数点后不足两位 用 代替 ${num?string( # ## )} 如果小数点后多余两位 就只保留两位 否则输出实际值 输出为 ${num?string( ### )} 输出为 整数部分每三位用 分割 并且保证小数点后保留两位 不足用 代替 ${num?string( ### ## )} 输出为 整数部分每三位用 分割 并且小数点后多余两位就只保留两位 不足两位就取实际位数 可以不不包含小数点 ${num?string( )} 输出为 整数部分如果不足三位( ) 前面用 补齐 否则取实际的整数位 ${num?string( ### )} 等价于 ${num?string( # )} 输出为 freemarker数字格式化带来的操作问题 freemarker在解析数据格式的时候 自动默认将数字按 为分割( ) 这个问题给操作带来一定的额外处理复杂度 解决方法有如下几种 在模板中直接加 toString()转化数字为字符串 如 ${languageList id toString()}; 在freemarker配置文件freemarker properties加 <#setting number_format="#">或者 <#setting number_format=" ">; 在模板中直接加<#setting number_format="#">或者<#setting number_format=" "> 如 <#if AdminLanguagePaginationMsg?exists> <#setting number_format="#"> 对于数字的格式化 可采用strng 和number_format 设置 数字格式化的优先级 string优先级最高 配置文件配置的优先级最低 在页面setting的优先级在两者之间 lishixinzhi/Article/program/Java/JSP/201311/20001
【nodejs】网易云信短信接入&融云IM-token获取
短信接入文档 在网易云信管理中心->应用管理->自己的应用里查看appkey和appsecret 需要三样东西来生成签名 如法炮制,把请求头改成符合他条件的就好 文档 融云文档真是比网易的强太多
js如何实现金额小写转换成大写
本文主要和大家分享js如何实现金额小写转换成大写,主要以代码的形式和大家分享,希望能帮助到大家。//金额转大写 function DX(n) { if(!/^(0|[1-9]d*)(.d+)?$/.test(n)) return ""; var unit = "仟佰拾亿仟佰拾万仟佰拾元角分", str = ""; n += "00"; var p = n.indexOf("."); if(p >= 0) n = n.substring(0, p) + n.substr(p + 1, 2); unit = unit.substr(unit.length - n.length); for(var i = 0; i < n.length; i++) return str.replace(/零(仟|佰|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整"); }
如何在Linux上安装Node.js_node.js
Node.js 是建立在谷歌的 V8 JavaScript 引擎服务器端的软件平台上。在构建高性能的服务器端应用程序上,Node.js 在 JavaScript 中已是首选方案。是什么让使用 Node.js 库和应用程序的庞大生态系统来开发服务器后台变得如此流行。Node.js 自带一个被称为 npm 的命令行工具可以让你轻松地安装它,进行版本控制并使用 npm 的在线仓库来管理 Node.js 库和应用程序的依赖关系。在本教程中,我将介绍 如何在主流 Linux 发行版上安装 Node.js,包括 Debian,Ubuntu,Fedora 和 CentOS 。Node.js 在一些发行版上有预构建的程序包(如,Fedora 或 Ubuntu),而在其他发行版上你需要通过源码安装。由于 Node.js 发展比较快,建议从源码安装最新版而不是安装一个过时的预构建的程序包。最新的 Node.js 自带 npm(Node.js 的包管理器),让你可以轻松的安装 Node.js 的外部模块。在 Debian 上安装 Node.js on从 Debian 8 (Jessie)开始,Node.js 已被纳入官方软件仓库。因此,你可以使用如下方式安装它:$ sudo apt-get install npm在 Debian 7 (Wheezy) 以前的版本中,你需要使用下面的方式来源码安装:$ sudo apt-get install python g++ make$ wget http://nodejs.org/dist/node-latest.tar.gz$ tar xvfvz node-latest.tar.gz$ cd node-v0.10.21 (replace a version with your own)$ ./configure$ make$ sudo make install在 Ubuntu 或 Linux Mint 中安装 Node.jsNode.js 被包含在 Ubuntu(13.04 及更高版本)。因此,安装非常简单。以下方式将安装 Node.js 和 npm。$ sudo apt-get install npm$ sudo ln -s /usr/bin/nodejs /usr/bin/node而 Ubuntu 中的 Node.js 可能版本比较老,你可以从 其 PPA 中安装最新的版本。$ sudo apt-get install python-software-properties python g++ make$ sudo add-apt-repository -y ppa:chris-lea/node.js$ sudo apt-get update$ sudo apt-get install npm在 Fedora 中安装 Node.jsNode.js 被包含在 Fedora 的 base 仓库中。因此,你可以在 Fedora 中用 yum 安装 Node.js。$ sudo yum install npm如果你想安装 Node.js 的最新版本,可以按照以下步骤使用源码来安装。$ sudo yum groupinstall "Development Tools"$ wget http://nodejs.org/dist/node-latest.tar.gz$ tar xvfvz node-latest.tar.gz$ cd node-v0.10.21 (replace a version with your own)$ ./configure$ make$ sudo make install在 CentOS 或 RHEL 中安装 Node.js在 CentOS 使用 yum 包管理器来安装 Node.js,首先启用 EPEL 软件库,然后运行:$ sudo yum install npm如果你想在 CentOS 中安装最新版的 Node.js,其安装步骤和在 Fedora 中的相同。在 Arch Linux 上安装 Node.jsNode.js 在 Arch Linux 的社区库中可以找到。所以安装很简单,只要运行:$ sudo pacman -S nodejs npm检查 Node.js 的版本一旦你已经安装了 Node.js,你可以使用如下所示的方法检查 Node.js 的版本。$ node --version
如何在NodeJS项目中使用ES6
本篇文章主要介绍了详解如何在NodeJS项目中优雅的使用ES6,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性。只是在使用的时候需要在node后面加上参数:--harmony。但是,即使如此node也还是没有支持全部的ES6特性。所以这个时候就需要用到Babel了。项目地址:https://github.com/future-challenger/petshop现在开始Babel在开始使用Babel之前,假设1.你已经安装了nodejs,并且已经熟悉了Js。2.你也可以使用npm安装各种依赖包。3.而且你也对ES6(后来改为ES2015)有一定程度的熟悉。同时假设你已经安装了yarn,并且也熟悉了yarn。Yarn最大的优点就是它比npm要快很多,因为yarn只把需要的库下载一次,之后用到的时候直接使用本地缓存的版本。npm每次都会下载这些库。这简直就是浪费生命。如果你还没有安装yarn,也没有关系,下面也会有npm的使用方法。接下来开始安装配置Babel。安装babel-cliyarn add babel-cli --dev // npm install --save-dev babel-cli安装babel的presets。yarn add babel-preset-es2015 --dev // npm install --save-dev babel-preset-es2015这个时候你就可以使用ES2015的特性了。但是,这还不够,比如我不想用Promise我想用更加方便的async/await语法。只有es2015这个preset是不够的。Babel的plugin和presetBabel本身不处理语言特性的转码。这些功能都是由plugin和preset实现的(preset也是一个plugin的集合)。如上文所述,要使用es2015的内容就需要安装babel-preset-es2015这个preset。要使用async/await那么就需要安装对应的preset或者插件。为了简单我们安装preset:babel-preset-stage-0。preset stage-0包含了async/await相关的插件: babel-plugin-syntax-async-functions、babel-plugin-transform-regenerator。yarn add babel-preset-stage-0 --dev // npm install --save-dev babel-preset-stage-0这样还是不能在项目中使用es7的async/await了。还需要更多的配置,有两种方法可以达到目的:1.使用babel-polyfill。有一个不好地地方,babel-polyfill会污染global对象,所以不适合于library之类的使用。仅适合于web app使用。2.使用babel运行时转码工具,transform-runtime插件。使用这个方法正好弥补了上面的方法的不足之处。它是尤其适合于library一类的项目使用。分别介绍这两种方法。 安装babel-polyfill:yarn add babel-polyfill --dev // npm install --save-dev babel-polyfill之后,在你的项目的入口文件的最上方引入babel-polyfill。比如我现在有一个Express的Web App,那么的入口文件就是开启这个app的index.js文件。在这个文件的最上方引入polyfill,require("babel-polyfill")。或者你的入口文件已经是ES2015的写法了,那么就直接import,import "babel-polyfill"。使用transform-runtime也非常简单。安装:yarn add babel-plugin-transform-runtime --dev // npm install --save-dev babel-plugin-transform-runtime另外还需要安装babel-runtime:yarn add babel-runtime // npm install --save babel-runtime之后在.babelrc文件中添加如下的配置,两个二选其一即可:// without options{ "plugins": ["transform-runtime"]}// with options{ "plugins": [ ["transform-runtime", { "helpers": false, // defaults to true "polyfill": false, // defaults to true "regenerator": true, // defaults to true "moduleName": "babel-runtime" // defaults to "babel-runtime" }] ]}剩下的就是欢畅的使用async/await了。另外如果要使用Object.assing这样的方法的话,也可以使用插件:babel-plugin-transform-object-assign,如果要使用解构赋值可以使用插件:babel-plugin-transform-object-rest-spread。当然这些都包含在了stage-0这个preset中。现在就开始写ES2015的代码吧。在项目中安装ExpressJs,创建一个index.js文件。我们来试着创建一个小小的web app作为练习:import Express from "express"let app = Express()app.get("/", (req, res) => { res.send("hello world")})app.listen(8080, () => console.log("server is running at http://localhost:8080"))运行命令:./node_modules/.bin/babel-node index.js --preset es2015, stage-0使用命令*babel-node**就可以让代码运行起来,后面的参数指定了在转义js代码的时候使用的preset和plugin。Babel官方推荐的方法是时候用.babelrc文件,这一方式可以更加灵活。在项目的更目录上创建.babelrc文件,在里面添加你安装的preset和plugin的描述:{ "presets": ["es2015", "stage-0"]}这样可以直接使用babel-node来执行代码,或者使用命令babel来转义代码。如:babel -w code/ -d build/babel命令会从配置文件中读取配置,来变异code/目录下的文件,并把转义之后的JavaScript文件导出到build/目录下。还有命令行里的参数-w,这个命令参数指定的是watch,每次code目录的文件修改后都会触发babel命令的再次执行。在文件中使用Source Maps上面看起来很不错了。但是还有一个问题,在你调试代码的时候,你调试的实际是babel命令转码之后的js,不是原来你编写的源代码所在的文件。调试的不是源文件,多少会有些不便。比如下面的文件会抛出一个异常:async function errorAsyncFunc() { try{ throw new Error("Async function error") } catch(e) { throw e }}errorAsyncFunc()在转码命令中加一个--source-maps可以解决这个问题:babel code/ -d build/ --source-maps最后在package.json里添加scripts节点:"scripts": { "build": "babel src -d build --source-maps", "start": "node build/index.js"},接下来:npm run buildGulp出场上文讲述了如何使用Babel实现ES201x的开发。但是在正式的开发中,上面的这些配置还略显不足,尤其是你的项目包括web端、server端,尤其web端不仅处理ES201x的代码还需要处理。所以需要Gulp出场。这玩意儿看起来很复杂,你定义了编译的过程。其实掌握了以后很好用,尤其是可以自动处理很多东西,节约大把时间。要使用Gulp,必须先安装NodeJS。这个基本是标配。然后你会用到它的命令行工具。安装Gulp在最新发布的Gulp里有一点调整。gulp-cli从gulp分离出来作为单独的一部分使用。所以,如果你已经安装过gulp之前的版本需要先删除:npm rm --global gulp安装gulp-cliyarn global add gulp-cli // npm install --global gulp-cli在--dev模式下安装gulpyarn add gulp --dev // npm install --save-dev gulp创建gulp配置文件就像Babel要用.babelrc作为配置文件一样,gulp也需要一个配置文件。这个配置文件就是gulpfile.js, 但是和babel同用的情况下把gulpfile.js重命名为gulp.babel.js:mv "gulpfile.js" "gulpfile.babel.js"gulp的使用还是很简单的,主要就是在gulpfile.babel.js文件中添加各种task。在这些task中一定要添加一个叫做default的task,gulp命令的执行起点就是从这里开始。假设有这么一个场景:1.使用eslint检查代码,发现代码风格和潜在的错误。2.自动实现ES201x -> ES5的代码转码,并把转码后的代码放在指定目录下。3.在转码的时候添加sourcemaps。以上这些“任务”都是用gulp自动实现。该如何配置呢?gulp和eslint要在gulp中使用各种请他的类似于eslint这样的功能的时候需要使用在gulp上的对应的插件。没错,gulp的设计思路和gulp基本一样:插件机制。那么我们就需要首先下载eslint的插件:yarn add --dev gulp-eslint // npm install --save-dev gulp-eslint在开始编写我们的第一个task之前, 做最后的准备工作。首先需要配置.eslintrc文件。eslint会根据这个文件定义的规则检查代码的风格。我们不准备大批的配置规则,这样非常耗时间而且也照顾不到很多我们项目已经保留下来的编码风格。所以,airbnb的一套规则拿来使用时最好的办法。安装eslintyarn add --dev eslint // npm install --save-dev eslint然后你可以运行命令来初始化配置:./node_modules/.bin/eslint --init。你也可以忽略这个命令,直接创建一个.eslintrc的文件。安装eslint的airbnb扩展要使用airbnb的一套规则就需要安装他们的eslint扩展:yarn add eslint-config-airbnb --dev // npm install --save-dev eslint-config-airbnb命令执行之后会提示有些依赖项没有安装,分别是eslint-plugin-import@^2.2.0、eslint-plugin-import@^2.2.0、eslint-plugin-jsx-a11y@^3.0.2。依次安装这些依赖项就好。.eslintrc{ "env": { "es6": true }, "rules": { "semi": "off", "import/no-extraneous-dependencies": ["error", { "devDependencies": true, "optionalDependencies": false, "peerDependencies": false }] ,"quotes": ["error", "single", {"allowTemplateLiterals": true}] }, "extends": "airbnb"}env指定环境是支持es6的,rules指定的是一些补充内容,比如字符串使用单引号还是双引号等。这个是根据个人喜好配置的,你可以选择添加你需要的规则。最后是extends,这里配置airbnb就用上了airbnb的一套eslint编码检查规则。gulp-eslint插件用起来import gulp from "gulp"import eslint from "gulp-eslint// 配置需要处理的文件目录和转码之后文件的存放目录const paramConfig = { source: "src/**/*.js", dest: "build",}引入相关模块之后开始写任务:gulp.task("lint", () => { // eslint配置,使用配置的文件目录。排除node_modules下的全部文件。 return gulp.src([paramConfig.source, "!node_modules/**"]) .pipe(eslint()) .pipe(eslint.result(result => { console.log(`ESLint result: ${result.filePath}`); console.log(`# Messages: ${result.messages.length}`); console.log(`# Warnings: ${result.warningCount}`); console.log(`# Errors: ${result.errorCount}`); })) .pipe(eslint.format()) .pipe(eslint.failOnError())})如前文所述,default任务是必须:gulp.task("default", ["lint"], function () { // lint任务成功执行之后执行这个方法});跳转到项目的目录下,运行gulp命令。会得到如下的输出:$ gulp[21:43:01] Requiring external module babel-register[21:43:01] Using gulpfile ~/Documents/test-polyfill/gulpfile.babel.js[21:43:01] Starting "lint"...[21:43:02] Starting "babel-sourcemaps"...ESLint result: ~/Documents/test-polyfill/src/index.js# Messages: 0# Warnings: 0# Errors: 0ESLint result: ~/Documents/test-polyfill/src/test.js# Messages: 0# Warnings: 0# Errors: 0[21:43:02] Finished "lint" after 605 ms[21:43:02] Finished "babel-sourcemaps" after 653 ms[21:43:02] Starting "default"...gulp default task![21:43:02] Finished "default" after 98 μsgulp和babel这次同时处理babel和sourcemaps的问题。首先安装插件:yarn add --dev gulp-babel // npm install --save-dev gulp-babelimport gulp-babel插件:import babel from "gulp-babel"import sourcemaps from "gulp-sourcemaps"添加任务:gulp.task("babel-sourcemaps", () => { return gulp.src(paramConfig.source) .pipe(sourcemaps.init()) .pipe(babel()) .pipe(sourcemaps.write(".")) .pipe(gulp.dest(paramConfig.dest))})修改default任务:javascript gulp.task("default", ["lint", "babel-sourcemaps"], () => { console.log("gulp default task!") })如果你不想用sourcemaps的话,可以这么写:javascript gulp.task("babel", () => { return gulp.src(paramConfig.source) .pipe(babel()) .pipe(gulp.dest(paramConfig.dest)) })把gulp放在npm命令体系下babel老早就配置好了,现在和配置好了gulp。gulp每次输入命令基本上就是手动执行。现在应该让这个命令半自动执行了。修改package.json文件,在其中添加scripts节点: "scripts": { "build": "gulp", "start": "node build/index.js" },如此一来,很多的命令都可以像gulp一样放在npm的scripts里执行。比如,现在可以在命令行李输入如下命令来实现lint和babel转码:npm run build开始执行:npm start总结使用bebel可以提前使用最新的JavaScript语言特性,这样编写很多代码的时候会变得简洁高效。并且babel转码之后生成的代码也是非常规范的ES5写法,同时是在严格模式下的。所以,我们在写ES201x代码的时候不需要再添加"use strict";标识。使用gulp又可以使很多不大不小但是很费时间的事自动处理。把这两者结合在一起会让你的项目开发效率提升很多。所以,看到这里你不觉得你应该赶快在项目里使用这些技术,让开发进入快车道吗!!!???
Eclipse的jsp页面按Alt+/显示提示时,HTML标签内只有style属性显示No Default Proposals
我调出了你的情况。请试试着看看图中的你有没有选中,没有的话选中就好了。还是不行就,项目导出备份重新导入试下。
css / js 控制 文本溢出 省略号显示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>css文字截取</title> <style type="text/css"> body{font-size:13px;color:#8c966b;} div{clear:both;width:340px;border:1px solid #333;margin:3px;padding:3px;} div a{color:#8c966b;text-decoration:none;} div a:hover{text-decoration:underline;} div a{display:block;width:310px;white-space:nowrap;overflow:hidden;float:left; -o-text-overflow: ellipsis; /* for Opera */ text-overflow:ellipsis; /* for IE */ } div:after{content:"...";padding-left:3px;font-size:12px;}/* for Firefox */ </style> </head> <body> <div><a href="">用css来实现自动截取文字,不需要后台程序和JS的使用</a></div> <div><a href="">好处是:有利于内容完整性,有利于SEO,无需后台程序处理,可以在前台随时调节要截取的长度。</a></div> <div><a href="">不好的地方:不能自动判断截取长度,当字符很短的时候在Firefox中也会生成后面的省略符号。</a></div> <div><a href="">另外在设置截取宽度的时候,要注意,尽量让文字截取完整</a></div> </body> </html>
如何用JS实现像Excel的 Roundup函数功能
Math.ceil()功能:对一个数进行上取整。语法:Math.ceil(x)参数:x:一个数值。返回值:返回大于或等于x,并且与之最接近的整数。注:如果x是正数,则把小数“入”;如果x是负数,则把小数“舍”。例:<script type="text/javascript">document.write( Math.ceil(1.2)+", "+Math.ceil(1.8)+", "+Math.ceil(-1.2)+", "+Math.ceil(-1.8) );</script>输出结果为: 2, 2, -1, -1
基于java jsp asp php vb安卓系统毕业设计与实现论文源码下载?
工科生一般有一个毕业设计,做一个项目,同时需要写一个论文也就是毕业论文讲述设计工作中做了什么,为什么做,得到了什么结论等理论性的东西。文史哲以及经济等和理科生一般都是需要写一个论文,阐述清楚以及涉猎的学科研究方向中的理论,突破,收获等。大致这样吧
请教关于Nodejs多进程共享缓存数据
以正常目前的业务场景来说(非nodejs),一个进程平均是用1.5-3G内存不等.缓存是根据某些特定条件组合生成的key(key的数量稍微有点儿多),需要从MongoDB/Redis读取数据.1MB的数据是业务数据传输量最大的那种,不是只有这种业务.场景可以假设为,获取用户的一些浏览记录,包含图片,描述,评测等(描述与评价都算是比较大的传输量的数据),每次获取30条左右.然后再乘以一定的用户在线数量,这个缓存数据是比较庞大的.先不考虑这个架构是否可以优化.发这个主题的原因只是想了解到nodejs有没有什么成熟方案可以共享进程间的数据比如用户X,访问站点时,被调度系统分配给A进程获取了luby的浏览历史,A进程从mongodb获取到luby的记录列表进行呈现.这时候用户Y也想看看luby的浏览历史,这调度系统分配给了B进程.这个时候B进程又要再去mongodb获取一次.我期望是B进程可以共享A进程的luby记录列表1)降低mongogdb的访问频率2)提高响应速度,因为减少了mongodb查询,减少了网络传输.
请教关于Nodejs多进程共享缓存数据
以正常目前的业务场景来说(非nodejs),一个进程平均是用1.5-3G内存不等.缓存是根据某些特定条件组合生成的key(key的数量稍微有点儿多),需要从MongoDB/Redis读取
如何将jsp中的list所存的数分别传给js里面的变量?
在一个页面吗?
php如何将字符串转成json
可以通过json_encode()函数来实现。(推荐教程:php教程)函数介绍:PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回JSON数据,否则返回FALSE。语法:string json_encode ( $value [, $options = 0 ] )参数介绍:value: 要编码的值。该函数只对 UTF-8 编码的数据有效。代码实现:<?php class Emp { public $name = ""; public $hobbies = ""; public $birthdate = ""; } $e = new Emp(); $e->name = "sachin"; $e->hobbies = "sports"; $e->birthdate = date("m/d/Y h:i:s a", "8/5/1974 12:20:03 p"); $e->birthdate = date("m/d/Y h:i:s a", strtotime("8/5/1974 12:20:03")); echo json_encode($e);?>结果:{"name":"sachin","hobbies":"sports","birthdate":"08/05/1974 12:20:03 pm"}
php怎样将数组转换为json
php将数组转换为json的方法:可以使用json_encode()函数来进行转换。json_encode()函数可以对变量进行json编码,该函数如果执行成功则返回json数据,反之则返回false。函数介绍:json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。(推荐教程:php视频教程)语法:string json_encode ( $value [, $options = 0 ] )参数:value: 要编码的值。该函数只对 UTF-8 编码的数据有效。options:由以下常量组成的二进制掩码 JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR。(相关推荐:php培训)代码示例:<?php class Emp { public $name = ""; public $hobbies = ""; public $birthdate = ""; } $e = new Emp(); $e->name = "sachin"; $e->hobbies = "sports"; $e->birthdate = date("m/d/Y h:i:s a", "8/5/1974 12:20:03 p"); $e->birthdate = date("m/d/Y h:i:s a", strtotime("8/5/1974 12:20:03")); echo json_encode($e);?>运行结果:{"name":"sachin","hobbies":"sports","birthdate":"08/05/1974 12:20:03 pm"}
我的jsp页面得到的值需要转换一下再显示,例如把出生日期转换为年龄后再显示,请问怎么做
当前日期-出生日期=岁数也可以:今年-出生年=岁数
如何使用Node.js读取JSON文件
本篇文章将介绍关于使用node.js读取JSON文件内容,使用的是JSonfile模块的readfile和readfilesync函数。要求:要在系统上安装node.js和npm。对于本篇文章,我们使用的是JSonfile NPM模块。因此,首先需要在系统上安装JSonfile模块$ npm install jsonfile --save现在,正在创建一个虚拟的json文件employee.json。也可以使用自己的JSON文件。文件名:employee.json[ { "emp_id" : "101", "emp_name" : "Mike", "emp_addr" : "123 California, USA", "designation" : "Editor" }, { "emp_id" : "102", "emp_name" : "Jacob", "emp_addr" : "456 Log Angelis, USA", "designation" : "Chief Editor" }]1、用nodejs读取json文件在上面的步骤中,创建了一个JSON文件示例。现在创建ReadJsonFile.js并添加以下内容。需要使用JSON文件名更改employee.json。文件名:ReadJsonFile.jsvar jsonFile = require("jsonfile")var fileName = "employee.json"jsonFile.readFile(fileName, function(err, jsonData) { if (err) throw err; for (var i = 0; i < jsonData.length; ++i) { console.log("Emp ID: "+jsonData[i].emp_id); console.log("Emp Name: "+jsonData[i].emp_name); console.log("Emp Address: "+jsonData[i].emp_addr); console.log("Designation: "+jsonData[i].designation); console.log("----------------------------------"); }});现在使用以下命令运行nodejs脚本。$ node ReadJsonFile.js Emp ID: 101Emp Name: MikeEmp Address: 123 California, USADesignation: Editor----------------------------------Emp ID: 102Emp Name: JacobEmp Address: 456 Log Angelis, USADesignation: Chief Editor----------------------------------2、用nodejs读取json文件或者,可以使用readfilesync函数读取JSON文件内容。创建一个包含以下内容的readjsonfilesync.js文件文件名:readjsonfilesync.jsvar jsonFile = require("jsonfile")var fileName = "employee.json"var jsonData = jsonFile.readFileSync(fileName);for (var i = 0; i < jsonData.length; ++i) { console.log("Emp ID : "+jsonData[i].emp_id); console.log("Emp Name : "+jsonData[i].emp_name); console.log("Emp Address : "+jsonData[i].emp_addr); console.log("Designation : "+jsonData[i].designation); console.log("----------------------------------");}现在使用以下命令运行nodejs脚本。$ node ReadJsonFileSync.js Emp ID: 101Emp Name: MikeEmp Address: 123 California, USADesignation: Editor----------------------------------Emp ID: 102Emp Name: JacobEmp Address: 456 Log Angelis, USADesignation: Chief Editor----------------------------------本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的node.js视频教程栏目!!!
js判断两日期yyyymmdd大小
我说个思路,转成时间戳。。然后比大小 ,这样最简单
使用JS如何实现粘贴板复制功能
本文给大家分析20行JS代码实现粘贴板功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下使用剪贴板是一项基本技能。作为码农都应知道, Tab , Ctrl/Cmd + A , Ctrl / Cmd + C 以及 Ctrl / Cmd + V 分别是自动聚焦、复制、粘贴的快捷键。而对普通用户可能就不太容易了。即使用户知道剪贴板是什么,(除了)那些眼神极好或反应很快的人,其他情况下很难以突出显示他们想要的确切文字。若用户不知道键盘快捷键,也看不到隐藏的编辑菜单,或从未使用右键菜单或不知道长按触屏弹出选项菜单,那么他很可能无法察觉到复制功能。那么我们是否应该提供一个“复制到剪贴板”按钮来帮助用户?这功能应该会很有用,即使是对快捷键的人非常熟悉的用户来说。关于剪贴板的安全几年前,浏览器不可能直接使用剪贴板。开发人员不得不通过Flash来实现。剪贴板看起来无关紧要,但想象一下,如果浏览器能够随意查看和操作内容,会发生什么。JS脚本(包括第三方脚本)能查看剪贴板内的文本信息,并将密码,敏感信息甚至整个文档发送到远程服务器。现在的剪贴板基本功能有限,有如下限制:大多数浏览器支持剪贴板,除了Safari。支持因浏览器而异 ,有些功能不完整或有问题。事件必须由用户必须发起,如点击鼠标或按下键盘。脚本不能自由访问剪贴板。document.execCommand()此方法就是实现剪贴板的关键,它可以传入 cut , copy , paste 三种参数。从最常用的 document.execCommand("copy") 开始介绍。在使用之前,我们应该检查浏览器是否支持 copy 命令: document.queryCommandSupported("copy"); 或 document.queryCommandEnabled("copy"); ,这两个方法效果相同。但在Chrome下,尽管Chrome确实支持使用 copy 命名,但两个方法都返回 false 。所以最好是将检查代码包在一个 try-catch 代码块中。下一步,我们应该允许用户复制什么呢?必须突出显示文本,所有浏览器都可用 select() 方法选择文本input和textarea内的文本。同时Firefox和Chrome / Opera也支持 document.createRange 方法,该方法允许从任何元素中选择文本,如下:// select text in #myelement node var myelement = document.getElementById("#myelement"), range = document.createRange(); range.selectNode(myelement); window.getSelection().addRange(range);但IE / Edge不支持。clipboard.js若你不想自己实现一个较为健壮的跨浏览器剪贴板方法的话, clipboard.js 可以帮你。它有好几种设置选项的方式,如H5的data属性,设置绑定触发元素以及目标元素,如:<input id="copyme" value="text in this field will be copied" /><button data-clipboard-target="#copyme">copy</button>自己动手实现clipboard.js大小仅2Kb,若仅实现如下的部分功能的话,那么可以在20行的代码内实现:仅部分表单元素可被复制若在不支持的浏览器中(没错,就是指Safari),可突出显示选中文本,并提示用户按 Ctrl / Cmd + C 。像clipboard.js一样,先创建一个button用于触发方法,它具有一个data属性 data-copytarget ,指向要copy的元素(即 #website )<input type="text" id="website" value="http://www.sitepoint.com/" /><button data-copytarget="#website">copy</button>一个立即执行函数表达式绑定click事件的函数,该函数用于解析 data-copytarget 属性内容,选择对应字段的文本并执行 document.execCommand("copy") ,。若失败,文本保持选中状态,显示提示框:(function() { "use strict"; // click events document.body.addEventListener("click", copy, true); // event handler function copy(e) { // find target element var t = e.target, c = t.dataset.copytarget, inp = (c ? document.querySelector(c) : null); // is element selectable? if (inp && inp.select) { // select text inp.select(); try { // copy text document.execCommand("copy"); inp.blur(); } catch (err) { alert("please press Ctrl/Cmd+C to copy"); } } }})();示例虽然在上例中,算上样式和动画的代码,代码已经超过20行了,但动画和样式是可选的。总结:通过 .select() 选择要复制的表单元素的内容调用 document.execCommand("copy") 方法调用 .blur() 方法,从表单元素中移除焦点将第2、3步包在 try catch 块中,在不支持的浏览器下则提示其他方式有很多新颖的剪贴板应用方式。例如 Trello.com ,将鼠标悬停在卡片上时,可以按 Ctrl / Cmd + C 并将该卡片的链接地址复制到剪贴板。其背后实现的方式为:先创建一个包含URL的隐藏表单元素,然后选中并复制其内容。非常巧妙且实用 —— 我怀疑很少有用户知道这个功能!上面是我整理给大家的,希望今后会对大家有帮助。相关文章:使用JS如何实现循环Nodelist Dom列表在Vue中如何实现点击后文字变色在Vue-cli中如何实现为单独页面设置背景色
Masonry jquery 为什么js字符串中的斜杠被自动替换掉了
用反斜杠“”试试,在windows系统中用来表示目录你的斜杠都被解释成双引号了,没遇到过这个问题如果还不行那就都用双引号,然后遇到url时反编译一下
Extjs 之 initComponent 和 constructor的区别
Extjs 提供的组件还是挺丰富的, 但是有时候需求更丰富。当Extjs 原生的组件无法实现我们的要求的时候, 就需要扩展Extjs 的组件实现自制组件了。除了这种使用状况, 有时候对于一些相同却有使用很多的配置, 可能像把它独立出来,单独设为一种组件供大家调用, 节省开发时间和提高代码重用度。initComponent 和 constructor 就是Extjs 提供用来实现继承和扩展的方式。1. initComponent这个方法是在Ext.Component的构造函数(constructor)中调用的,只有直接或间接继承自 Ext.Component的类才会在constructor里调用initComponent方法看一下 Ext.AbstractComponent的源码文件 src/AbstractComponent.js在 constructor方法中调用了initComponent2. 1)自定义类中的 initComponent 函数中必须调用 callParent();否则 调用者无法初始化这个对象 2)针对button 这样的扩展组件来说,自定义类中的 constructor ,需要调用callParent( arguments);否则 调用者无法初始化这个对象[html] view plaincopyprint?this.callParent(arguments); this.callParent(arguments);这里的arguments 是需要的。(在Extjs 4 之前的版本中, 可能会看到比较多的XXX.superclass.constructor.call 写法)sencha 的官网中有一篇针对这两个区别的讨论:http://www.sencha.com/forum/showthread.php?47210-constructor-Vs-initComponent不过语法是基于Extjs 3 来讨论的, 笔者觉得作用不是很大。
在JSTL中,session 和 sessionScope 有什么区别
sessionScope是作用域,而session=${pageContext.session},pageContext才是作用域,pageContext与sessionScope是不同的作用域
JSP中的session的用法
1、以JSP使用session对象为例,首先打开Eclipse,新建一个web工程。2、创建一个login.jsp 。3、在login.jsp创建一个登录界面,显示当前session id。4、创建一个check.jsp 。5、输入check 。6、点击Finish ,完成创建。7、check.jsp从request中读取name,并保存至session。8、部署至tomcat,并启动。9、输入hello 。10、单击submit即可 。
js中setting怎么定义?
你说的是赋值吗,如果是的话,var t = "1";
后台执行session.invalidate()后, 怎么在js中判断该session已经销毁,从而强制退出访问
是的,session.invalidate()这个方法就是把session里的所有的东西都清除掉,所以sessison整个都销毁了
如何解密js
当你在浏览网页时,看到一个很漂亮的特效,你查看源代码时看到的是一队乱码,那多扫兴呀!根据本人的研究,总结出了三种解密方法,与大家分享!! 方法一: 有一种加密的办法是采用javascript的escape()函数,把某些符号、汉字等变成乱码,以达到迷惑人的目的。解密这种代码的办法是采用其反函数加以还原。下面是一个经过加密的例子: <HTML> <SCRIPT LANGUAGE="Javascript"> var Words ="%3Chtml%3E%3Cbody%20bgcolor%3D%22red%22%3E%3Cp%3E%u8FD9%u662F%u4F8B%u5B50%uFF01%uFF01%uFF1A%uFF09%3C/p%3E%3C/body%3E%3C/html%3E" var NewWords; NewWords = unescape(Words); document.write(NewWords) </SCRIPT> <BODY> </BODY> </HTML> 这种文件最好解密,一看就明白,关键是unescape()函数起了还原源代码的作用。要想看到加密前的代码是什么样子,可以用下面的办法: <HTML><SCRIPT LANGUAGE="Javascript"> var Words ="%3Chtml%3E%3Cbody%20bgcolor%3D%22red%22%3E%3Cp%3E%u8FD9%u662F%u4F8B%u5B50%uFF01%uFF01%uFF1A%uFF09%3C/p%3E%3C/body%3E%3C/html%3E" var NewWords; NewWords = unescape(Words); NewWords=NewWords.toString(); function password(){ document.pw.txtpw.value=NewWords; } </SCRIPT> <BODY> <form name=pw> <input type=button onclick="password()" value="解密"> <br> <textarea name="txtpw" cols="100" rows="100"></textarea> </form> </BODY> </HTML> 方法二: 有一个软件叫HTMLEncrypt.exe,它就是把源代码进行加密的软件,这个软件的加密的原理是把字符转换。下面的例子是一个分帧的页面: <html><head><script> function Carbosoft( s ) { var sRet=""; for(j=0; j< s.length; j++ ){ var n= s.charCodeAt(j); if (n>=8364) {n = 128;} sRet += String.fromCharCode( n - 3 ); } return( sRet ); } var sJsCmds ="" + "?kwpoA?khdgA?phwd#kwws0htxly@%Frqwhqw0W|sh%#frqwhqw@%wh{w2kwpo>#fkduvhw@lvr0;;8<04%A?wlwohAZHOFRPH?2wlwohA?phwd#qdph@%JHQHUDWRU%#frqwhqw@%Plfurvriw#IurqwSdjh#613%A?phwd#qdph@%Plfurvriw#Wkhph%#frqwhqw@%qrqh/#ghidxow%A?phwd#qdph@%Plfurvriw#Erughu%#frqwhqw@%qrqh/#ghidxow%A?2khdgA?iudphvhw#erughu@%3%#iudpherughu@%3%#urzv@%-/93%A##?iudph#qdph@%pdlq%#vuf@%xs1kwp%#vfuroolqj@%dxwr%A##?iudph#qdph@%rqolqh%#vuf@%grzq1kwp%#vfuroolqj@%qr%#qruhvl}h#wdujhw@%beodqn%A##?qriudphvA##?erg|A##?sAWklv#sdjh#xvhv#iudphv/#exw#|rxu#eurzvhu#grhvq*w#vxssruw#wkhp1#?2sA##?2erg|A##?2qriudphvA?2iudphvhwA?2kwpoA?irqw#froru@%&33333%A?s#doljq@%fhqwhu%A?vpdooA?irqw#idfh@%Wdkrpd%AWklv#iloh#zdv#hqfu|swhg#xvlqj#dq#xquhjlvwhuhg#yhuvlrq#ri#?d#kuhi@%kwws=22fduer{1wkhgqv1qhw2kwpohqfu|sw1kwp%AKWPO#Hqfu|sw#y413?2dA1?2irqwA?2vpdooA?2sA" + ""; var s= Carbosoft( sJsCmds); document.write (s); </script> </head><body></body></html> 从上面可以看出,浏览器解释这写代码前,进行了还原,从而可以得到破解的方法如下: <script> function Carbosoft( s ) { var sRet=""; for(j=0; j< s.length; j++ ){ var n= s.charCodeAt(j); if (n>=8364) {n = 128;} sRet += String.fromCharCode( n - 3 ); } return( sRet ); } var sJsCmds ="" + "?kwpoA?khdgA?phwd#kwws0htxly@%Frqwhqw0W|sh%#frqwhqw@%wh{w2kwpo>#fkduvhw@lvr0;;8<04%A?wlwohAZHOFRPH?2wlwohA?phwd#qdph@%JHQHUDWRU%#frqwhqw@%Plfurvriw#IurqwSdjh#613%A?phwd#qdph@%Plfurvriw#Wkhph%#frqwhqw@%qrqh/#ghidxow%A?phwd#qdph@%Plfurvriw#Erughu%#frqwhqw@%qrqh/#ghidxow%A?2khdgA?iudphvhw#erughu@%3%#iudpherughu@%3%#urzv@%-/93%A##?iudph#qdph@%pdlq%#vuf@%xs1kwp%#vfuroolqj@%dxwr%A##?iudph#qdph@%rqolqh%#vuf@%grzq1kwp%#vfuroolqj@%qr%#qruhvl}h#wdujhw@%beodqn%A##?qriudphvA##?erg|A##?sAWklv#sdjh#xvhv#iudphv/#exw#|rxu#eurzvhu#grhvq*w#vxssruw#wkhp1#?2sA##?2erg|A##?2qriudphvA?2iudphvhwA?2kwpoA?irqw#froru@%&33333%A?s#doljq@%fhqwhu%A?vpdooA?irqw#idfh@%Wdkrpd%AWklv#iloh#zdv#hqfu|swhg#xvlqj#dq#xquhjlvwhuhg#yhuvlrq#ri#?d#kuhi@%kwws=22fduer{1wkhgqv1qhw2kwpohqfu|sw1kwp%AKWPO#Hqfu|sw#y413?2dA1?2irqwA?2vpdooA?2sA" + ""; var s= Carbosoft( sJsCmds); </script> <form name=qq> <textarea name=ww cols=100 rows=10></textarea> <input onclick="ww.value=s" type=button value="解密"> </form> 方法三: 有一种加密方法是每行单独加密,还原起来比较复杂。看一个加密过的原文: <HTML> <BODY> <SCRIPT LANGUAGE="JavaScript"> function Decode() { d("FrfmnD");d("FruyvDFgwhqjfWnyeseysuEXpydy%whqjf~J~XWghwEXfkjJpgXDFIgwhqjfD");d("FmufyWrffjKuieqdEX?klfulfK$ajuXWwklfulfEXfubfIrfmnGWwryhgufEsx}{~}XD");d("FfqfnuDejFIfqfnuD");d("FIruyvD");d("FxkvaD");d("FIxkvaD");d("FIrfmnD");d("W");return 0;} </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function d (enc) {document.write(codeIt(key,enc));} var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!" |#$%&"()*+,-./:;<=>?@[\]^_ `{}~ ";function codeIt (mC, eS) {var wTG, mcH = mC.length / 2, nS = "", dv;for (var x = 0; x < eS.length; x++) { wTG = mC.indexOf(eS.charAt(x));if (wTG > mcH) {dv = wTG - mcH; nS = nS + mC.charAt(48 - dv);}else {dv = mcH - wTG;nS = nS + mC.charAt(48 + dv);}}return nS;} </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> Decode(); </SCRIPT> </BODY> </HTML> 还原的时候,也必须每行单独解密,用下面的方法可以看到源代码: <HTML> <BODY> <SCRIPT LANGUAGE="JavaScript"> function Decode() { d("FrfmnD");d("FruyvDFgwhqjfWnyeseysuEXpydy%whqjf~J~XWghwEXfkjJpgXDFIgwhqjfD");d("FmufyWrffjKuieqdEX?klfulfK$ajuXWwklfulfEXfubfIrfmnGWwryhgufEsx}{~}XD");d("FfqfnuDejFIfqfnuD");d("FIruyvD");d("FxkvaD");d("FIxkvaD");d("FIrfmnD");d("W");return 0;} </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function d (enc) {alert(codeIt(key,enc));} var key = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!" |#$%&"()*+,-./:;<=>?@[\]^_ `{}~ ";function codeIt (mC, eS) {var wTG, mcH = mC.length / 2, nS = "", dv;for (var x = 0; x < eS.length; x++) { wTG = mC.indexOf(eS.charAt(x));if (wTG > mcH) {dv = wTG - mcH; nS = nS + mC.charAt(48 - dv);}else {dv = mcH - wTG;nS = nS + mC.charAt(48 + dv);}}return nS;} </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> Decode(); </SCRIPT> </BODY> </HTML> 哈哈!!:=)是不是很精彩!!
json数据解析出错应该怎么办?
密集恐惧症。。1、先检查json格式是否符合标准,各种转义的地方容易出问题。2、检查编码是否统一。3、json的包有没导错。排除了,就是函数调用的问题了- -!看样子传入的是array数据,应该用jsonArray解析。JSONArray jsonArray = new JSONArray(jsonContent.toString());然后可以逐一读取里面的数据:JSONObject itemObj = jsonArray.getJSONObject(i);
c# 读取json的问题,JObject不能强转成JArray
用dynamic将JArray ja = (JArray)JsonConvert.DeserializeObject(reader[1].ToString());换成dynamic ja = JsonConvert.DeserializeObject(reader[1].ToString());
如果json对象中的key是中文,该如何解析
用Gson 这个类库,将json转成对象在你的实体类中,对应的字段里使用注解的方法,给key取别名用法: @SerializedName("申请人");private String name;