asp.net静态化页面
静态化页面是指使用动态页面语言编程,生成*.htm静态页面文件。好像这个技术很流行!看象百度知道,没一个问题都是一个html文件,163新闻评论页面也都是html页面。所以在网上搜索了一下相关的资料。
asp.net中的实现方法:
查找了很多资料,说我看到的一些实现方法。
1.
2、采用xml文件,结合xlst文件。这种方法很多人都知道,因为CSDN论坛就是这么做的。我个人对xml方面的技术不太了解也不感兴趣。想了解这方面资料的自己找去吧,反正是通过xlst文件(模版)自动显示xml文件的内容出来。
3.采用Ajax技术,采用这个当然可以做到静态页面了。
4.采用html模版替换技术。就是预先写个html模版文件,然后在生成静态页面时进行替换。这种方法实现起来很容易,也是我想到的方法。网上有很多例子,我就不详细说了。比如写象下面一样一个模版:
<html>
…
…
…
…
title
content
</html>
静态页面评论功能的实现:
这也是一开始不理解的地方,看网易新闻,百度知道,都是html静态页面都还可以回复,发表评论等。这些评论、回复是要保存到数据库里面去的,不是动态页面才能实现的功能吗?我一开始感到很奇怪。综合众人的说法,网页点击技术等可以通过在
include 页面外javascript脚本的时候指定src
为一个asp之类的动态网页,在那个动态页面实现计数等功能。评论功能的实现有人说在页面下端加一个iframe来显示。在iframe里加一个动态页面确实可以做到的,不过我觉得好像和直接采用动态页面没多大区别。
<form method="post" name="fdf" action="http://zhidaocommit.baidu.com/q"
onSubmit="return checkcoAndsn(this,'回答');">
<input type="hidden"
name="ct" value="22">
<input type="hidden" name="cm"
value="100009">
<input type="hidden" name="tn"
value="ikreplysubmit">
<input type="hidden" name="qid"
value="19229897">
<input type="hidden" name="cid"
value="93">
<script
language="javascript">
document.write("<input type=hidden name=lu
value="+escape(location.href)+ ">");
</script>
<div
class="b4g">
<table width="90%" border="0" cellpadding="0"
cellspacing="0">
</div>
</form>
可以看到其中的回复的一段如上面所示, 这个段是采用一个form标签框起来的。 好象有几个地方和特殊:比如
form的action属性
<form name="formpost" method="post" target="_self" action="http://comment.news.163.com/reply/dopost.jsp"
onSubmit="return reply_checksubmit();">
<input name="board" value=""
type="hidden">
<input name="threadid" value=""
type="hidden">
<input name="url" value="" type="hidden">
<div
class="content">
<div class="textArea">
<textarea
onfocus="reply_clearfield()" name="body"
rows=""></textarea>
</div>
<div
class="text">
<a href="http://comment.news.163.com/reply/footprint.jsp">我的灌水记录</a><br
/>
<input name="hidename" type="checkbox" value="true" checked/>匿名发表
<br /><br /><input name="frmsubmit" type="submit" value=" 提 交"
class="s1" />
还可以看到的是百度知道中还有这样的代码:
<input type="hidden" name="ct"
value="22">
<input type="hidden" name="cm"
value="100009">
<input type="hidden" name="tn"
value="ikreplysubmit">
<input type="hidden" name="qid"
value="19229897">
<input type="hidden" name="cid" value="93">
这些数据可能是在生成静态页面的时候插进去的,这些hidden 控件的value可以用来在接受回复的时候区分帖子ID等,比如19229897这个就是因为他对应的静态页面是19229897.html。
我还发现一个现象那就是163新闻评论的页面,其实也只是第一个页面是静态的而已,如果一个评论有多页的话,后面的页面也都是jsp动态页面了。这也是应该注意的一个地方吧!静态页面化应用在象新闻啊这些一发布上去就不会变化的页面比较好一点。如果你的内容是不断更新很快的,你也采用这种技术,那么就要不断的重写静态html页面,那样IO操作对服务器性能影响也就很大。所以象索引页这样更新频繁的页面是不能实现静态化的,象百度知道的主页,如果采用静态页面化的话,那么没当有个人发一个提问,就要重写一下html页面,可能就回很慢了。高手的说法是采用缓存来提高性能,象CSDN开发人员说还说什么双缓存技术啊等等。缓冲页面、数据应该在提高性能方面起很大作用的吧,有时间要学一学。
----------------index.htm页面
代码-------------------------
<html>
<head>
</head>
<body>
<form id="form1" action="http://localhost/dddddd/webform1.aspx"
method="get"
<input type="hidden" name="ct"
value="22">
<input type="hidden" name="cm"
value="100009">
<input type="hidden" name="tn"
value="ikreplysubmit">
<input type="hidden" name="qid"
value="19229897">
<input type="hidden" name="cid"
value="93">
<textarea name="content" cols="50" rows="10">
</textarea>
<br>
<input type="submit" value="提交"
</form>
</body>
</html>
----------------------------------------------------
--------动态接受页面代码WebForm1.aspx----------------------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
AutoEventWireup="false" Inherits="dddddd.WebForm1" %>
<!DOCTYPE HTML
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
>
<HTML>
<HEAD>
</HEAD>
<body
MS_POSITIONING="GridLayout">
</body>
</HTML>
--------------------------------------------------------
-------------动态接受页面代码WebForm1.aspx.cs----------------
using
System;
using System.Collections;
using System.ComponentModel;
using
System.Data;
using System.Drawing;
using System.Web;
using
System.Web.SessionState;
using System.Web.UI;
using
System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace dddddd
{
/// <summary>
/// Summary description for
WebForm1.
/// </summary>
public class WebForm1 :
System.Web.UI.Page
{
}
}
---------------------------------------------------------
动态页面也就是接受到静态页面的数据之后直接输入而已,实际应用中,可能要作些数据库保存记录,然后根据模板重写
html文件更新静态页面,然后还可以重定向到这个页面上去。
需要注意的是,如果在index.htm中form
method指定为get的话,那么在动态网页这边只能使用
Page.Request.Params["content"]来获取数据了, 这时
Page.Request.Form["content"]等不到数据了,不过如果method指定为post的话,应为传上来就是form变量,所以
Page.Request.Params["content"]和Page.Request.Form["content"]都可以得到数据。不明白就查一下
method还有Request.Params、Page.Request.Form的区别了。
不过我做的时候还发现上面的代码出现回复提交中文的时候出现乱码的情况。明显是编码问题,在<head> 标签之间加上< meta
http-equiv="Content-Type" content="text/html;
charset=utf-8">一句指定网页编码。变成下面这样,在提交中文就不会乱码了。
------------------------index.htm-------------------------
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<body>
<form id="form1" action="http://localhost/d/webform1.aspx"
method="post"
<input type="hidden" name="ct"
value="22">
<input type="hidden" name="cm"
value="100009">
<input type="hidden" name="tn"
value="ikreplysubmit">
<input type="hidden" name="qid"
value="19229897">
<input type="hidden" name="cid"
value="93">
<textarea name="content" cols="50" rows="10">
</textarea>
<br>
<input type="submit" value="提交"
</form>
</body>
</html>
----------------------------------------------------------
------------WebForm1.aspx----------------------------------------------
<%@
Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false"
Inherits="dddddd.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0 Transitional//EN" >
<HTML>
<HEAD>
</HEAD>
<body
MS_POSITIONING="GridLayout">
</body>
</HTML>