ASP.Net静的HTMLページの生成

7819 ワード

ダイナミックウェブ開発技術では,ウェブサイトのメンテナンス作業量を低減するために,ダイナミックページ技術が用いられることが多い.現在、インターネット上で流行している方法は、ウェブサイトで常に更新する必要があるデータをデータベースに保存することであり、クライアントブラウザがサーバにHTTP要求を発行すると、サーバはプログラムを実行、解釈することによって、実行結果をHTML形式でクライアントブラウザに転送し、クライアントブラウザは受信、解釈、表示する.しかし、サーバは、これらのプログラムを実行する際に、通常、データベースからレコードをクエリーして読み出す[1].これらの操作は、効率を代価としている.サーバ側がプログラムを実行する際に、データベース内のデータをクエリーして読み取るため、このようなHTMLフォーマットコードを生成する過程は明らかにサーバリソースを消費する必要があり、データベースに記録される増加に伴い、アクセス量の大きいサイトにとってサーバの負荷が過重になる場合がある.
静的ページでは、ページ自体がHTML静的ファイルであるため、ブラウザはこのようなページにアクセスする際に、これらの静的ファイルのHTMLコードをサーバ側からクライアントブラウザに直接渡せばよい.したがって,アクセス速度では,静的ページは動的ページよりはるかに速い.しかし、静的ページの柔軟性が劣っているため、データベースや他のデバイスを利用して関連情報を保存しないと、編集の修正や閲覧権限の制限など、全体的な管理が煩雑になりますが、私たちが頻繁に使用しているファイル、例えば私たちが開発したニュース配信システムでは、多くのユーザーがデータベースを読み取って結果を表示することを望んでいません.このような面では、サーバのリソースを消費しています.一方、閲覧者の多くの貴重な応答時間を占めているため、動的なページを「静的ページ化」する方法があり、現在多くのサイトがこのような技術(新浪、網易、捜狐などの大手サイト)を採用しているが、これらの静的なページは明らかに1ページ1ページ手作りではない.では、より良い解決策があるだろうか.
このような問題を解決するには、一般的にウェブサイトの管理バックグラウンドにウェブページ情報パブリケーションプログラムがあり、ウェブサイトのコンテンツ管理者がウェブページを追加する際に、バックグラウンドを管理するウェブページ情報パブリケーションプログラムを直接利用してページをHTML静的ファイルに保存し、このページは最終的な結果から静的であるが、動的技術によって生成される.
 
主な手順:
1、テンプレートhtmlページの作成
2、ioストリームを使用して、テンプレートページに基づいて静的htmlを作成する
 
テンプレートhtmlページを作成するには、次の手順に従います.
<!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>
  <title>ShowArticle</title>
  
 <body>

 biaoti
 <br>
 content<br>
 author
 </body>
</HTML>

Helperクラスを作成します.WriteFileメソッドがあります.
public class Helper
{
    public static bool WriteFile(string strText, string strContent, string strAuthor)
    {
        string path = HttpContext.Current.Server.MapPath("~/news/");
        Encoding code = Encoding.GetEncoding("UTF-8");
        //       
        string temp = HttpContext.Current.Server.MapPath("~/news/template.html");
        StreamReader sr = null;
        StreamWriter sw = null;
        string str = "";
        try
        {
            sr = new StreamReader(temp, code);
            str = sr.ReadToEnd(); //     
        }
        catch (Exception exp)
        {
            HttpContext.Current.Response.Write(exp.Message);
            HttpContext.Current.Response.End();
            return false;
        }
        finally
        {
            sr.Close();
        }


        string htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html";
        //     
        //   ,            str     
        str = str.Replace("ShowArticle", strText); //     ShowArticle
        str = str.Replace("biaoti", strText);
        str = str.Replace("content", strContent);
        str = str.Replace("author", strAuthor);
        //    
        try
        {
            sw = new StreamWriter(path + htmlfilename, false, code);
            sw.Write(str);
            sw.Flush();
        }
        catch (Exception ex)
        {
            HttpContext.Current.Response.Write(ex.Message);
            HttpContext.Current.Response.End();
            return false;
        }
        finally
        {
            sw.Close();
        }
        return true;
    }
}

次に、静的htmlを作成する必要があるページで上記の方法を呼び出すだけでよい.例:bool result=Helper.WriteFile(this.txtBiaoti.Text.Trim(), this.txtContent.Text.Trim(), this.txtAuthor.Text.Trim());if(result){Response.Write("HTML生成成功!");}else{Response.Write("HTML生成失敗!");        }