Jumony入門(一)從這裏開始

首先介紹一下Jumony是什麼,Jumony是一個.NET的開源項目,項目主頁位於:http://jumony.codeplex.com/,採用LGPL協議發佈。html

Jumony試圖提供在傳統Web開發模型中許多難以解決問題的解決方案。一言蔽之,Jumony的一切基礎創建在服務器端的HTML DOM之上。在服務器端將HTML(文件或動態網頁技術的輸出)按照客戶端瀏覽器的處理方式解析爲HTML DOM。操縱和處理HTML DOM,就像咱們在客戶端用JavaScript乾的那些事情同樣,不一樣的是,Jumony可使你依託強大的.NET Framework,來解決之前用腳本和服務器端技術都難以解決的事情。web

 

下載部署

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下載:3d

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的請求,並篡改了其結果,完成。

相關文章
相關標籤/搜索