代码改变世界

Jumony入门(一)从这里开始

2010-12-19 18:35  Ivony...  阅读(19252)  评论(44编辑  收藏  举报

首先介绍一下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选项:

image

点击Binary链接后,会出现Jumony的许可协议(也就是LGPL),点击image,开始下载。下载后是一个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项目也行,这里用网站作为示范):

image

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

image

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

image

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

image

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:
image

将其保存为index.htm:

image

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

image

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

image

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

image

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

image

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

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

image

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

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

image

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

image

哦耶,真的变成了Hello Jumony。

来查看一下源代码:

image

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

 

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

image

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

 

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