100分技术讨论,关于asp.net生成html静态页,目录页分页静态化问题
最近在做一个 全html 生成问题,为了方便讨论,简单说一下:
主要是新闻系统,全站静态生成
主题,子类,正文,
新建一个主题 就 新建一个文件夹 在网站下, 如http://aa.cn/games.
创建一个子类就在 所属主题下面 新建文件夹, 如 http://aa.cn/games/class
正文是先做了个模板,然后添加的时候,静态生成她,并放到相对应的目录下
如:
http://aa.cn/games/class/200709220445.html
以上这些都可以实现.
那么在显示子类页的时候 也就是
http://aa.cn/games/class/
应该是显示文章列表的,并且要静态化,这些都可以做到
关键是静态化要分页
怎么解决新添加一个文章在最上面,并且不用全部生成列表呢?
[解决办法]
显示文章列表 也用后台生成..就可以实现....
[解决办法]
肯定是要重要生成的...一般列表页都是做成伪静态的,如果做成静态牺牲太大了
[解决办法]
般列表页都是做成伪静态的
[解决办法]
URL REWRITE
[解决办法]
一般是伪静态!!!!也就是url rewrite!!实现还是动态页面!!
[解决办法]
新添加一个文章在最上面 可以试试获取子类中文章生成的时间,然后按时间先后显示到列表
[解决办法]
实际上,只要能动态看到的东西,就可以生成静态的页面.
提供个思路,因为我也是看过一个cms 是这样做的,
写个页面,这个页面接收一个文章ID,然后就可以显示出该显示的东西,比如页面banner,栏目类别,文章内容 等等, 这个可以实现吧. 然后,再写个生成静态页面的页面,给前面的那个页面传个参数, "请求 " 那个页面,把请求得到的字节流写入静态文件.
其实说得很含糊,这里面还包括了生成文件名等等好多细节,我也不熟悉,大家一起交流吧.
[解决办法]
如果要不全部生成,除非排序是ASC的
一般情部,分页不做静态
还有,生成静态的页也不是按类分放的,要按日期
如果一个文件夹下有1000W个HTML页的话,那OS要花大量些时间去这个文件夹下找
但是把1000W个文件分别放在1000个文件夹下,那么就可以可以按路径准确查找
[解决办法]
将Asp.net页面输出为HTML
http://blog.csdn.net/octverve/archive/2007/09/04/1771107.aspx
anncesky(不想飞,想一步跨过太平洋) ,说设计思路是可行的。
[解决办法]
http://blog.csdn.net/octverve/archive/2007/09/04/1771107.aspx
用的也是类似urlrewriter,不是静态页面生成
[解决办法]
mark 以后用得到
[解决办法]
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Net;
/// <summary>
/// SysImports 的摘要说明
/// 静态页面生成类
/// </summary>
public class SysImports
{
/*************************************
*
*************************************/
private string _path= " ";
private string _fileName;
private string _url=HttpContext.Current.Request.Url.ToString();
private Encoding _code=Encoding.GetEncoding( "utf-8 ");
private string _webPath = " ";
/*************************************
* 设置生成静态也的文件编码
*************************************/
public Encoding code
{
set
{
_code =value;
}
get
{
return _code;
}
}
/*************************************
* 设置把那个页面生成静态页
*************************************/
public string url
{
set
{
int num = _url.IndexOf( '/ ') + 2;
num = _url.IndexOf( '/ ', num);
_url = _url.Substring(0, num);
value = _url + value;
_url = value;
}
get
{
return _url;
}
}
/*************************************
* 返回静态页的路径
*************************************/
public string webPath
{
get
{
return _webPath;
}
}
/*************************************
* 第一次生成静态页的构造函数
*************************************/
public SysImports()
{
_path = "/html/ "+ DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString()+ "/ " + DateTime.Now.Month.ToString()+ "/ "+DateTime.Now.Day.ToString()+ "/ ";
if (Directory.Exists(HttpContext.Current.Server.MapPath(_path)) == false)
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath(_path));
}
_fileName = DateTime.Now.ToString( "yyyyMMddHHmmss ") + DateTime.Now.Millisecond.ToString()+ ".html ";
_webPath = _path + _fileName;
}
/*************************************
* 第二次生成静态页的构造函数
*************************************/
public SysImports(string strURL)
{
_path = strURL.Substring(0,strURL.LastIndexOf( '/ ')+1);
_fileName = strURL.Substring(strURL.LastIndexOf( '/ ')+1);
_webPath = strURL;
}
/*************************************
* 生成静态页面
*************************************/
public void createHtml()
{
StreamReader sr = null;
StreamWriter sw = null;
string str = null;
WebRequest temp = WebRequest.Create(_url);
WebResponse mytemp = temp.GetResponse();
sr = new StreamReader(mytemp.GetResponseStream(), _code);
try
{
sr = new StreamReader(mytemp.GetResponseStream(), _code);
str = sr.ReadToEnd();
}
catch (Exception ex)
{
throw ex;
}
finally
{
sr.Close();
}
string fileName = _fileName;
try
{
sw = new StreamWriter(HttpContext.Current.Server.MapPath(_path) + _fileName, false, code);
sw.Write(str);
sw.Flush();
}
catch (Exception ex)
{
throw ex;
}
finally
{
sw.Close();
}
}
}
试一下这个,这是以前CSDN里的一个朋友写的!
[解决办法]
通常都是用UrlRewrite来将QueryString中的参数变成Path的一部分,以便于搜索引擎等识别,没必要做真正的静态页面。至于执行效率,这需要你优化Cache配置。
[解决办法]
可以用UrlRewrite+Cache
如果整站生成HTML
可以由先小类在大类的生成方法
[解决办法]
mark!
[解决办法]
嗯,这个问题真烦,列表页分页最好是用UrlRewrite+Cache
这样每增加一篇新闻就不用重新生成一次
[解决办法]
-_-!!!很简单啊。
就前面几页生成静态,其他的都作动态的。
我就是这么搞的了。
[解决办法]
坐下学习