Asp.net动态页面静态化之初始NVelocity模板引擎
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模板引擎的更多相关文章
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
- ASP.NET MVC 页面静态化操作的思路
本文主要讲述了在asp.net mvc中,页面静态化的几种思路和方法.对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能.在asp.net mvc中,视图的 ...
- Asp.Net MVC页面静态化功能实现二:用递归算法来实现
上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter
上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...
- 利用ResultFilter实现asp.net mvc 页面静态化
为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...
- 利用ResultFilter实现asp.net mvc3 页面静态化
为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...
- C#.NET动态页面静态化生成
一,动态页面生成静态也的思路是怎样呢? 1>首先我们都是需要有一个静态模板,这模板的作用就是静态页的最基本模板,如下代码: <!DOCTYPE HTML PUBLIC "-//W ...
- JavaWeb页面静态化之使用freemarker模板生成一个html静态页面
题外话: 页面静态化(展示数据从JSP页面变成HTML页面)实现方式-->模板技术 从本质上来讲,模板技术是一个占位符动态替换技术.一个完整的模板技术需要四个元素:①模板语言(使 ...
随机推荐
- 浅谈cocos2dx(17) 中单例管理模式
----我的生活,我的点点滴滴!. 首先明白一个问题.什么是管理者模式,管理类是用来管理一组相关对象的类,他提供了訪问对象的接口,假设这么说比較抽象的话.我们来看下cocos2dx中都有哪些类是管理类 ...
- comp.lang.javascript FAQ [zz]
comp.lang.javascript FAQ Version 32.2, Updated 2010-10-08, by Garrett Smith FAQ Notes 1 Meta-FAQ met ...
- Android自己定义RatingBar
注意rating_background图片做出来的图片最好和图片四周有一定的空隙.不然会造成图片底部被拉伸的情况. <RatingBar android:layout_width="w ...
- Python+Django+SAE系列教程16-----cookie&session
本章我们来解说cookie和session ,这两个东西相信大家一定不陌生,概念就不多讲了,我们直接来看其使用方法,首先是cookie,我们在view中加入三个视图,一个是显示cookie的,一个是设 ...
- ComponentName
ComponentName,顾名思义,就是组件名称,通过调用Intent中的setComponent方法,我们可以打开另外一个应用中的Activity或者服务. 实例化一个ComponentName需 ...
- ES等待任务——是master节点上的task任务
等待中的任务编辑 有一些任务只能由主节点去处理,比如创建一个新的 索引或者在集群中移动分片.由于一个集群中只能有一个主节点,所以只有这一节点可以处理集群级别的元数据变动.在 99.9999% 的时间里 ...
- 【NOI 2002】 银河英雄传说
[题目链接] https://www.luogu.org/problemnew/show/P1196 [算法] 并查集 [代码] #include<bits/stdc++.h> using ...
- Java-杂项: Java中Array和ArrayList区别
ylbtech-Java-杂项: Java中Array和ArrayList区别 1.返回顶部 1. 1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array( ...
- 5.文件I/O
1 C标准函数与系统函数的区别 文件的结构体: 1.1 I/O缓冲区 每一个FILE文件流都有一个缓冲区buffer,默认大小8192Byte. 1.2 效率 文件缓冲区会降低效率.这里提供缓冲区主要 ...
- Spark RDD概念学习系列之RDD接口
不多说,直接上干货!