首先介紹一下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選項:編程
點擊Binary連接後,會出現Jumony的許可協議(也就是LGPL),點擊,開始下載。下載後是一個ZIP文件包,打開後能夠看到裏面有一個目錄Binary,將其隨便展開到一個文件夾,例如C:\Jumony。而後清點一下DLL的數量,正常狀況下應該包含以下DLL:瀏覽器
除了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下載:3d
根據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的請求,並篡改了其結果,完成。