1. 程式人生 > >Asp.net動態頁面靜態化之初始NVelocity模板引擎

Asp.net動態頁面靜態化之初始NVelocity模板引擎

實現 tracking ssr system uil 文件系統 處理程序 .ashx hosting

Asp.net動態頁面靜態化之初始NVelocity模板引擎

靜態頁面是網頁的代碼都在頁面中,不須要運行asp,php,jsp,.net等程序生成client網頁代碼的網頁,靜態頁面網址中一般不含“?”、“=”、“&”等特殊符號。

靜態頁面不能自主管理公布更新的頁面,假設想更新網頁內容,要通過FTP軟件把文件DOWN下來用網頁制作軟件改動(通過fso等技術例外) 常見的靜態頁面舉例:.html擴展名的、.htm擴展名的。 註意:靜態頁面並不是站點上沒有動畫的就是靜態頁面。

如今我們就通過NVelocity模板引擎簡單的實現一下登陸過程的動態頁面靜態化

首先我們須要有一個html靜態頁面

<html>
<head><title></title>
</head>
<body>
    <strong><font>登錄</font></strong><form action=‘Handler1.ashx‘>
    <input type=‘text‘ name=‘username‘ value="$username" />
    <input type=‘password‘ name=‘password‘value=‘$password‘ />
    <input type=‘submit‘ value=‘登錄‘ /></form>
    <p> $msg</p>
</body>
</html>

我們能夠發現 頁面中的Value值都是以$開頭的定義符 這是為了方便接下來的傳值

以下我們新建一個c#一般處理程序 編寫代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NVelocity.Runtime;
using NVelocity;
using NVelocity.App;

namespace czbk
{
    /// <summary>
    /// Handler1 的摘要說明
    /// </summary>
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string username = context.Request["username"];
            string password = context.Request["password"];
            if (string.IsNullOrEmpty(username) && string.IsNullOrEmpty(password))
            {
                VelocityEngine vltEngine = new VelocityEngine();//初始化VelocityEngine引擎
                vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");//模板文件位於文件系統中
                vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,
                    System.Web.Hosting.HostingEnvironment.MapPath("~/"));//模板文件所在的目錄 MapPathserver端路徑 映射為物理路徑
                                                                         //‘~/‘位於項目根文件下
                vltEngine.Init();//實例對象初始化
                VelocityContext vltContext = new VelocityContext();//創建一個上下文對象
                // vltContext.Put("data", data);//設置參數。在模板中能夠通過$data來引用
                vltContext.Put("username", "");
                vltContext.Put("password", "");
                vltContext.Put("msg", "");
                Template vltTemplate = vltEngine.GetTemplate("login.html");
                System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                vltTemplate.Merge(vltContext, vltWriter);
                string html = vltWriter.GetStringBuilder().ToString();
                context.Response.Write(html);
            }
            else
            {
                if (username == "admin" && password == "123")
                {
                    VelocityEngine vltEngine = new VelocityEngine();//初始化VelocityEngine引擎
                    vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");//模板文件位於文件系統中
                    vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,
                        System.Web.Hosting.HostingEnvironment.MapPath("~/"));//模板文件所在的目錄 MapPathserver端路徑 映射為物理路徑
                    //‘~/‘位於項目根文件下
                    vltEngine.Init();//實例對象初始化
                    VelocityContext vltContext = new VelocityContext();//創建一個上下文對象
                    // vltContext.Put("data", data);//設置參數,在模板中能夠通過$data來引用
                    vltContext.Put("username", username);
                    vltContext.Put("password", password);
                    vltContext.Put("msg", "登陸成功");
                    Template vltTemplate = vltEngine.GetTemplate("login.html");
                    System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                    vltTemplate.Merge(vltContext, vltWriter);
                    string html = vltWriter.GetStringBuilder().ToString();
                    context.Response.Write(html);
                }
                else
                {
                    VelocityEngine vltEngine = new VelocityEngine();//初始化VelocityEngine引擎
                    vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");//模板文件位於文件系統中
                    vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,
                        System.Web.Hosting.HostingEnvironment.MapPath("~/"));//模板文件所在的目錄 MapPathserver端路徑 映射為物理路徑
                    //‘~/‘位於項目根文件下
                    vltEngine.Init();//實例對象初始化
                    VelocityContext vltContext = new VelocityContext();//創建一個上下文對象
                    // vltContext.Put("data", data);//設置參數。在模板中能夠通過$data來引用
                    vltContext.Put("username", username);
                    vltContext.Put("password", password);
                    vltContext.Put("msg", "登陸失敗");
                    Template vltTemplate = vltEngine.GetTemplate("login.html");
                    System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                    vltTemplate.Merge(vltContext, vltWriter);
                    string html = vltWriter.GetStringBuilder().ToString();
                    context.Response.Write(html);
                }
            }
        }  
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

這樣一個簡單的登陸功能頁面靜態化就做好了
ps

一般來說一些不常常更新內容的頁面就能夠考慮進行靜態操作。比方新聞頁面,小說的章節頁面,畢竟這些內容一旦公布了,就非常少會進行修改。並且能夠使用CDN(CDN的全稱是Content Delivery Network,即內容分發網絡。其基本思路是盡可能避開互聯網上有可能影響傳輸數據速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網絡各處放置節點server所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地依據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求又一次導向離用戶近期的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況。提高用戶訪問站點的響應速度。)技術進行加速。

  長處:

  1、利於SEO,體如今友好的URL路徑和高速的訪問速度,asp.net mvc站點能夠忽略URL的影響。

  2、一個字:就是快!!!靜態頁面訪問速度快。用戶體驗好。結合CDN技術、緩存和對應的架構,提速效果更加明顯!

  3、相比動態頁面一定程度上減輕server壓力

  缺點:

  1、可能須要使用大量硬盤空間

  2、添加站點開發復雜度。不利於程序維護和管理。

  3、不太靈活,靜態化操作是須要觸發開關的,不可能頻繁的進行操作,可能導致數據更新慢,須要進行對應的設計。

Asp.net動態頁面靜態化之初始NVelocity模板引擎