Ajax jquery 原理分析及其使用

Posted by & filed under Uncategorized.

引用: 关于异步与同步 异步传输是面向字符的传输,它的单位是字符; 同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。 XMLHttpRequest对象的属性。      onreadystatechange  每次状态改变所触发事件的事件处理程序。      responseText     从服务器进程返回数据的字符串形式。      responseXML    从服务器进程返回的DOM兼容的文档数据对象。      status           从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)      statusText       伴随状态码的字符串信息      readyState       对象状态值      Read more […]

JS下载文件|无刷新下载文件

Posted by & filed under Uncategorized.

后台代码Handler.ashx   [csharp] view plaincopy <%@ WebHandler Language=”C#” Class=”Handler” %> using System; using System.Web; public class Handler : IHttpHandler {     public void ProcessRequest (HttpContext context) {         string fileName = “web.config”;//客户端保存的文件名         string filePath = context.Server.MapPath(“web.config”);//路径         //以字符流的形式下载文件         System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);         byte[] bytes = new byte[(int)fs.Length];         fs.Read(bytes, 0, bytes.Length);         fs.Close();         context.Response.ContentType = “application/octet-stream”;         //通知浏览器下载文件而不是打开         context.Response.AddHeader(“Content-Disposition”, “attachment; filename=” + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));         context.Response.BinaryWrite(bytes);         context.Response.Flush();         context.Response.End();     }     public bool IsReusable {         get {             return false;         }     } } 前端代码:     [html] view Read more […]

Java生产者与消费者(下)

Posted by & filed under Uncategorized.

本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!   上一讲我们让消费者和生产者都各停1毫秒,实际上大多并不是这样的。第二讲,我们讲一个极端的例子和一个正常的例子,假设您已经看过上一讲,我们只改变Consumer和Producer,来看结果。 Java生产者与消费者(上) 名词解释 wait:当前线程不运行,处理等待状态,等待notify;所以也不会往下执行。 您可能会有疑问前例中的为什么要用while循环而非if语句? 主要是防止多线程操作时,例桌子已经占满,两个生产线程均处理等待状态,但消费线程通过notifyAll打开其等待状态,就造成生产过量的蛋糕,而导致生产消费模式失败,所以不能用if语句。 sleep:暂停当前线程若干时间,之后继续运行 Special Read more […]

javascript模块化编程(二)—AMD规范

Posted by & filed under Uncategorized.

一、js的模块化规范: 服务器端:commonjs 浏览器端:AMD(”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”) 二、为什么采用AMD 如下代码   [javascript] view plaincopy var math = require(‘math’);   math.add(2, 3); 必须等待math.js加载完成,否则会出现加载时间很长现象   三、define define(id?, dependencies?, factory);   其中: id: 模块标识,可以省略。 dependencies: 所依赖的模块,可以省略。 factory: 模块的实现,或者一个JavaScript对象。 以下是使用AMD模式开发的简单三层结构(基础库/UI层/应用层): base.js [javascript] view plaincopy define(function() {     return {         mix: function(source, target) {         }     }; }); ui.js   [javascript] view Read more […]

关于IO包装流中的两个read方法

Posted by & filed under Uncategorized.

刚开始学IO流,会经常感到奇怪,为什么read方法返回的都是int类型,而且,在包装流中经常会弄混淆,看了传智播客老师的视频,加上API文档的了解,总算是完全弄懂了。 下面贴出四个包装流的代码,分别包装了inputstream、outputstream、reader、writer:   [java] view plaincopy public class MyBufferedInputStream extends InputStream {     private InputStream in;     private byte[] buf = new byte[1024];    //自定义字节数组作为缓冲区     private int len = 0;    //定义一个变量,用于记住缓冲区可用字节数量     private int pos = 0;    //定义一个变量,用于记住缓冲区当前可用字节的角标     //通过构造函数组合被包装的流     public MyBufferedInputStream(InputStream in) {         this.in = in;     }     @Override     public int read() throws IOException {         //判断缓冲区是否还有可用字节         if(len==0) {             //一次性填充缓冲区             len = in.read(buf);             //pos要置零             pos = 0;         }         //判断是否到了流的末尾         if(len==-1) {             return -1;         }         //返回一个字节,可用字节就少一个,所以len到减1         len–;         //返回当前可用字节,升级为int,前面加24个0         //11111111 & 00000000 00000000 00000000 11111111 0xff         return buf[pos++]&0xff;     }     public void close() throws IOException {         //关闭底层被包装的流         in.close();     } }     [java] view Read more […]

认识 JavaScript 3

Posted by & filed under Uncategorized.

继承的方式 看到继承方式中,“比较好的”是《JavaScript 设计模式》上的这种。   [javascript] view plaincopyprint? function extend(subClass,superClass){     var F = function(){};     F.prototype = superClass.prototype;     subClass.prototype = new F();     subClass.prototype.constructor = subClass; } 实质是:   [javascript] view plaincopyprint? subclass.prototype.__proto__ = superClass.prototype; 不惜完全覆盖子类原型的原因是,__proto__ 不是标准。     [javascript] view plaincopyprint? subClass.superClass = superClass.prototype 或许还可以加上这句,明确下子类和父类的边界。   多重继承 我想到的多重继承的法子是,在已有原型链尾部插入其他原型。 书上的法子,直接为原型添加父类原型函数副本。   [javascript] view Read more […]

HTML5 Canvas 第二篇

Posted by & filed under Uncategorized.

首先,回顾一下. 页面中加入的canvas   [html] view plaincopyprint? <canvas id=”diag” style=”border:1px solid” width=”200″ height=”200″> </canvas> 相应的绘制对角线的JS代码     [javascript] view plaincopyprint? function draw(){   var canvas = document.getElementById(‘diag’);   var context = canvas.getContext(‘2d’);   context.beginPath();   context.moveTo(70,140);   context.lineTo(140,70);   context.stroke(); } window.addEventListener(“load”, draw, true); 所呈现的图像   OK,这次主要是用一下变换的方式来重新绘制一下.并且用路径绘出树,用曲线绘制出跑道.   2.1 变换 修正—在绘制系统中的说法就是变换.可以将变换当做介于开发人员发出的指令和canvas显示结果之间的一个修正层.不管开发时是否需要,他都是存在的. 在应用时可以被顺序应用、组合或者随意覆盖.关于可重用代码有一条重要的建议:一般绘制都应从原点(0,0)开始,应用变换(缩放、平移、旋转等),然后不断修改代码直至达到希望的效果.   代码:用变换的方式在canvas上绘制对角线   [javascript] view Read more […]

HTML5 Canvas 第一篇

Posted by & filed under Uncategorized.

1.1 What is Canvas? 使用Canvas元素时,它会创建一块矩形区域.默认情况下宽为300像素,高为140像素,但也可自设. 基本的Canvas元素 <canvas></canvas> 页面加入Canvas元素后,我们就可以通过javascript来控制它.可以在其中添加图片、线条、文字,也可以在里面绘图,甚至高级动画. 使用Canvas编程,首先要获取其上下文(context).接着在其中执行动作,最后将这些动作应用到上下文中. 类似于数据库,开发人员先发起一个事务,然后执行某些操作,最后提交这些事务. 1.2 Canvas 坐标 Canvas的坐标是从左上角开始算起,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角(x=0,y=0)的点称为原点. 1.3 不适用Canvas的情况 如果其他元素已经够用了,就不应该再使用Canvas元素.例如H1 Read more […]

生产者消费者模型你知道多少(转)

Posted by & filed under Uncategorized.

原文地址:http://blog.csdn.net/luohuacanyue/article/details/14648185 背景 进入正题之前先说点故事。从最开始学java的那里开始:我是从08年下半年开始学Java,在《我的六年程序之路》中提到了一些。当时比较简单,每天看尚学堂的视频(对于初学者而言看视频好一些。),然后写代码。比较清楚的记得马士兵讲到生产者消费者模型的时候还大谈特谈要是掌握了这个工资可以+1000(现在回忆起有点像历史一样,多少有些伤感)。那时候已经过年了,我在家的时候把那段代码敲了很多遍,不过基本上是默写下来的,也没有仔细的想过其中的一些细节,不久后我就忘记了其中的写法。这里又衍生出一个学习方法的问题。我在学习上一直有一个毛病:学习的过程中不会刨根问底,这导致很多问题思考的不透彻,在后面很大程度上影响我整个知识体系的扎实程度,也应了那句话:出来混迟早要还的,在学习技术的过程中就是要一步一个脚印,总有一天会豁然开朗,不知不觉的发现所有知识都串起来了,一件很神奇的事情。在技术学习的过程中还是需要有点钻牛角尖的精神,基本上技术上的大牛都有钻牛角尖的“毛病”。 第二段故事是在2012年,这是正儿八经的使用生产者消费者模型在项目中进行开发,中间也写出了一大堆问题,这个不是写出来的,是慢慢调试出来的。最开始使用wait(),notify(),后来用CountDownLatch。 第三个故事是前几天的事情,这也是我为什么要写这篇文章的原因。一个同事问我代码的问题,他里面就是用到了生产者消费者,当时我整了半天都没整利索,很没面子。后面虽然找出了问题(这个问题我今天也碰到了),就是习惯性的把整个容器(下面代码的Container)锁住,然后发现只要一个线程wait住,所有线程都不动了,因为这个wait住的线程还持有Container的锁没有释放,其他线程也就进不来。我发现自己对于这个模型并没有完全摸透,就在周末的时候好好的把这个模型从头到尾的写了写,当然从中又有一些新的收获。   正题   Read more […]

Spring 动态设置数据源

Posted by & filed under Uncategorized.

Spring2.0.1以后的版本已经支持配置多数据源,并且可以在运行的时候动态加载不同的数据源。通过继承AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问12个数据源,每个数据源的表结构都是相同的,所以要求数据源的变动对于编码人员来说是透明,也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的配置如下: 一、首先需要写一个静态的键值对照类: 代码 Java代码   package cn.com.xinli.ccp.dynamicds; public class DataSourceMap {     public static final String Admin=”Admin”;     public static final String Yxh = “Yxh”; } 这个类主要在使用的时候当作获得数据源的标志使用。 二、建立一个获得和设置上下文的类: 代码 Java代码   package cn.com.xinli.ccp.dynamicds; public class CustomerContextHolder {     private static final ThreadLocal contextHolder =         new ThreadLocal();     public static void setCustomerType(String customerType) {       contextHolder.set(customerType);     }     public static String getCustomerType() {       return (String) contextHolder.get();     }     public static void clearCustomerType() {       contextHolder.remove();     } } 这个主要负责设置上下文环境和获得上下文环境。 三、建立动态数据源类,这个类必须继承AbstractRoutingDataSource: 代码 Java代码   package cn.com.xinli.ccp.dynamicds; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource {     protected Object determineCurrentLookupKey() {         // TODO Auto-generated method stub         return CustomerContextHolder.getCustomerType();     } } 这个类实现了determineCurrentLookupKey方法,该方法返回一个Object,一般是返回字符串,也可以是枚举类型。该方法中直接使用了CustomerContextHolder.getCustomerType()方法获得上下文环境并直接返回。 四、编写spring的配置文件配置数据源 代码 Java代码   <bean id=”parentDataSource”             class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>             <property name=”driverClassName”>                 <value>COM.ibm.db2.jdbc.net.DB2Driver</value>             </property>             <property name=”url”>                 <value>jdbc:db2:127.0.0.1:TEST</value>             </property>     </bean>     <bean id=”adminDataSource” parent=”parentDataSource”>         <property name=”username” value=”admin”/>         <property name=”password” value=”master997mb”/>     </bean>     <bean id=”yxhDataSource” parent=”parentDataSource”>         <property name=”username” value=”yxh”/>         <property name=”password” value=”yxh”/>     </bean> 在这个配置中可以看到首先有个parentDataSource,这个主要配置一些数据源的公用信息,项目中都是链接DB2数据库;adminDataSource和yxhDataSource是根据不同需要配置的个性化信息,但都必须加parent属性,值为parentDataSource。这样就配置好了2个数据源信息。当然如果链接的多数据源是不同类型的两个数据库,那么parentDataSource就可以不要了,直接配置两个不同的数据源链接就可以了。 五、编写spring配置文件配置多数据源映射关系 代码 Java代码   <bean id=”dataSource” class=”cn.com.xinli.ccp.dynamicds.DynamicDataSource”>        <property name=”targetDataSources”>           <map key-type=”java.lang.String”>              <entry key=”Yxh” value-ref=”yxhDataSource”/>           </map>        </property>        <property name=”defaultTargetDataSource” ref=”adminDataSource”/>     </bean> 在这个配置中第一个property属性配置目标数据源,<map Read more […]