ASP.NET页面静态化,谁能告诉我个详细的实现思路?
对于不经常变动的页面,是可以用文件流读取到内容,保存成静态网页,以后直接访问就可以。可是那些经常变动的页面,要怎么做比较好呢,应该不会是每次都去读取数据来替换吧,那不是比直接动态还慢。谁能给我一个比较成熟的思路。 --------------------编程问答--------------------http://www.cnblogs.com/zhongweiv/archive/2011/11/01/CreateHTML.html --------------------编程问答-------------------- 动态的可以利用JS+AJAX局部刷新,没必要每次生成静态的 --------------------编程问答-------------------- 伪静态 --------------------编程问答-------------------- 我比较赞成二楼的观点,可以用ajax来实现局部刷新 --------------------编程问答--------------------
正解 --------------------编程问答-------------------- 你可以通过URLRewriter.dll实现伪静态
1.下载Intelligencia.UrlRewriter.dll文件 urlrewriter.net
2.添加引用
3.设置Web.Config配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
<rewriter>
<rewrite url="~/(.+).html$" to="~/Default.aspx?ID=$1" /> //即把$1的值给括号的地方
</rewriter>
<system.web>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
</system.web>
</configuration>
具体内容你可以参考:
http://www.2cto.com/kf/201205/132337.html以及相关Rewriter技术资料 --------------------编程问答-------------------- 如果全部页面都要静态化的话选择伪静态也是不错选择,安装一个伪静态插件把动态地址替换一下就可以了 --------------------编程问答-------------------- 伪静态 --------------------编程问答-------------------- 谢谢6楼来了点实用的东西。其他的全部是废话。“伪静态”,这样的回答,就貌似一个得了病的人,问你该怎么治,你就告诉人家2字,“吃药”。 --------------------编程问答-------------------- 为什么人家用静态页呢?
就因为人家的数据是只读的,比如新闻文章、网址导航、图库写真。。。 --------------------编程问答-------------------- 生成静态的原理是这样的,比如想生成一条新闻,首先把制作一个新闻模板页,新闻标题的地方用标签,比如$Title$,内容的地方用标签$Content$,然后把这个模板的html代码,存入模板表,生成的时候,读取模板表,然后把新闻内容替换标签,生成静态页 --------------------编程问答--------------------
嗯,正解,有些不常访问,并且是只读数据,才生成静态页面,减少服务器负责 --------------------编程问答-------------------- 页面缓存? --------------------编程问答-------------------- 建立一个专门生成静态页面的模板。
然后替换里面你要修改的数据。最后生成出来的就是一个静态页面。
如果你要修改内容 从新生成一下就好了。从新生成的时候 记得覆盖掉原来的比较好。 --------------------编程问答-------------------- 用IO操作文件的方式吧。
先制作一个HTML的模板,在需要数据的地方用$新闻列表$这种形式表示,然后在后台用IO流读取这个模板到一个字符串里,然后用数据库里得到的数据 来替换 $新闻列表$这种 。然后生成一个html文件 --------------------编程问答-------------------- 静态的内容保存到html模板 这些一般是 文章的整个信息 比如 标题 作者 时间 内容
相关的图片 等等 交互性质的 就是 你问到的 这里用ajax来处理。 不是每次读取的替换。
你把内容看做模板就OK了 交互的 比如登陆 留言 用户操作的。
具体代码你可以 参考 1楼 --------------------编程问答-------------------- 楼主好凶~~ 你自己说要思路 ,给你思路 又说不实用。 --------------------编程问答-------------------- “伪静态” 也是要与数据库交互的吧,我到觉得二楼的可行性高点。 --------------------编程问答-------------------- 楼主有空了把discuzNT研究研究,里面有专门针对这样的处理,搞透算进阶了。
另外楼主可以去http://www.it134.cn/把DTcms下载下来,看看,这个算是当下精简版的处理方式,比较方便你学习进阶 --------------------编程问答-------------------- 看了大家所提出来的方法,思路开阔了好多,自己还不会生成静态这种方法,伪静态会弄简单点的,不过不是用的重写插件,是在Golbal.ascx文件里用正则来实现的伪静态,也就是article.aspx?id=90转换成了article-90.html这种格式,希望大家能给点意见,怎么用正则实现虚拟目录,比方url显示成article/article-90.html --------------------编程问答-------------------- 1.新建测试页面Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="mystudy.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<ol>
<li><a href="UserInfo1.aspx" title="UserInfo1.aspx">编号为1的用户信息</a></li>
<li><a href="UserInfo2.aspx" title="UserInfo2.aspx">编号为2的用户信息</a></li>
<li><a href="UserInfo3.aspx" title="UserInfo3.aspx">编号为3的用户信息</a></li>
<li><a href="UserInfo4.aspx" title="UserInfo4.aspx">编号为4的用户信息</a></li>
<li><a href="UserInfo.aspx?UserId=5" title="UserInfo5.aspx">编号为5的用户信息</a></li>
<li><a href="fdsaf.aspx" title="fdsaf.aspx">不按规则(fdsaf.aspx)来的url请求</a></li>
</ol>
</div>
</form>
</body>
</html>
2.UserInfo.aspx、UserInfo.aspx.cs
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserInfo.aspx.cs" Inherits="mystudy.UserInfo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
<br />
<img src="images/13.jpg" width="283" height="485" title="MM" />
</div>
</form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string strquerying = Request.QueryString["UserId"];
if (string.IsNullOrEmpty(strquerying))
{
int userId = 0;
if (int.TryParse(strquerying, out userId))
{
Literal1.Text = "这是编号为" + userId.ToString() + "的用户的信息。";
}
else
{
Literal1.Text = "错误的参数";
}
}
}
}
3.写一个UrlReWriter类,但是它要继承IHttpModule,这是重点
#region IHttpModule 成员
public void Dispose()
{
//这里写Dispose代码
}
public void Init(HttpApplication context)
{
//context.BeginRequest是开始处理HTTP管线请求时发生的事件
context.BeginRequest += new EventHandler(context_BeginRequest);
//context.Error是当处理过程中发生异常时产生的事件
context.Error += new EventHandler(context_Error);
}
void context_Error(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
context.Response.Write("<html>");
context.Response.Write("<head><title>出错了!</title></head>");
context.Response.Write("<body style=\"font-size:14px;\">");
context.Response.Write("出错了:<br />");
context.Response.Write("<textarea name=\"errormessage\" style=\"width:80%; height:200px; word-break:break-all\">");
context.Response.Write(HttpUtility.HtmlEncode(context.Server.GetLastError().ToString()));
context.Response.Write("</textarea>");
context.Response.Write("</body></html>");
context.Response.End();
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
HttpResponse response = context.Response;
string path = context.Request.Path;
string file = System.IO.Path.GetFileName(path);
//重写后的URL地址
Regex regex = new Regex("UserInfo(\\d+).aspx", RegexOptions.Compiled);
Match match = regex.Match(file);
//如果满足URL地址重写的条件
if (match.Success)
{
//将其按照UserInfo.aspx?UserId=123这样的形式重写,确保能正常执行
context.RewritePath("UserInfo.aspx?UserId=" + match.Groups[1].Value);
}
}
#endregion
4.在Web.config文件中添加httpModules节点
<httpModules>--------------------编程问答-------------------- 最近在研究这个静态化,总结心得如下:
<add name="UrlReWriter" type="UrlReWriter"/>
</httpModules>
用html模板实现,即在添加或者修改的时候,直接给模板赋值生成html静态页面,
html模板的公共部分使用包含,js iframe等组合实现。 --------------------编程问答--------------------
所谓静态网站,就是从你的服务器是哪个删除asp.net,甚至删除IIS,以一个最轻量级的web服务器(足够下载html/javascript资源文件)就可以很好运转的网站。这就是静态网站。其它就是伪静态的。
经常变动的网页,当然可以做成动态网站啊。
不过假设值得在夜里花3个小时一次性地生成最近一天的网页,那么也可以是放弃动态、转而静态啊。 --------------------编程问答-------------------- “成熟的思路”来自于随需而变的过程的成熟,而不是期望一个死板的教条来作为“成熟的思路”。说到底,是你开发的速度和质量决定是否成熟,是你的能力决定是否成熟,不是靠抄袭别人一个代码于是你就成熟了。 --------------------编程问答-------------------- 21楼理解思路也不错,学习了! --------------------编程问答-------------------- 21楼理解思路也不错,学习了! --------------------编程问答-------------------- 全部生成静态页有些内容无法及时更新,用Ajax又导致搜索引擎不能检索这部分内容,各有所得也各有所失。
补充:.NET技术 , ASP.NET