当前位置:编程学习 > C#/ASP.NET >>

ASP.NET页面静态化,谁能告诉我个详细的实现思路?

对于不经常变动的页面,是可以用文件流读取到内容,保存成静态网页,以后直接访问就可以。可是那些经常变动的页面,要怎么做比较好呢,应该不会是每次都去读取数据来替换吧,那不是比直接动态还慢。谁能给我一个比较成熟的思路。 --------------------编程问答--------------------
http://www.cnblogs.com/zhongweiv/archive/2011/11/01/CreateHTML.html --------------------编程问答-------------------- 动态的可以利用JS+AJAX局部刷新,没必要每次生成静态的 --------------------编程问答-------------------- 伪静态 --------------------编程问答-------------------- 我比较赞成二楼的观点,可以用ajax来实现局部刷新 --------------------编程问答--------------------
引用 3 楼  的回复:
伪静态


正解 --------------------编程问答-------------------- 你可以通过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代码,存入模板表,生成的时候,读取模板表,然后把新闻内容替换标签,生成静态页 --------------------编程问答--------------------
引用 10 楼 winner2050 的回复:
为什么人家用静态页呢?
就因为人家的数据是只读的,比如新闻文章、网址导航、图库写真。。。

嗯,正解,有些不常访问,并且是只读数据,才生成静态页面,减少服务器负责 --------------------编程问答-------------------- 页面缓存? --------------------编程问答-------------------- 建立一个专门生成静态页面的模板。
然后替换里面你要修改的数据。最后生成出来的就是一个静态页面。
如果你要修改内容  从新生成一下就好了。从新生成的时候 记得覆盖掉原来的比较好。 --------------------编程问答-------------------- 用IO操作文件的方式吧。

先制作一个HTML的模板,在需要数据的地方用$新闻列表$这种形式表示,然后在后台用IO流读取这个模板到一个字符串里,然后用数据库里得到的数据 来替换 $新闻列表$这种 。然后生成一个html文件 --------------------编程问答-------------------- 静态的内容保存到html模板   这些一般是  文章的整个信息 比如 标题 作者 时间 内容

相关的图片 等等  交互性质的 就是 你问到的 这里用ajax来处理。 不是每次读取的替换。

你把内容看做模板就OK了 交互的 比如登陆 留言 用户操作的。  

具体代码你可以 参考 1楼   --------------------编程问答--------------------
引用 9 楼 wwweeeeynet 的回复:
谢谢6楼来了点实用的东西。其他的全部是废话。“伪静态”,这样的回答,就貌似一个得了病的人,问你该怎么治,你就告诉人家2字,“吃药”。
 楼主好凶~~ 你自己说要思路 ,给你思路 又说不实用。  --------------------编程问答-------------------- “伪静态” 也是要与数据库交互的吧,我到觉得二楼的可行性高点。 --------------------编程问答-------------------- 楼主有空了把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等组合实现。 --------------------编程问答--------------------
引用 楼主 wwweeeeynet 的回复:
对于不经常变动的页面,是可以用文件流读取到内容,保存成静态网页,以后直接访问就可以。可是那些经常变动的页面,要怎么做比较好呢,应该不会是每次都去读取数据来替换吧,那不是比直接动态还慢。谁能给我一个比较成熟的思路。


所谓静态网站,就是从你的服务器是哪个删除asp.net,甚至删除IIS,以一个最轻量级的web服务器(足够下载html/javascript资源文件)就可以很好运转的网站。这就是静态网站。其它就是伪静态的。

经常变动的网页,当然可以做成动态网站啊。

不过假设值得在夜里花3个小时一次性地生成最近一天的网页,那么也可以是放弃动态、转而静态啊。 --------------------编程问答-------------------- “成熟的思路”来自于随需而变的过程的成熟,而不是期望一个死板的教条来作为“成熟的思路”。说到底,是你开发的速度和质量决定是否成熟,是你的能力决定是否成熟,不是靠抄袭别人一个代码于是你就成熟了。 --------------------编程问答-------------------- 21楼理解思路也不错,学习了! --------------------编程问答-------------------- 21楼理解思路也不错,学习了!  --------------------编程问答-------------------- 全部生成静态页有些内容无法及时更新,用Ajax又导致搜索引擎不能检索这部分内容,各有所得也各有所失。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,