大型网站新闻系统如何生成静态网页

   大型网站的新闻系统 一般都是以静态html文件的形式出现,这样做的好处就是对搜索引擎友好,能保证搜索引擎有效地收录网站内容.

    下面我提出两种解决办法,首先看看微软的解决办法.

方法一:微软的解决办法:

This step-by-step article describes how to retrieve the HTML results of a page as a stream and then download the stream to a file. When you use the FileStream object and set the Response.Filter property to the FileStream object, all HTTP output that Response.Write sends also downloads as stream to a file.

Create a Web Form

<script type="text/javascript">loadTOCNode(2, 'summary');</script>To create a Web Form:

1.

In Visual C# .NET, create a new ASP.NET Web Application project named ASPNETFilter.

2.

Right-click the designer pane of WebForm1.aspx.

3.

Click View HTML Source to edit the HTML code.

4.

Replace the existing code with the following code :

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ASPNETFilter.WebForm1" %>
        
        
<HTML>
        
        
        <HEAD>
        
        
               <title>SaveResponse</title>
        
        
        </HEAD>
        
        
        <body>
        
        
               <form id="SaveResponse" method="post" runat="server">
        
        
                       <asp:TextBox ID="TextBox1" Text="Textbox 1" Runat="server" /><br>
        
        
                       <asp:ListBox ID="Listbox1" Runat="server" Size="3">
        
        
                               <asp:ListItem Value="0">Zero</asp:ListItem>
        
        
                               <asp:ListItem Value="1" Selected="True">One</asp:ListItem>
        
        
                               <asp:ListItem Value="2">Two</asp:ListItem>
        
        
                       </asp:ListBox><br>
        
        
                       <asp:CheckBox ID="Checkbox1" Runat="server" Checked="True" Text="Checkbox 1" />
        
        
               </form>
        
        
        </body>
        
        
</HTML>
        
        

Create the ResponseFilter Class

<script type="text/javascript">loadTOCNode(2, 'summary');</script>To create the ResponseFilter class:

1.

Add a new class named ResponseFilter.cs.

2.

Replace the existing code with the following code:

using System;
        
        
using System.IO;
        
        
 
        
        
namespace ASPNETFilter
        
        
{
        
        
        public class ResponseFilter : Stream
        
        
        {
        
        
               private Stream m_sink;
        
        
               private long m_position;
        
        
               private FileStream fs;
        
        
 
        
        
               public ResponseFilter(Stream sink)
        
        
               {
        
        
                       m_sink = sink;
        
        
                       fs = new FileStream(@"C:/FilterOutput/response.htm", FileMode.OpenOrCreate, FileAccess.Write);
        
        
               }
        
        
 
        
        
               // The following members of Stream must be overriden.
        
        
               public override bool CanRead
        
        
               {get { return true; }}
        
        
 
        
        
               public override bool CanSeek
        
        
               {get { return false; }}
        
        
 
        
        
               public override bool CanWrite
        
        
               {get { return false; }}
        
        
 
        
        
               public override long Length
        
        
               {get { return 0; }}
        
        
 
        
        
               public override long Position
        
        
               {
        
        
                       get { return m_position; }
        
        
                       set { m_position = value; }
        
        
               }
        
        
 
        
        
               public override long Seek(long offset, System.IO.SeekOrigin direction)
        
        
               {
        
        
                       return 0;
        
        
               }
        
        
 
        
        
               public override void SetLength(long length)
        
        
               {
        
        
                       m_sink.SetLength(length);
        
        
               }
        
        
 
        
        
               public override void Close()
        
        
               {
        
        
                       m_sink.Close();
        
        
                       fs.Close();
        
        
               }
        
        
 
        
        
               public override void Flush()
        
        
               {
        
        
                       m_sink.Flush();
        
        
               }
        
        
 
        
        
               public override int Read(byte[] buffer, int offset, int count)
        
        
               {
        
        
                       return m_sink.Read(buffer, offset, count);
        
        
               }
        
        
 
        
        
               // Override the Write method to filter Response to a file. 
        
        
               public override void Write(byte[] buffer, int offset, int count)
        
        
               {              
        
        
                       //Write out the response to the browser.
        
        
                       m_sink.Write(buffer, 0, count);
        
        
         
        
        
                       //Write out the response to the file.
        
        
                       fs.Write(buffer, 0, count);    
        
        
               }
        
        
        }
        
        
}
        
        

Note Before you run the Web application:

1.

Create a folder named C:/FilterOutput.

2.

Grant read and write access on the folder for the ASPNET user.

 

Use the Response Filter Class

<script type="text/javascript">loadTOCNode(2, 'summary');</script>1.

In Solution Explorer, select WebForm1.aspx.

2.

Right-click and then select View Code.

3.

Add the following code to theOnInit event code:

Response.Filter = new ResponseFilter(Response.Filter);
        
        

Test the ResponseFilter

<script type="text/javascript">loadTOCNode(2, 'summary');</script>1.

Save the changes to the ASPNETFilter Web project.

2.

On the Build menu, select Build Solution.

3.

Start Microsoft Internet Explorer, and then open WebForm1.aspx by specifying the following URL, where IISServerName is the name of your Microsoft Internet Information Services (IIS) server:

http://IISServerName/ASPNETFilter/WebForm1.aspx
        
        

4.

Find the Response.htm file in the C:/FilterOutput folder.

方法二:我的解决办法:

public static bool WriteFile(string strId, string strOldPath, string strNewPath)
        
        
{
        
        
      string text1 = HttpContext.Current.Server.MapPath(strNewPath);
        
        
      Encoding encoding1 = Encoding.GetEncoding("gb2312");
        
        
      string text2 = strOldPath;
        
        
      StreamWriter writer1 = null;
        
        
      byte[] buffer1 = new WebClient().DownloadData(text2);
        
        
      string text3 = strId + ".htm";
        
        
      string text4 = Encoding.GetEncoding("gb2312").GetString(buffer1);
        
        
      text4 = text4.Replace("UserSearch", "<iframe marginwidth=/"0/" marginheight=/"0/" hspace=/"0/" vspace=/"0/" frameborder=/"0/" scrolling=/"no/" width=/"100%/" nosize height=/"40/" src=/"../Usearch.aspx/"></iframe>");
        
        
      
        
        
if (object.Equals(strId, "index.htm"))
        
        
      {
        
        
            text4 = text4.Replace("../", "");
        
        
      }
        
        
      if (object.Equals(strNewPath, "../musiclist/mmc_"))
        
        
      {
        
        
            
        
        
text4 = text4 + "<iframe style=/"DISPLAY: none/" src=/"../hits.aspx?QuerySpecialFile=" + strId + "/"></iframe>";
        
        
      }
        
        
      try
        
        
      {
        
        
            writer1 = new StreamWriter(text1 + text3, false, encoding1);
        
        
            writer1.Write(text4);
        
        
            writer1.Flush();
        
        
      }
        
        
      catch (Exception exception1)
        
        
      {
        
        
            HttpContext.Current.Response.Write(exception1.Message);
        
        
            HttpContext.Current.Response.End();
        
        
      }
        
        
      finally
        
        
      {
        
        
            writer1.Close();
        
        
      }
        
        
      return true;
        
        
}
        
        
有问题相互交流: QQ:383224716
        
        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值