首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布。

Jumony试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之,Jumony的一切基础建立在服务器端的HTML DOM之上。在服务器端将HTML(文件或动态网页技术的输出)按照客户端浏览器的处理方式解析为HTML DOM。操纵和处理HTML DOM,就像我们在客户端用JavaScript干的那些事情一样,不同的是,Jumony可以使你依托强大的.NET Framework,来解决以前用脚本和服务器端技术都难以解决的事情。

下载部署

Jumony现在最稳定的版本是Milestone 1,其下载地址在:http://jumony.codeplex.com/releases/view/51380,对于第一次接触Jumony的朋友来说,建议先下载编译好的DLL,即Binary选项:

点击Binary链接后,会出现Jumony的许可协议(也就是LGPL),点击,开始下载。下载后是一个ZIP文件包,打开后可以看到里面有一个目录Binary,将其随便展开到一个文件夹,例如C:\Jumony。然后清点一下DLL的数量,正常情况下应该包含如下DLL:

  • Ivony.Core.dll,包含基础接口,和一些提高编程体验基础扩展方法
  • Ivony.Web.Html.dll,Jumony的核心DLL,定义了抽象HTML DOM模型。并提供大量扩展方法来操纵HTML DOM
  • Ivony.Web.Html.Binding.dll,提供数据绑定支持
  • Ivony.Web.Html.Parser.dll,即Jumony Parser,一个优秀的Html Parser,可以分析HTML文本并创建HTML DOM。
  • HtmlAgilityPack.dll,HtmlAgilityPack是另一个开源项目,与Jumony Parser一样,是另一个可以分析HTML文本并创建DOM的工具,理论上Jumony可以使用任何HTML分析器来分析HTML并为自己所用,只要有合适的Adapter。HtmlAgilityPack的项目主页位于:http://htmlagilitypack.codeplex.com/
    值得注意的是,当你下载Jumony的源代码包或是直接查看Jumony的源代码时,将不会有HtmlAgilityPack的任何源代码,可以去HtmlAgilityPack的主页下载。HtmlAgilityPack的授权许可协议与Jumony是不同的,这一点要特别注意。
  • HtmlAgilityPack.Adapter.dll,HtmlAgilityPack的适配器,使得HtmlAgilityPack可以当作Jumony的一个分析器来使用。事实上在M1版本中,Jumony Parser甚至不如HtmlAgilityPack成熟。

除了DLL文件外,pdb文件是用于调试的,而xml文件则是智能提示所必须的,建议都不要删除,保留。

然后我们需要新建一个网站来玩一下,在这之前,首先要确保你的VS至少是2008或以上,Jumony的最低.NET Framework版本要求是3.5。还在2.0的朋友,就只能说一声抱歉了,因为Jumony的选择器和导航扩展方法乃至于绑定支持,都是极度依赖于LINQ技术的。几乎不可能在.NET Framework 2.0之下提供简单的实现。

那么我们先新建一个网站(Web项目也行,这里用网站作为示范):

这里我把网站建立在了P:\WebSite\JumonyDemo,然后添加引用,找到刚才存放DLL的文件夹,将六个DLL一股脑全部添加引用:

然后我们需要配置web.config文件来添加Jumony的环境支持,在Jumony的下载页面上,有现成的已经配置好的web.config下载:

根据ASP.NET的版本,可以选择不同的web.config下载。然后替换系统默认的web.config即可,我这里默认创建的网站便是ASP.NET 4的,所以我下载ASP.NET 4的web.config,其内容是这样的:

httpHandlers和httpModules里面的内容便是新增的,如果你需要在现有的一个web.config文件中增加Jumony的环境配置,则只需要下载ASP.NET 4的web.config文件,然后将这两段拷贝整合即可。

然后就可以开始测试Jumony环境了,首先确认一下Web服务器使用的是VS自带的默认ASP.NET Development Server还是IIS,如果是使用IIS调试,则建议先换为VS自带的默认服务器,因为Jumony需要截获html和htm文件的请求,这已经在web.config中配置,但如果使用IIS作为服务器,则还需要配置IIS这两个扩展名的映射,这很麻烦,而我们在这里只是先玩一下Jumony,所以建议先用默认的服务器。

来干点坏事

先随便找一个HTML文件来测试一下Jumony是否已经正常工作,这里我写一个Hello World:

将其保存为index.htm:

然后添加这个HTML文件的处理程序,Jumony的处理程序事实上就是一个ashx文件,然后要求文件名除了ashx这个扩展名之外的前段与被处理的文件的文件名一模一样,这样Jumony的RewriteModule就会自动映射。所以这里我要添加的处理程序的文件名是index.htm.ashx。首先在添加项的对话框中选择一般处理程序(Generic Handler),然后输入文件名index.htm.ashx:

系统会帮我们自动添加一些代码,除了类型声明和using之外的代码都是多余的,直接删掉:

系统默认的类型名称是index,但为了避免冲突,Jumony建议类名还是命名为index_htm比较妥当,当然这不是必须的。然后我们要添加许多using,以及修改继承的基类型:

JumonyHandler是一个抽象类,有一个Process方法需要我们实现:

通过实现这个方法,可以让我们对HTML进行操控,当进入这个方法时,HTML文档(index.htm)已经被分析完毕成为一个IHtmlDocument对象静静的躺在一个叫做Document的属性里,等着我们来操控。

首先我们来了解Find方法,这个方法和jQuery的一样,使用CSS选择器来选择元素,在这里我们把Hello World的body元素找出来:

Single是LINQ中的方法,所以我说没有LINQ将寸步难行,因为Find方法的结果是一个元素(IHtmlElement)集合,这里用Single方法取出唯一的元素,因为我们知道body一定是唯一的元素。

然后我们干点什么好呢?要不把Hello World改为Hello Jumony!如何?

这就完成了我们的第一件“坏事”,赶紧来看看成果。在解决方案中右键点击index.htm,然后选择在浏览器中查看,不出意外的话,应该会看到这样的效果:

哦耶,真的变成了Hello Jumony。

来查看一下源代码:

清楚的看到了index.htm文件输出被Jumony引擎精确篡改。

再看看原始的文件(即index.htm这个文件原始的样子)是不是还是原来的样子:

确实没有变化,还是Hello World。

Jumony截获了htm的请求,并篡改了其结果,完成。

Jumony入门(一)从这里开始相关推荐

  1. Jumony入门(二)初识选择器

    首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布. Jumony试图提供在传统Web开发 ...

  2. Jumony入门(三)初探解析器

    首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布. Jumony试图提供在传统Web开发 ...

  3. Jumony入门(四)无缝体验

    首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布. Jumony试图提供在传统Web开发 ...

  4. 【人在江湖飘,哪有不带刀】神器Jumony

    大神博客:http://www.cnblogs.com/Ivony/p/3447536.html 项目地址:https://github.com/Ivony/Jumony 1.安装Jumony包 在N ...

  5. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  6. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  7. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  8. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  9. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

最新文章

  1. mysql性能优化:my.cnf配置文件
  2. Android Camera调用流程
  3. scheduledexecutorservice 只执行一次_一个ScheduledExecutorService启动的Java线程无故挂掉引发的思考...
  4. 学习日志---矩阵表示及特殊矩阵压缩
  5. python应用题_Python简单应用题
  6. Zoox又融5亿美元!这家腾讯投资的无人车公司现在估值32亿美元
  7. 蓝桥杯 ADV-78 算法提高 最长单词
  8. 广州培训:成功部署报表必做的四件事
  9. Spark记录-Scala异常与处理
  10. plc 上位机编译算法_基于西门子PLC的Socket通信深度剖析
  11. linux安装R3.5.0
  12. 日语学习|如何快速有效地记忆日语五十音图?
  13. OA系统中的会议管理
  14. 老路《用得上的商学课》学习开篇(自序)
  15. Python算法——查找数组前三名
  16. mysql联合索引原理
  17. 基于 esp-idf 的 UART 应用例程解读
  18. 基因编辑最新进展2021年5月
  19. 红孩儿编辑器的模块设计17
  20. (19年最新,操作极简)linux下使用xmind zen破解版

热门文章

  1. 【并发缺陷】data race数据竞争、atomicity violation原子违背、order violation顺序违背
  2. 【C# .NET】Oracle数据库连接的坑之传入parameters参数名SQL语句中的参数变量名不匹配(顺序不一致)的问题
  3. 4399个人中心登录_4399手机开放平台
  4. layer弹出层传递参数(父传子)
  5. autojump——一步到位
  6. 【python--爬虫】百度图片爬虫
  7. Firefox os 游戏开发之2048游戏源码
  8. 视频教程-宝塔面板搭建EasySwoole环境-PHP
  9. 异常(Outlier)检测算法综述
  10. Jackson json转为java对象时遇到不规范的命名规则处理