Asp.net动态页面静态化之初始NVelocity模板引擎

版权所有,禁止匿名转载;禁止商业使用。

静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页,静态页面网址中一般不含“?”、“=”、“&”等特殊符号。静态页面不能自主管理发布更新的页面,如果想更新网页内容,要通过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("~/"));//模板文件所在的文件夹 MapPath服务器端路径 映射为物理路径
                                     //'~/'位于项目根文件下
        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("~/"));//模板文件所在的文件夹 MapPath服务器端路径 映射为物理路径
          //'~/'位于项目根文件下
          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("~/"));//模板文件所在的文件夹 MapPath服务器端路径 映射为物理路径
          //'~/'位于项目根文件下
          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,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。)技术进行加速。


优点:


1、利于SEO,体现在友好的URL路径和快速的访问速度,asp.net mvc网站可以忽略URL的影响。


2、一个字:就是快!!!静态页面访问速度快,用户体验好,结合CDN技术、缓存和相应的架构,提速效果更加明显!


3、相比动态页面一定程度上减轻服务器压力


缺点:


1、可能需要使用大量硬盘空间


2、增加网站开发复杂度,不利于程序维护和管理。


3、不太灵活,静态化操作是需要触发开关的,不可能频繁的进行操作,可能导致数据更新慢,需要进行相应的设计。


0 0