生成静态页大全
前端开发中的静态网页生成器推荐
前端开发中的静态网页生成器推荐随着互联网的飞速发展,前端开发领域成为了一个备受瞩目的行业。
越来越多的人开始关注和学习前端开发,其中一个重要的技术就是静态网页生成器。
静态网页生成器是一种将动态内容生成为静态网页的工具,可以提高网站的性能和安全性。
在本文中,我将介绍几款备受推崇的静态网页生成器,希望能够帮助读者选择适合自己的工具。
一、HugoHugo是一款非常受欢迎的静态网页生成器,由Go语言开发。
它的特点是速度快、灵活性高,支持多种主题和插件。
Hugo使用Markdown语法来编写内容,可以方便地生成静态网页,并且支持自动化部署到各种托管平台。
无论是个人博客、企业网站还是技术文档,Hugo都是一个不错的选择。
二、JekyllJekyll是一个简单易用的静态网页生成器,使用Ruby语言开发。
它的设计目标是用最少的配置和模板文件来生成高效的静态网页。
Jekyll支持多种主题和插件,可以根据个人需求进行自由扩展。
许多知名的技术博客和开源项目都使用Jekyll来构建静态网站,例如GitHub Pages。
三、HexoHexo是一款快速、简洁的静态网页生成器,使用Node.js开发。
它支持多种主题和插件,可以方便地生成优雅的静态网页。
Hexo具有很高的扩展性和定制性,可以根据个人需求进行灵活配置和功能扩展。
许多前端开发者和写手都选择了Hexo来建立自己的个人博客。
四、GatsbyGatsby是一个基于React的现代化静态网站生成器,被广泛用于构建高性能的网站和应用。
Gatsby使用GraphQL来查询数据,可以方便地将各种数据源整合在一起。
它支持PWA(Progressive Web App)和静态文件的预加载,提供了优秀的用户体验。
Gatsby还有大量的插件和主题可供选择,可以根据个人需求来进行定制。
以上是几款备受推荐的静态网页生成器,每一款都有各自的特点和优势。
在选择的时候,可以根据自己的技术栈和需求来进行权衡。
aspx页面生成静态的HTML页面的三种方法
aspx页面生成静态的HTML页面的三种方法asp教程x页面生成静态的HTML页面的三种方法教程系统中,有些动态的页面常被频繁,如我们的首页index.aspx它涉及到大量的数据库教程查询工作,当不断有用户它时,服务器便不断向数据库的查询,实际上做了许多重复的工作服务器端的myPage.aspx客户端显示myPage.htm客户端针对这种资源的浪费情况,我们现在来设计一个解决方案。
我们先将那些一段时间内内容不会有什么改变,但又遭大量的动态页面生成静态的页面存放在服务器上,当客户端发出请求时,就让他们直接我们生成的静态页面,过程如下图。
客户端显示myPage.htm客户端Execute服务器端的myPage.aspx服务器端的myPage.htm现在我们需要一个后台程序来完成这些事情。
我们可将此做成一个类classAspxT oHtml ,其代码using System;using System.IO;using System.Web.UI;namespace LeoLu{/// summary/// AspxToHtml 的摘要说明。
/// /summarypublic class AspxT oHtml{/// summary/// Aspx文件url/// /summarypublic string strUrl;/// summary/// 生成html文件的保存路径/// /summarypublic string strSavePath;/// summary/// 生成html文件的文件名/// /summarypublic string strSaveFile;public AspxToHtml(){//// TOD 在此处添加构造函数逻辑//}/// summary/// 将strUrl放到strSavePath目录下,保存为strSaveFile/// /summary/// returns是否成功/returnspublic bool ExecAspxToHtml(){try{StringWriter strHTML = new StringWriter();System.Web.UI.Page myPage = new Page(); //System.Web.UI.Page中有个Server对象,我们要利用一下它myPage.Server.Execute(strUrl,strHTML);//将asp_net.aspx将在客户段显示的html内容读到了strHTML中StreamWriter sw = new StreamWriter(strSavePath+strSaveFile,true,System.Text.Encoding.GetEncoding("GB23 12"));//新建一个文件Test.htm,文件格式为GB2312sw.Write(strHTML.ToString()); //将strHTML中的字符写到Test.htm中strHTML.Close();//关闭StringWritersw.Close();//关闭StreamWriterreturn true;}catch{return false;}}/// summary/// 将Url放到Path目录下,保存为FileName/// /summary/// param name="Url"aspx页面url/param/// param name="Path"生成html文件的保存路径/param/// param name="FileName"生成html 文件的文件名/param/// returns/returnspublic bool ExecAspxToHtml(string Url,string Path,string FileName){try{StringWriter strHTML = new StringWriter();System.Web.UI.Page myPage = new Page(); //System.Web.UI.Page中有个Server对象,我们要利用一下它myPage.Server.Execute(Url,strHTML); //将asp_net.aspx将在客户段显示的html内容读到了strHTML中StreamWriter sw = new StreamWriter(Path+FileName,true,System.Text.Encoding.GetEncoding("GB23 12"));//新建一个文件Test.htm,文件格式为GB2312sw.Write(strHTML.ToString()); //将strHTML中的字符写到Test.htm中strHTML.Close();//关闭StringWritersw.Close();//关闭StreamWriterreturn true;}catch{return false;}}}}方法A:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Response.Write(AspxToHtml("./admin /Default2.aspx",Server.MapPath("./index.html")));}/// <summary>/// 将Url放到Path目录下,保存为FileName/// </summary>/// <param name="Url">aspx页面url</param>/// <param name="PathFileName">保存路径和生成html文件名</param> /// <returns></returns>public bool AspxToHtml(string Url, string PathFileName){try{StringWriter strHTML = new StringWriter();System.Web.UI.Page myPage = new Page();//System.Web.UI.Page中有个Server对象,我们要利用一下它myPage.Server.Execute(Url, strHTML);//将asp_net.aspx将在客户段显示的html内容读到了strHTML中//StreamWriter sw = new StreamWriter(PathFileName, false, System.Text.Encoding.GetEncoding("GB23 12"));StreamWriter sw = new StreamWriter(PathFileName, false,System.Text.Encoding.Default);sw.Write(strHTML.ToString());//将strHTML中的字符写到指定的文件中strHTML.Close();strHTML.Dispose();sw.Close();sw.Dispose();return true;}catch{return false;}}}方法B:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Label1.Text = DateTime.Now.ToString();}protected override void Render(HtmlTextWriter writer){System.IO.StringWriter html = new System.IO.StringWriter();System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);base.Render(tw);System.IO.StreamWriter sw;sw = new System.IO.StreamWriter(Server.MapPath(" Default.htm"), false, System.Text.Encoding.Default);sw.Write(html.ToString());sw.Close();tw.Close();Response.Write(html.ToString());}}。
三种方法生成静态页面
}
protected override void Render(HtmlTextWriter writer)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
HtmlTextWriter wt = new HtmlTextWriter(tw);
Server.Execute("Default.aspx", tw);
String path = Server.MapPath("test.htm");
System.IO.StreamWriter wter = new System.IO.StreamWriter(path, false, System.Text.Encoding.GetEncoding("GB2312"));
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class tohtml : System.Web.UI.Page
//Response.Redirect("images/tohtml_download.html");
}
}
--------------------------------------------------------------------------------------------------------
ASP生成静态Html网页的几种方法
ASP生成静态Html网页的几种方法网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度. 所以吟清最近对生成html比较感兴趣,看了不少文章,也有一点点收获.1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件<%filename="test.htm"if request("body")<>"" thenset fso = Server.CreateObject("Scripting.FileSystemObject") set htmlwrite = fso.CreateTextFile(server.mappath(""&filename&"")) htmlwrite.write "<html><head><title>" & request.form("title") & "</title></head>"htmlwrite.write "<body>输出Title内容: " & request.form("title") & "<br /> 输出Body内容:" & request.form("body")& "</body></html>"htmlwrite.closeset fout=nothingset fso=nothingend if%><form name="form" method="post" action=""><input name="title" value="Title" size=26><br><textarea name="body">Body</textarea><br><br><input type="submit" name="Submit" value="生成html"> </form>2、但是按照上面的方法生成html文件非常不方便,第二种方法就是利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件.这种技术采用得比较多,大部分的CMS都是使用这类方法.template.htm ' //模板文件<html><head><title>$title$ by </title></head><body>$body$</body></html> ?TestTemplate.asp '// 生成Html <%Dim fso,htmlwriteDim strTitle,strContent,strOut'// 创建文件系统对象Set fso=Server.CreateObject("Scripting.FileSystemObject") '// 打开网页模板文件,读取模板内容Sethtmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm")) strOut=f.ReadAllhtmlwrite.closestrTitle="生成的网页标题"strC'// 用真实内容替换模板中的标记strOut=Replace(strOut,"$title$",strTitle)strOut=Replace(strOut,"$body$",strContent)'// 创建要生成的静态页Sethtmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true) '// 写入网页内容htmlwrite.WriteLine strOuthtmlwrite.closeResponse.Write "生成静态页成功!"'// 释放文件系统对象set htmlwrite=Nothingset fso=Nothing%>3、第三种方法就是用XMLHTTP获取动态页生成的HTML内容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html 文件。
Freemarker生成HTML静态页面
Freemarker⽣成HTML静态页⾯这段时间的⼯作是做⼀个⽹址导航的项⽬,⾯向⽤户的就是⼀个⾸页,于是就想到了使⽤freemarker这个模板引擎来对⾸页静态化。
之前是⽤jsp实现,为了避免⽤户每次打开页⾯都查询⼀次数据库,所以使⽤了jsp的内置对象application,在Controller中将数据都查询出来,然后放⼊application,最后在JSP页⾯使⽤jstl标签配合EL表达式将数据遍历出来。
这样做是从⼀定程度上减轻了服务器的压⼒和页⾯的响应速度,但是仍然没有静态页⾯响应快。
使⽤Freemarker步骤:1. jar包,我的项⽬中使⽤maven来构建,所以在pom.xml中引⼊Freemarker jar包的坐标就可以了。
2. ftl模板,我在WEB-INF下⾯创建⼀个⽂件夹ftl,⾥⾯只放ftl模板⽂件,我创建了⼀个index.ftl⽂件。
3. ftl模板⽂件中写的就是html标签和css样式之类的,但是数据部分需要使⽤Freemarker提供的标签遍历出来。
如下<!--⼴告悬浮--><div class="subMenu"><!--⼯具--><div class='xff'><div class="slideTxtBox"><div class="hd"><span class="arrow"><a class="next"></a><a class="prev"></a></span><ul><#list newsMap?keys as testKey><li>${testKey}</li></#list></ul></div><div class="bd" style="padding: 5px 10px;"><#list newsMap?values as value><div style="text-align: left; table-layout: fixed; word-wrap: break-word; width: 100%;" class="baidu"><#list value as newsList><a target="_blank" href="${newsList.newsurl }" title="${newsList.newsname }">${newsList.newsname }</a></#list></div></#list></div></div></div></div>其中<#list></#list>是Freemarker提供的遍历标签,Freemarker提供了很多的标签,这⾥不⼀⼀叙述。
编译生成静态页面的方法-概述说明以及解释
编译生成静态页面的方法-概述说明以及解释1.引言1.1 概述静态页面是指在服务器端编译生成的无需动态生成内容的网页,它们通常由HTML、CSS和JavaScript等静态文件组成。
与动态页面相比,静态页面具有加载速度快、安全性高、对服务器资源要求低等优点,因此在Web开发中被广泛应用。
在现代Web开发中,静态页面的编译生成方法越来越受到关注。
传统的开发方式是直接编写HTML文件,但当网站规模较大,需要频繁的页面更新或复用时,手动维护和修改HTML文件会带来很大的工作量,同时也容易出现错误。
为了解决这些问题,出现了一种新的开发方式,即编译生成静态页面。
简而言之,这种方式是通过使用特定的工具或技术来将源码转换成静态页面,将复杂的动态操作提前处理,最终生成一组纯静态的HTML文件。
编译生成静态页面的方法多种多样,常用的有静态网站生成器、前端构建工具以及服务器端渲染等。
静态网站生成器是一种特定的软件,它能够从源代码中读取数据,将数据填充到指定的模板中,并生成最终的静态HTML文件。
而前端构建工具则主要用于优化、压缩资源、自动化部署等,它们能够将复杂的开发任务自动化,并生成静态页面。
此外,服务器端渲染也可以用来生成静态页面,它通过在服务器端预编译动态内容,并将其直接输出为静态HTML文件,从而提高页面的加载速度和性能。
编译生成静态页面的方法和工具不仅能够提高开发效率,还可以减少服务器负载,改善用户体验。
随着前端技术的不断发展,这些方法和工具也在不断地更新和完善,为静态页面的编译生成带来了更多的可能性。
本文将详细介绍编译生成静态页面的概念、重要性以及常用的方法和工具。
通过对不同方法的比较和分析,帮助读者选择合适的方式来编译生成静态页面,提升网站的性能和开发效率。
同时,还将展望未来编译生成静态页面的发展趋势,为读者提供更多的参考和思路。
1.2 文章结构本文将围绕编译生成静态页面的方法展开论述。
文章结构如下:引言部分将对编译生成静态页面的概念进行简要介绍,并阐述其在现代Web 开发中的重要性。
php生成静态html页面的方法(2种方法)
php⽣成静态html页⾯的⽅法(2种⽅法)因为每次⽤户点击动态链接的时候都会对服务器发送数据查询的要求,对于⼀个访问量可能达百万千万级别的⽹站来说这⽆疑是服务器⼀个⼤⼤的负担,所以把动态数据转换成静态html页⾯就成了节省⼈⼒物⼒的⾸选。
因为此前没有相应的经验刚开始的时候觉得这个技术很神秘,但在看了⼀些例⼦以后发现并不是那么复杂(不过⽹上的资料并不是特别详细),经过⼀个上午加中下午的试验终于把该做的任务完成了下⾯是⼀些⼼得和⼀个简单的例⼦希望⼤虾们不要笑话我哈⼀般来说⽤php转换输出html页⾯有两种办法引⽤⼤虾的⽂章如下:第⼀种:利⽤模板。
⽬前PHP的模板可以说是很多了,有功能强⼤的smarty,还有简单易⽤的smarttemplate等。
它们每⼀种模板,都有⼀个获取输出内容的函数。
我们⽣成静态页⾯的⽅法,就是利⽤了这个函数。
⽤这个⽅法的优点是,代码⽐较清晰,可读性好。
这⾥我⽤smarty做例⼦,说明如何⽣成静态页:<?phprequire("smarty/Smarty.class.php");$t = new Smarty;$t->assign("title","Hello World!");$content = $t->fetch("templates/index.htm");//这⾥的 fetch() 就是获取输出内容的函数,现在$content变量⾥⾯,就是要显⽰的内容了$fp = fopen("archives/2005/05/19/0001.html", "w");fwrite($fp, $content);fclose($fp);>第⼆种⽅法:利⽤ob系列的函数。
这⾥⽤到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来⾃PHP程序的⾮⽂件头信息均不会发送,⽽是保存在内部缓冲区,直到你使⽤了ob_end_flush().⽽这⾥最重要的⼀个函数,就是ob_get_contents(),这个函数的作⽤是获取缓冲区的内容,相当于上⾯的那个fetch(),道理⼀样的。
关于.net生成静态页面的方法总结
1)做一个比较好的模板temp1.html,并在模板中写好题目,内容,作者以及发布日期的标记,如果还有其他列表的话也要写好其他列表的标记,如题目可以用标记:$Title$,内容可以用$cont$,发布日期$PubDate,最新发布新闻列表$DtNewest$;2)设计数据库,可以设置两张表,一张表存放模板,一张用于存放发布新闻的内容如模板表:TempTable :ID ,classid,TempPath(存放模板的路径);新闻表:NesTable: ID,ClassID,title,cont,Filepath(发布后存放静态页面的路径),pubdate,author,status;3)添加新闻时,现在记录添加到新闻表中,然后再根据栏目的ID找到该栏目的模板,把模板中的内容读取到一个字符串变量中,并用新闻表中的字段替换模板中的相应标记,然后调用c#中的读写文件的类,写到一个静态文件中如:News.HTml,写成功后再更新数据中静态文件路径filepath;这样一个静态文件就写好了另外本人也从网络上搜集了一些资料,供大家参考(关于新闻内容分页的情况下次叙述)一、类似的模板模板页Text.html代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD><title>$ShowArticle$</title><body>$title$<br>$author$<br>$content$<br></body></HTML>二、C#生成静态页类代码|支持列表生成代码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 zj123.Model;using System.IO;using System.Text.RegularExpressions;using System.Runtime.InteropServices;using System.Text;using System.Collections;namespace WebUI.html{public class EasyHtml{public bool MakeHtml(string artid){bool succ = false;int len =Convert.ToInt32(Convert.ToString(System.Configuration.ConfigurationMa nager.AppSettings["titlelength"]) ?? "20");//读取数据string sql = string.Format("selecta.*,b.ClassName,b.Depth,b.OrderBy,b.isTop,b.isList,b.IsLinks,b.Links,b.PicURL,b.ParentID,b.TemplateoutId,b.TemplateinNeiId,b.TemplateinLis tId from article a,zone b where a.classid=b.classid and a.Status=3 and a.articleid={0}", artid);DataTable dt = DbHelperOleDb.Query(sql).Tables[0];if(dt.Rows.Count>0){//外模板string waitemp = "";DataTablewaidt =DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}",Convert.ToString(dt.Rows[0]["TemplateoutId"]).Trim()) ).Tables[0];if (waidt.Rows.Count > 0){waitemp =Convert.ToString(waidt.Rows[0]["TemplateContent"]);}//内模板string neitemp = "";DataTable neidt = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}", Convert.ToString(dt.Rows[0]["TemplateinNeiId"]).Trim())).Tables[0];if (neidt.Rows.Count > 0){neitemp = Convert.ToString(neidt.Rows[0]["TemplateContent"]);}//替换模板waitemp = waitemp.Replace("$intemplate$", neitemp);//替换类型string tempclassname =mon.GetP(Convert.ToString(dt.Rows[0]["classid"]));waitemp = waitemp.Replace("$ClassName$", tempclassname);#region "文章列表"//最新的文章System.Text.StringBuilder sbneartitle = new System.Text.StringBuilder("<div align=\"left\">");DataTable nearTitledt = DbHelperOleDb.Query("select top 10 case whenlen(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><ahref=\"{0}\">{1}</a></li>",Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert. ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$NearTitle$", sbneartitle.ToString());sbneartitle.Remove(0,sbneartitle.ToString().Length);if (waitemp.Contains("$OnTopTitle$")){sbneartitle.Append("<div align=\"left\">");//固定nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and OnTop=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$OnTopTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}if (waitemp.Contains("$HitsTitle$")){sbneartitle.Append("<div align=\"left\">");//热门nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Hits>1000 order by Hits desc,updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$HitsTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}if (waitemp.Contains("$Elite$")){sbneartitle.Append("<div align=\"left\">");//推荐ElitenearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Elite=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$Elite$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}//相关Classidif (waitemp.Contains("$ClassTitle$")){sbneartitle.Append("<div align=\"left\">");nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and classid=" + Convert.ToString(dt.Rows[0]["classid"]) + " order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$ClassTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}//相关Classidif (waitemp.Contains("$LikeTitle$")){sbneartitle.Append("<div align='left'>");DataTable dtlike = zj123.Model.Article.GetLike(artid);for (int likei = 0; likei < dtlike.Rows.Count; likei++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(dtlike.Rows[likei]["HtmlPath"]),Convert.ToString(dtlike.Rows[likei]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$LikeTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}///////////////////////////////////////////////////////////////////////////////////// ////////#endregion//替换最新的数据for (int j = 0; j < dt.Columns.Count; j++){if (dt.Columns[j].ColumnName.Trim() == "Title"){string temp1 = "";string temp2 = "";string typefont = Convert.ToString(dt.Rows[0]["TitleFontType"]);if (typefont == "0"){temp1 = "<strong>";temp2 = "</strong>";}else if (typefont == "1"){temp1 = "<em>";temp2 = "</em>";}else if (typefont == "2"){temp1 = "<strong><em>";temp2 = "</strong></em>";}else{}//System.Text.RegularExpressions.Regex reg = newSystem.Text.RegularExpressions.Regex();//Match match = Regex.Matches();//reg.Replace(waitemp,Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]), 1,waitemp.IndexOf("$Title$"));string temp11 = waitemp.Substring(0, waitemp.IndexOf("$Title$") + 8);string temp22 = waitemp.Substring(waitemp.IndexOf("$Title$") + 8);temp11 = temp11.Replace("$Title$",Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()])+"---"+Regex.Replace(R egex.Replace(tempclassname,"<[^>]*>",""),"[>|<]*",""));temp22 = temp22.Replace("$Title$", "<font color='" +Convert.ToString(dt.Rows[0]["TitleFontColor"]) + "'>" + temp1 +Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) + temp2 + "</font>");waitemp = temp11 + temp22;temp11 = null;temp22 = null;//waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", "<font color='" + Convert.ToString(dt.Rows[0]["TitleFontColor"]) + "'>" +temp1+Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) +temp2+ "</font>");}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "hits"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToInt16(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) > 1000 ? ("热门") : (""));}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "ontop"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]).ToLower() == "true" ? ("置顶") : (""));}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "elite"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$",Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]).ToLower().ToString()== "true" ? ("推荐") : (""));}else{waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]));}}//替换链表信息//$typejs$waitemp = waitemp.Replace("$typejs$", Convert.ToString(dt.Rows[0]["ClassID"]));//$numjs$waitemp = waitemp.Replace("$numjs$", "10");//$setjs$waitemp = waitemp.Replace("$setjs$","");///js脚本信息//根据路径生成页面//路径检查string path =System.Web.HttpContext.Current.Request.PhysicalApplicationPath.Trim() +Convert.ToString(dt.Rows[0]["Links"]) + "\\" +Convert.ToDateTime(dt.Rows[0]["CreateTime"]).ToString("yyyy-MM");if(!Directory.Exists(path))Directory.CreateDirectory(path);string filename = "\\"+ Convert.ToString(dt.Rows[0]["ArticleID"]) + ".html";using(StreamWriter sw = newStreamWriter(path+"\\"+filename,false,System.Text.Encoding.GetEncoding("gb2312"))) {sw.Write(waitemp);sw.Flush();sw.Close();}//修改文章转台try{if (artid == null)return false;int j = int.Parse(artid);}catch{return false;}string sql1 = string.Format("update article set iscreate=1,htmlpath='{0}' where articleid={1}", "/" + Convert.ToString(dt.Rows[0]["Links"]).Replace("\\\\", "/") + "/" + Convert.ToDateTime(dt.Rows[0]["CreateTime"]).ToString("yyyy-MM") + filename, artid);DbHelperOleDb.ExecuteSql(sql1);}else{return false;}return succ;}/// <summary>/// 生成列表页/// </summary>/// <param name="classid"></param>/// <returns></returns>public bool MakeList(string classid){int len =Convert.ToInt32(Convert.ToString(System.Configuration.ConfigurationManager.AppSetting s["titlelength"]) ?? "20");bool succ = false;try{int i = int.Parse(classid);}catch{return false;}DataTable dt = DbHelperOleDb.Query(string.Format("selecta.*,b.ClassName,b.Depth,b.OrderBy,b.isTop,b.isList,b.IsLinks,b.Links,b.PicURL,b.ParentID,b.TemplateoutlistId,b.TemplateoutId,b.TemplateinNeiId,b.TemplateinListId,b.keywords,b.[ description] from article a,zone b where a.classid=b.classid and iscreate=1 anda.Status=3 and a.classid={0} order by a.UpdateTime desc,OnTop desc,Elite desc,Hits desc", classid)).Tables[0];if (dt.Rows.Count > 0){string classpath = HttpContext.Current.Request.PhysicalApplicationPath + @"\" + Convert.ToString(dt.Rows[0]["Links"]).Trim();//读取外模板信息string templatewai = "";DataTable templatewaidt = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}",Convert.ToString(dt.Rows[0]["TemplateoutlistId"]))).Tables[0];if (templatewaidt.Rows.Count > 0){templatewai =Convert.ToString(templatewaidt.Rows[0]["TemplateContent"]);}//根据类型替换标题string tempclassname = mon.GetP(classid);templatewai = templatewai.Replace("$Title$",Convert.ToString(dt.Rows[0]["ClassName"]).Trim()+"--"+Regex.Replace(Regex.Replace(tempclassname,"<[^>]*>",""),"[<|>]*",""));templatewai = templatewai.Replace("$ClassTitleTop$",Convert.ToString(dt.Rows[0]["ClassName"]).Trim());templatewai = templatewai.Replace("$ClassName$", tempclassname);templatewai = templatewai.Replace("$Keyword$",Convert.ToString(dt.Rows[0]["Keywords"]).Trim());templatewai = templatewai.Replace("$Description$",Convert.ToString(dt.Rows[0]["Description"]).Trim());int zong = dt.Rows.Count;int size = 10;try{size =Convert.ToInt16(System.Configuration.ConfigurationManager.AppSettings["pagesize"]);}catch{size = 10;}int pagecount = zong % size == 0 ? (zong / 10) : (zong / 10 + 1);string listcontent = "";DataTable dtlist = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}", Convert.ToString(dt.Rows[0]["TemplateinListId"]))).Tables[0];if (dtlist.Rows.Count > 0){listcontent = Convert.ToString(dtlist.Rows[0]["TemplateContent"]);}//// Match mat = Regex.Match(this.rtbconten.Text.Trim(),"<tablehead>(?<content>.*)<tableheadend><tablebody></tablebodyend><tablepage> </tablepage><tablebottom></tablebottomend>", RegexOptions.Multiline | RegexOptions.IgnoreCase);//// MessageBox.Show(mat.Groups["content"].Value);////<tablehead>(?<content>.*)<tableheadend><tablebody></tablebodyend> <tablepage></tablepage><tablebottom></tablebottomend>////Match mat = Regex.Match(listcontent,"<tablehead>(?<head>.*)<tableheadend><tablebody>(?<body>.*)</tablebodyend><ta blepage>(?<page>.*)</tablepage><tablebottom>(?<bottom>.*)</tablebottomend>",Re gexOptions.IgnoreCase|RegexOptions.Multiline);string head = Convert.ToString(mat.Groups["head"]);string body = Convert.ToString(mat.Groups["body"]);string page = Convert.ToString(mat.Groups["page"]);string bottom = Convert.ToString(mat.Groups["bottom"]);//循环生成分页for (int i = 0; i < pagecount; i++){//System.Text.StringBuilder sbneilist = newSystem.Text.StringBuilder("<TABLE cellSpacing=0 cellPadding=0 width=760border=0><TBODY>");System.Text.StringBuilder sbneilist = new System.Text.StringBuilder(head);int l = 0;for (int j = (i * size < zong) ? (i * size) : (zong); j < ((i + 1) * size < zong ? ((i + 1) * size) : (zong)); j++){//sbneilist.Append(" <TR><TD vAlign=top align=centerbgColor=#f7f7f7 >");//string temp = listcontent;string temp = body;for (int k = 0; k < dt.Columns.Count; k++){temp = temp.Replace("$" + dt.Columns[k].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[j][dt.Columns[k].ColumnName.Trim()]));}if ((++l) % 5 == 0){sbneilist.Append(temp).Append("<dd class=\"l\"></dd>");}else{sbneilist.Append(temp);}//sbneilist.Append("</td></tr>");}//sbneilist.Append("<TR><TDheight=36>").Append(mon.GetPage(i + 1, size, zong)).Append("</td></tr>");sbneilist.Append(page.Replace("¥pages¥", mon.GetPage(i + 1, size, zong)));// sbneilist.Append("</tbody></table>");sbneilist.Append(bottom);#region "文章列表"//最新的文章System.Text.StringBuilder sbneartitle = new System.Text.StringBuilder("");DataTable nearTitledt = DbHelperOleDb.Query("select top 10 case whenlen(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath fromarticle where iscreate=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$NearTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//固定nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and OnTop=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>",Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");templatewai = templatewai.Replace("$OnTopTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//热门nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Hits>1000 order by Hits desc,updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$HitsTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//推荐ElitenearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Elite=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");templatewai = templatewai.Replace("$Elite$", sbneartitle.ToString());sbneartitle.Append("");//相关ClassidnearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and classid=" + classid + " order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$ClassTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);//sbneartitle.Append("<div align='left'>");//DataTable dtlike = zj123.Model.Article.GetLike(artid);//for (int likei = 0; likei < dtlike.Rows.Count; likei++)//{// sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(dtlike.Rows[likei]["HtmlPath"]),Convert.ToString(dtlike.Rows[likei]["Title"]));//}//sbneartitle.Append("</ol></div>");//waitemp = waitemp.Replace("$LikeTitle$", sbneartitle.ToString());//sbneartitle.Remove(0, sbneartitle.ToString().Length);///////////////////////////////////////////////////////////////////////////////////// ////////#endregion//替换链表信息//$typejs$templatewai = templatewai.Replace("$typejs$", classid);//$numjs$templatewai = templatewai.Replace("$numjs$", "10");//$setjs$templatewai = templatewai.Replace("$setjs$", "");string tempzong = templatewai.Replace("$intemplate$", sbneilist.ToString()); string indexshow = (i + 1).ToString() == "1" ? ("") : ((i + 1).ToString());。
网站的静态页面生成方案
uri = uri.substring(0, uri.length()-5);
String[] urls = uri.split("_");
uri = urls[0] + ".do"; if(urls.length > 1) {
doPost(request, response); }
public void doPost(HttpServletRequest request, HttvletException, IOException {
// 编码方式,可以配置到 web.xml 里。 String encoding = “UTF-8”; // 得到真实的请求地址 String templatePath = simpleURLReWrite(request); String realPath=
request.getSession().getServletContext().getRealPath("/"); // 想要生成的静态html文件的名字 String htmlName = getHtmlFileName(request);
// 静态html的名字,包含绝对路径 String cachFileName = realPath + File.separator + htmlName;
if(os.size() == 0) { // 如果请求的地址无效,那么就发送一个404错误。 response.sendError( HttpServletResponse.SC_NOT_FOUND, "");
ASP生成静态页面的方法
ASP生成静态页面1. 什么是动态网页和静态网页动态网页:一般指的是采用ASP,,JSP,PHP,Cold Fusion,CGI等程序动态生成的页面,该网页中的大部分数据内容来自与网站相连的数据库。
这个页面在网络空间中并不存在,动态网页往往容易给人留下深刻的印象。
此外,动态网页还具有容易维护、更新的优点。
首先网页获得用户的指令,然后网页拿着指令到数据库中找和指令对应的数据,然后传递给服务器,通过服务器的编译把动态页面编译成标准的HTML代码,传递给用户浏览器,这样用户就看到了网页。
问题出来了,每次访问网页都要经过这么一个过程,这一过程至少需要几秒钟的时间,访问的人数一多,页面的加载速度就会变慢,对服务器来说也是一种负担;从用户角度来说,网页加载的慢,所以大型网站都是静态网页呈现。
绝大多数的搜索引擎都已支持动态页面的抓取,这就是我们现在这些搜索引擎进行搜索时,结果中出现动态链接的原因,但抓取的数量比静态页面要差的很多倍。
静态网页:静态网页就简单了,静态网页是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。
由此可见,动态网页在访问速度上并不占优势。
但是静态网页也有自己的缺陷,由于占用空间比较大,需要大量的服务器,花费上要高于动态网页网站。
伪静态:论坛和留言系统程序由于评论的人较多,更新速度较快,用纯静态可以说是不起实际,但是用纯静态搜索引擎非常不友好,这时候就出现了一种新的技术,伪静态。
伪静态的缺点是页面访问速度较慢,cpu占用资源较大,如果是ISS数是1000的网站,当有300人同时在线的时候就会出现错误。
但是伪静态对收录同样能起到非常好的作用。
2. 为什么要生成静态页面在三年前,有百分之八十的网站要求做成动态的。
也就是从那个时候也就是ASP的发展高峰期。
一些静态网页也要求做成动态网站。
但是这二年来,网站要求做成静态的。
也就是网页要求静态化。
为什么会有这样的变化?到底意味着什么?目前网页HTML静态化是利用其它的动态技术生成HTML静态页面,还不是静态网站。
asp.net生成html静态页的多种方法
生成html静态页的多种方法用C#做脚本的的方法,这个是我自己写的,在《Visual C#.NET范例入门与提高》的P311,有对WebRequest和HttpRequest、HttpWebRequest、HttpWebResponse四个类的简单说明调用的时候这样:第二种方法是用一个html模板生成一个html页面,模版里面有对应的标签,可以从数据库和别的地方取数据,填写这个标签,生成一个html页面,这个方法在很多新闻系统里有用到我参考这里面的代码写的:出错:" + exp.Message);HttpContext.Current.Response.End();sr.Close();}// 替换内容// 对应模版里的设置要修改str = str.Replace("re_symbol_EventID", EventID);str = str.Replace("re_symbol_EventTitle", EventTitle);str = str.Replace("re_symbol_EventBody", EventBody);str = str.Replace("re_symbol_EventTime", EventTime);str = str.Replace("re_symbol_EventStat", EventStat);// 写文件try{sw = new StreamWriter(htmlfilepath + "\\" + htmlfilename, false, code);sw.Write(str);sw.Flush();}catch (Exception ex){HttpContext.Current.Response.Write("<p>写入文件出错:" + ex.Message);HttpContext.Current.Response.End();}finally{sw.Close();调用的时候这样://取内容,这里我取了页面上的一个gridview里的选中行的数据int i;i = GridView1.SelectedIndex;if (i == null || i==-1) i = 0;string EventID, EventTitle, EventBody, EventTime, EventStat;EventID=GridView1.Rows[i].Cells[0].T ext;EventTitle=GridView1.Rows[i].Cells[1].Text;EventBody=GridView1.Rows[i].Cells[2].Text;EventTime=GridView1.Rows[i].Cells[3].Text;EventStat=GridView1.Rows[i].Cells[4].Text;//生成文件,返回文件名string fna;fna=CreateDetailPage(EventID, EventTitle, EventBody, EventTime, EventStat);Response.Write("<p>生成文件成功:" + fna);。
前端开发技术之静态网页生成方法
前端开发技术之静态网页生成方法在当今数字化的时代,互联网已经成为了人们获取信息、进行交流的主要平台之一。
而网页作为互联网的基本单元,开发出优秀的网页对于提升用户体验、增加网站流量和提高搜索引擎排名来说非常重要。
本文将重点讨论前端开发中的一项重要技术,即静态网页生成方法。
静态网页是指不需要服务器进行处理的网页,所有内容都是提前由开发者生成好的。
相比动态网页,静态网页加载速度更快、响应更迅速,同时也更安全可靠。
接下来将介绍几种常见的静态网页生成方法。
一、HTML和CSS静态生成HTML是网页的基本结构语言,而CSS用来美化网页样式。
通过手动编写HTML和CSS代码,我们可以静态生成网页。
这种方法最直接简单,无需任何工具和框架的支持,适合简单的静态页面。
只需在文本编辑器中打开一个空白文件,编写HTML的标签,在其中插入CSS样式,保存为.html文件即可。
二、模板引擎静态生成模板引擎是一种将模板和数据结合生成静态页面的工具。
通过使用模板引擎,我们可以将页面中的动态部分提取出来,并在生成静态页面时动态插入数据。
常见的模板引擎有Mustache、Handlebars、EJS等。
以Mustache为例,我们需要先编写一个Mustache模板文件,其中使用{{}}标记动态部分,然后通过引入相应的数据,生成最终的静态页面。
三、静态网页生成器静态网页生成器是一种将模板和内容结合生成静态网页的工具。
通过静态网页生成器,我们可以更方便快捷地生成静态网页,无需手动编写HTML和CSS代码。
常见的静态网页生成器有Jekyll、Hexo、Gatsby等。
以Jekyll为例,我们需要编写一个配置文件和一个模板文件,并在模板文件中引入Markdown文件作为内容,然后通过命令行工具生成静态网页。
静态网页生成器一般支持自动化构建、自动刷新、自动生成目录和导航等功能,大大提高了开发效率。
四、前端框架静态生成前端框架是为了提高开发效率而设计的工具,通过前端框架可以实现快速搭建网页结构、实现交互效果等功能。
PHP生成静态页面
生成静态页面:其实思路异常的简单,我们知道PHP只是个解析脚本,当它执行完后,我们直接吧生成的这个页面另存为一个静态的HTML文件就可以了。
最最最核心就是PHP Output Control 输出控制函数。
其实PHP手册中已经有了完整的代码,我们只需要简单的修改就可以了。
我们来看一下ob_start函数。
PHP代码我们看到,其实就是一个回调函数在做鬼,页面的输出部分都当作一个$buffer参数传进去,想到了?对,如果要生成静态页面,我们只需要fwrite($fp,$buffer);就OK啦。
我们下面来看下核心的代码:PHP代码到这里,我们已经可以生成静态页面了,你还不会没关系,继续往下看。
我们现在先不往下研究了,我们回过头来看一下cnbeta是怎么设计的。
首先打开cnbeta的首页。
我们看到有一系列的文章列表,把鼠标移到任意一个页面上去,我们可以看到其连接,并不是一个HTML静态文件,而是一个PHP文件,比如:/article.php?sid=66196。
我们来看下,当你点开这个连接,他会自动跳到相同参数的一个HTML静态页面,所以我是这样认为的:首先跳到一个比如叫article.php?sid=66196,在这个PHP文件中进行一系列的判断处理,比如有没有静态文件,这个静态页面是不是最新的等等。
如果有静态页面,那么好,就跳转到66196.html这个文件。
好,现在我们根据他的思路,写一个article.php。
我们的文章是以参数传进去的,比如article.php?id=5 就是第五篇文章。
在这个article头部检查是否存在5.html这个文件,如果存在转到该文件,如果不存在就creatHtml()直接调用上面那个函数,但是fileName还得更改下,因为我那个叫temp.html。
生成了静态页面了,如果你是一个好学者,你肯定会有一个很大的疑问,就是如何知道这个HTML是最新的呢?比如我一开始写了一个文章,ID为5,内容为12345,并且生成了静态页面5.html。
C#中生成静态页的几种方案
方案1:/// <summary>/// 传入URL返回网页的html代码/// </summary>/// <param name="Url">URL</param>/// <returns></returns>public static string getUrltoHtml(string Url){errorMsg = "";try{.WebRequest wReq = .WebRequest.Create(Url );// Get the response instance..WebResponse wResp =wReq.GetResponse();// Read an bbb-specific property//if (wResp.GetType() ==bbbWebResponse)//{//DateTime updated =((.bbbWebResponse)wResp).LastMo dified;//}// Get the response stream.System.IO.Stream respStream = wResp.GetResponseStream();// Dim reader As StreamReader = New StreamReader(respStre am)System.IO.StreamReader reader = new System.IO.StreamReader(re spStream, System.Text.Encoding.GetEncoding("gb2312"));return reader.ReadToEnd();}catch(System.Exception ex){errorMsg = ex.Message ;}return "";}你可以用这个函数获取网页的客户端的html代码,然后保存到.html文件里就可以了。
分享常见的几种页面静态化的方法
分享常见的⼏种页⾯静态化的⽅法time()){//如果没过期echo file_get_contents($goods_statis_file);//输出静态⽂件内容exit;}else{//如果已过期unlink($goods_statis_file);//删除过期的静态页⽂件ob_start();//从数据库读取数据,并赋值给相关变量//include ("xxx.html");//加载对应的商品详情页模板$content = ob_get_contents();//把详情页内容赋值给$content变量file_put_contents($goods_statis_file,$content);//写⼊内容到对应静态⽂件中ob_end_flush();//输出商品详情页信息}}else{ob_start();//从数据库读取数据,并赋值给相关变量//include ("xxx.html");//加载对应的商品详情页模板$content = ob_get_contents();//把详情页内容赋值给$content变量file_put_contents($goods_statis_file,$content);//写⼊内容到对应静态⽂件中ob_end_flush();//输出商品详情页信息}>2.使⽤nosql从内存中读取内容(其实这个已经不算静态化了⽽是缓存);以memcache为例:connect('memcache_host', 11211);$mem_goods_content = $mem->get($goods_statis_content);if($mem_goods_content){echo $mem_goods_content;}else{ob_start();//从数据库读取数据,并赋值给相关变量//include ("xxx.html");//加载对应的商品详情页模板$content = ob_get_contents();//把详情页内容赋值给$content变量$mem->add($goods_statis_content,$content, false, $expr);ob_end_flush();//输出商品详情页信息}>memcached是键值⼀⼀对应,key默认最⼤不能超过128个字节,value默认⼤⼩是1M,因此1M⼤⼩满⾜⼤多数⽹页⼤⼩的存储。
网页的html(自动生成静态页面)
网页的html(自动生成静态页面)设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。
我们只需使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。
另外,HTML是网络的通用语言,一种简单、通用的全置标记语言。
它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。
神奇吗?一点都不神奇,因为现在你看到的就是这种语言写的页面!也许你听说过许多可以编辑网页的软件,事实上,你不需要用任何专门的软件来建立HTML页面;你所需要的只是一个文本编辑器(或字处理器)(如Office Word\记事本\写字板\Gedit\Vim\ 等等)以及HTML的工作常识。
其实你很快就会发现,基础的HTML语言简直容易死了。
HTML只不过是组合成一个文本文件的一系列标签。
它们像乐队的指挥,告诉乐手们哪里需要停顿,哪里需要激昂。
HTML标签通常是英文词汇的全称(如块引用:blockquote)或缩略语(如“p”代表Paragraph),但它们的与一般文本有区别,因为它们放在单书名号里。
故Paragragh标签是<p>,块引用标签是<blockquote>。
有些标签说明页面如何被格式化(例如,开始一个新段落),其他则说明这些词如何显示(<b>使文字变粗)还有一些其他标签提供在页面上不显示的信息--例如标题。
关于标签,需要记住的是,它们是成双出现的。
每当使用一个标签--如<blockquote>,则必须以另一个标签</blockquote>将它关闭。
注意“blockquote”前的斜杠,那就是关闭标签与打开标签的区别。
如何生成静态页面的PHP类
如何生成静态页面的PHP类如何生成静态页面的PHP类PHP具有非常强大的功能,所有的CGI的'功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。
最重要的是PHP可以用C、C++进行程序的扩展!以下是店铺为大家搜索整理的如何生成静态页面的PHP类,希望能给大家带来帮助!更多经常内容请及时关注我们店铺!class html{var $dir; //dir for the htmls(without/)var $rootdir; //root of html files(without/):htmlvar $name; //html文件存放路径var $dirname; //指定的文件夹名称var $url; //获取html文件信息的来源网页地址var $time; //html文件信息填加时的时间var $dirtype; //目录存放方式:year,month,,,,var $nametype; //html文件命名方式:namefunctionhtml($nametype='name',$dirtype='year',$rootdir='html') {$this->setvar($nametype,$dirtype,$rootdir);}functionsetvar($nametype='name',$dirtype='year',$rootdir='html') {$this->rootdir=$rootdir;$this->dirtype=$dirtype;$this->nametype=$nametype;}function createdir($dir=''){$this->dir=$dir?$dir:$this->dir;if (!is_dir($this->dir)){$temp = explode('/',$this->dir);$cur_dir = '';for($i=0;$i{$cur_dir .= $temp[$i].'/';if (!is_dir($cur_dir)){@mkdir($cur_dir,0777);}}}}function getdir($dirname='',$time=0){$this->time=$time?$time:$this->time;$this->dirname=$dirname?$dirname:$this->dirname; switch($this->dirtype){case 'name':if(empty($this->dirname))$this->dir=$this->rootdir;else$this->dir=$this->rootdir.'/'.$this->dirname; break;case 'year':$this->dir=$this->rootdir.'/'.date("Y",$this->time); break;case 'month':$this->dir=$this->rootdir.'/'.date("Y-m",$this->time); break;case 'day':$this->dir=$this->rootdir.'/'.date("Y-m-d",$this->time); break;}$this->createdir();return $this->dir;}function geturlname($url=''){$this->url=$url?$url:$this->url;$filename=basename($this->url);$filename=explode(".",$filename);return $filename[0];}function geturlquery($url=''){$this->url=$url?$url:$this->url;$durl=parse_url($this->url);$durl=explode("&",$durl[query]);foreach($durl as $surl){$gurl=explode("=",$surl);$eurl[]=$gurl[1];}return join("_",$eurl);}function getname($url='',$time=0,$dirname=''){$this->url=$url?$url:$this->url;$this->dirname=$dirname?$dirname:$this->dirname;$this->time=$time?$time:$this->time;$this->getdir();switch($this->nametype){case 'name':$filename=$this->geturlname().'.htm';$this->name=$this->dir.'/'.$filename;break;case 'time':$this->name=$this->dir.'/'.$this->time.'.htm';break;case 'query':$this->name=$this->dir.'/'.$this->geturlquery().'.htm';break;case 'namequery':$this->name=$this->dir.'/'.$this->geturlname().'-'.$this->geturlquery().'.htm';break;case 'nametime':$this->name=$this->dir.'/'.$this->geturlname().'-'.$this->time.'.htm';break;}return $this->name;}functioncreatehtml($url='',$time=0,$dirname='',$htmlname='') {$this->url=$url?$url:$this->url;$this->dirname=$dirname?$dirname:$this->dirname;$this->time=$time?$time:$this->time;//上面保证不重复地把变量赋予该类成员if(empty($htmlname))$this->getname();else$this->name=$dirname.'/'.$htmlname; //得到name$content=file($this->url) or die("Failed to open the url ".$this->url." !");;///////////////关键步---用file读取$this->url$content=join("",$content);$fp=@fopen($this->name,"w") or die("Failed to open the file ".$this->name." !");if(@fwrite($fp,$content))return true;elsereturn false;fclose($fp);}/////////////////以name为名字生成htmlfunction deletehtml($url='',$time=0,$dirname=''){$this->url=$url?$url:$this->url;$this->time=$time?$time:$this->time;$this->getname();if(@unlink($this->name))return true;elsereturn false;}/*** function::deletedir()* 删除目录* @param $file 目录名(不带/)* @return*/function deletedir($file){if(file_exists($file)){if(is_dir($file)){$handle =opendir($file);while(false!==($filename=readdir($handle))) {if($filename!="."&&$filename!="..")$this->deletedir($file."/".$filename);}closedir($handle);rmdir($file);return true;}else{unlink($file);}}}}。
生成静态HTML
生成静态HTML对于网站特别是CMS系统中,生成静态页面是必不可少的,静态页面不用去和数据库打交道,可以提高页面的访问速度。
生成静态页面的方法一般有两种,一种是以模板的形式生成,第二种是直接根据URL来生成静态页面。
以模板形式生成以模板形式生成的原理就是字符串替换,在.NET中已经提供了一个字符串替换的函数 Replace用模板生成静态页面共分三步,和把大象放在冰箱里的步骤差不多1.读取模板(把冰箱门打开)2.替换字符串(把大象放在冰箱里)3.保存替换后的字符串(把冰箱门关上)我们建立一个 aaa.htm文件作为模板<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><title> $title$</title></head><body><h2>$title$</h2><div>内容:$content$</div></body></html>其中$title$ 和$content$ 就是我们要替换的字符串string Path = Server.MapPath("template/aaa.htm");//得到模板的路径Encoding code = Encoding.GetEncoding("gb2312");//用gb2312来编码string str = string.Empty;StreamReader sr = new StreamReader(Path, code);//把文件转换成流str = sr.ReadToEnd();//把流从头读到尾sr.Close();//关闭读流string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html";//建立一个文件名str = str.Replace("$title$", TextBox1.Text );//替换Title//str = str.Replace("$content$", TextBox2.Text );//替换content //生成静态文件StreamWriter sw = new StreamWriter(Server.MapPath("html/") + fileName, false, code);sw.Write(str);sw.Flush();sw.Close();根据URL生成根据URL生成就是直接读入要生成的URL并把返回的页面存成html页面Encoding code = Encoding.GetEncoding("gb2312");string str = null;//读取远程路径WebRequest temp = WebRequest.Create(TextBox3.Text .Trim ());//这里我们用textBox3来填写urlWebResponse myTemp = temp.GetResponse();StreamReader sr = newStreamReader(myT emp.GetResponseStream(), code);//读取str = sr.ReadToEnd();sr.Close();string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html";StreamWriter sw = new StreamWriter(Server.MapPath("html/") + fileName, false, code);sw.Write(str);sw.Flush();sw.Close();两种方法的原理都很简单,个人比较喜欢第一种方法,在cms系统中的生成静态页面大多也是采用第一种方法来做的,这样做可以提高页面定制的灵活性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面,分别生成ndex1.htm,index2.htm,index3.htm存在根目录下面:
程序代码
<%
dim strUrl,Item_Classid,id,FileName,FilePath,Do_Url,Html_Temp
}
fclose ($handle); //关闭指针
die ("创建文件".$filename."成功!");
?>
二,分页问题。
如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。第二步,for ($i = 0; $i < allpages; $i++),页面元素获取,分析,文章生成,都在此循环中执行。不同的是,die ("创建文件".$filename."成功!";这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:
Html_Temp = Html_Temp&FilePath&"</LI>"
Do_Url = "http://"
Do_Url = Do_Url&Request.ServerVariables("SERVER_NAME")&"/main/index.asp"
Do_Url = Do_Url&"?Item_Classid="&Item_Classid
/*
检查文件是否被创建且可写
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可写,请检查其属性后重试!");
}
if (!fwrite ($handle,$content)){ //将信息写入文件
die ("生成文件".$filename."失败!");
Html_Temp="<UL>"
For i=1 To 3
Html_Temp = Html_Temp&"<LI>"
Item_Classid = i
FileName = "Index"&Item_Classid&".htm"
FilePath = Server.MapPath("/")&"\"&FileName
PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以何种方式,它的基本原理是这样的。由客户端提出请求,请求某一页面 -----> WEB服务器引入指定相应脚本进行处理 -----> 脚本被载入服务器 -----> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 ----> 将解析后的HTML语句以包的方式传回给浏览器。由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。
$content .= str_replace ("{file}",$file,$content);
$content .= str_replace ("{title}",$title,$content);
// echo $content;
$filename = "test/test.html";
程序代码<?php
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
言归正传。用过PHP文件操作函数的PHP FANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最后一句,并指定在test目录下生成一个名为test.html的静态文件:
生成静态页大全 (2006-05-26 16:21:48) 分类:网站设计技巧篇
随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。
$content .= str_replace ("{file}",$file,$content);
$content .= str_replace ("{title}",$title,$content);
// 生成列表开始
$list = '';
$sql = "select id,title,filename from article";
Response.Write ( "<BR>" )
Response.Write Html_Temp
%>
PHP生成静态网页的方法
看到很多朋友在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考。好了,我们先回顾一些基本的概念。
一,PHP脚本与动态页面。
$handle = fopen ($filename,"w"); //打开文件指针,创建文件
/*
检查文件是否被创建且可写
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可写,请检查其属性后重试!");
}
if (!fwrite ($handle,$content)){ //将信息写入文件
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$title,$content);
echo $content;
?>
模板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有phplib,smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将判断,循环等处理放进模板文件中,用解析类处理,典型应用为block概念,简单来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类具体实施这些操作。
好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。
PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时因为HTML的不可写性,我们创建的HTML若有修改,则需删掉重新生成即可。(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)
程序代码<?php
$title = "测试模板";
$file = "TwoMax Inter test templet,<br>author:Matrix@Two_Max";
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
}
$content .= str_replace ("{articletable}",$list,$content);
//生成列表结束
// echo $content;
$filename = "test/test.html";
$handle = fopen ($filename,"w"); //打开文件指针,创建文件
$query = mysql_query ($sql);
while ($result = mysql_fetch_array ($query)){
$list .= '<a href='.$root.$result['filename'].' target=_blank>'.$result['title'].'</a><br>';
die ("生成文件".$filename."失败!");
}
fclose ($handle); //关闭指针
die ("创建文件".$filename."成功!");
?>