- 浏览: 260833 次
- 性别:
- 来自: 北京
最新评论
-
DragonKiiiiiiiing:
支持楼主,中国互联网太缺这种无私奉献的人了。您的这本书我已拜读 ...
JAVA NIO 全书 译稿 -
sp42:
非常感谢!热部署帮助很大!
Pure JS (2): 热部署 (利用 JDK 7 NIO 监控文件变化) -
sp42:
其实在我的架构中,我更倾向于 JSP 作为前端模板系统~还是写 ...
Pure JS (5.3):pure.render 的实现(构造window对象,实现服务器端 JQuery Template) -
sp42:
非常不错,楼主做的正是鄙人想做的做的,而且比鄙人的来的成熟、健 ...
OMToolkit介绍(5): 总结 -
cfanllm:
楼主辛苦了,,,谢谢分享啊
JAVA NIO 全书 译稿
文章列表
PureJS (6.4):利用 proxy 对象实现权限控制和数据校验
利用上一篇文章提到的 proxy 对象,我们还可以实现更多实用的功能。比如本文将探讨的权限控制和数据校验。
权限控制的思路是截获对 page.* 和 api.* 的调用,并利用 session 中记录的用户角色信息进行权限检查;
数据校验还将用到之前的客户端与服务器端共用代码的功能,对数据进行双重检查,以防恶意攻击。
接下来就让我们看看具体的实现吧。
权限控制
这里以对 page.* 的调用为例。基本思路是:
1. 通过正则表达式 /^page./ 和 /^api./ 匹配需要拦截的方法调用
2 ...
PureJS (6.3):Rhino 中的日志与 proxy 对象
这篇文章里我们将继续探讨日志处理(pure.log)和 proxy 对象(pure.proxy)。结合使用 pure.log 和 pure.proxy 可以实现灵活的日志处理,有效地分离业务逻辑和日志记录的代码。pure.log 是在 slf4j 和 log4j 的基础上完成的;pure.proxy 是利用 Rhinio JS 的 __noSuchMethod__ 实现的。
代码示例
下载附件中的 PureJS 工程,打开文件 scripts/app/proxy/log.js ,可以看到如下代码:
(functio ...
Pure JS (6.2):结合 Rhino 和 Junit GUI 测试 JS
最近尝试了直接用 Rhino 启动 Junit ,刚开始就遇到了一些问题。因为 Java 注解在 JavaScript 中并不能起到什么作用,所以我选择了 Junit 3,并使用了 Junit 3 自带的swing GUI。最大的问题是 Junit 是通过 Class 名称加载测试类进行测试的。而 Rhino 的 Class 是动态生成的,名称也比较怪(比如 adapter1 之类),并不适合显示在界面上,因此我修改了 Juni 3 的源代码(见附件)。可以用“Pei Xiaoxing”作为关键字在源代码中搜索 ...
Pure JS (6.1):使用 Rhino Shell 和 Debugger 运行和调试 JS
之前一直使用 java 7 自带的 ScriptEngine 执行服务器端 JS,然而,一个重要的缺陷是无法进行调试。
因此我将之前的一些 Java 代码改为 JavaScript 代码,并尝试着使用 Rhino Debugger。
本文就是介绍这方面的探索成果的。
1. Rhino Shell 和 Debugger 介绍
Rhino Shell 可以用于执行 JS,与之前直接通过 Run As Java Application 方式运行没有太大区别。
Rhino Debugg ...
Pure JS (5.3):pure.render 的实现(构造window对象,实现服务器端 JQuery Template)
pure.render() 的实现思路大致如下:
1. 解析 HTML
2. 构造 window 对象
3. 在 window 对象上附加 jQuery 对象
4. 调用传入的 func,修改 window.docu ...
Pure JS (5.2):服务器端与客户端共用页面渲染代码
接着上一篇文章,我们来谈谈如何在服务器端和客户端共用 JS 代码,以便实现第一次返回页面时在服务器端完成初始渲染,而之后的操作在客户端进行修改并重新渲染页面的模式。
运行示例
首先,需要先运行mongod;然后下载附件中的 PureJS 工程,解压后加载到 eclipse 中,打开文件 main/com/purejs/core/JSServer.java,右键选择 Run As -> Java Application。
在浏览器中输入 http://localhost:8080, 可以看到如下页面:
引用 参考 ...
Pure JS (5.1):在服务器端使用 JQuery DOM 和 JQuery Template
JQuery Template 是著名的客户端 JS 模板引擎,对于没有 SEO 需求的 Web 应用,甚至只用 JQuery Template 就可以完成所有的页面渲染。
但这种方式并不适用于所有 Web 应用,如 博客、新闻类的网站,是必须考虑 SEO 的;由于搜索引擎通常不会执行 JavaScript,所以最好在第一次返回页面时就包含希望被搜索到的数据。
一种常见的模式是第一次返回时使用服务器端 JS 进行初始渲染,而后续修改时使用客户端 JS 对界面进行修改。使用这种模式时 ...
Pure JS (4.3): pure.db.js 的实现(基于 MongoDB Rhino Driver)
接着之前的两篇文章,让我们来看看 pure.db.js 的实现细节,以及一些 MongoDB Driver 的相关内容。
1. MongoDB Java Driver
MongoDB Java Driver 可以到这里下载:
https://github.com/mongodb/mongo-java-driver/downloads
用法如下:
// 连接 MongoDB 并获取 collection
Mongo m = new Mongo();
DBCol ...
Pure JS (4.2): Web 应用中服务器端 JS 调用 MongoDB 的简单示例
接着上一篇文章,本文将通过一个简单的示例说明如何通过服务器端 JS 调用 MogoDB,以及客户端 JS 向服务器端发起请求的方式。
首先我们可以先运行示例程序, ...
Pure JS (4.1): 使用 MongoDB 进行数据存储和管理
MongoDB 的一大特性就是 “JavaScript Friendly”,“Scheme Free” 的主张天生就是与 JavaScript 的开发理念相契合的。
它允许我们通过 eval 进行数据的初始化,以及在查询中使用 JS 对 ...
Pure JS (3.2): 上传下载 (HTML5 与 Flash 上传实现,配置项说明)
接着上一篇文章的话题,本文主要讲解 HTML5 方式的上传,FLash 方式上传客户端的实现,并说明 pure.upload 组件的配置项。
服务器端的实现在上一篇文章已经说明过了,这里就不再重复了。
HTML5 方式上传
HTML5方式上传,实际上是解决将文件数据放在请求的 body 中,而不使用 mutipart/form-data 格式进行封装。
实现思路如下:
1. 创建 XMLHttpRequest 对象
2. 配置上传进程中的回调函数
3. 配置上传完 ...
Pure JS (3.1):上传下载(利用 HTML5 与 Flash)
本文主要探讨 JavaScript 文件上传与下载,包括 客户端JS 和 服务器端JS 。
客户端支持 HTML5,Flash 和传统(隐藏)表单上传。
服务器端兼容 HTML5 Streaming 方式上传和 Multipart ...
Pure JS (2): 热部署 (利用 JDK 7 NIO 监控文件变化)
接着上一篇文章(http://xxing22657-yahoo-com-cn.iteye.com/blog/1052485)的话题,我们来谈谈服务器端 JS 的热部署问题。
由于 JavaScript 是动态语言,动态编译并执行脚本并不困难。所以关键是监控文件变化。
这里推荐使用 JDK 7 NIO 中新增的 Watch Service API。Watch Service API 将尽可能使用操作系统的文件 API ,当操作系统不支持时,则使用轮询。简而言之,就是 JNI + 轮询,自己实现轮询倒不难 ...
Pure JS (1): 在 jetty 上运行 JavaScript
所谓 Pure JS ,就是客户端和服务器端程序都用 JavaScript 编写。
实现思路是:
1. 客户端发起 Ajax 请求,请求的数据格式为 JSON ,方法为 POST
2. 服务器端用 Jetty 接收请求
3. 用 Java 6 ScriptEngine 执行 JavaScript 脚本
4. 结果以 JSON 格式返回
另外,在系统启动时需要对所有脚本进行初始加载。
接下来就按照这个思路逐步进行。
客户端 Ajax 请求
在 Eclipse 中建立 Java 工程 ...
jQuery Utilities 分类下的函数(或属性)的实现方式分析
本文将介绍jQuery Utilities 分类下的函数(或属性)的实现方式。
首先,可以先从 jQuery 官方 API 中找到 Utilities 分类的介绍:
http://api.jquery.com/category/utilities/
其中,不进行分析的函数(或属性)包括:
jQuery.boxMode:已经不推荐使用,可以用 jQUery.support.boxModel 代替
queue相关函数:与动画相关,并且也属于 “Custom” 分类,等分析 “Custom” 分类下的 ...