时间紧张了,在博客中看看,找自己喜欢的答案,时间充足了,自己去钻研钻研,去找自己的答案,这也许已经成为我的习惯,喜欢讲别人的东西用自己的话再次加工,取其精华变为己有。
春秋冬来,四季轮回,我们无法控制,但是我们去可以在其四个阶段中的一个阶段中做一些自己可以做的事情。夏花秋实说起来很简单,其实其蕴含了一个深刻的道理,这个道理可以用规律或者周期来说明,只有掌握了这些规律,了解了这个周期,做什么事情才可以得心应手,游刃有余。玉米夏播秋收,这就是规律,如果冬天去播种,那什么也得不到,因为四季,因为玉米的生长周期,了解事物的生长周期,也相当于了解了其运作规律。
在JSP,ASP.NET,WPF中,生命周期这个词语屡见不鲜,如果能了解其整个生命周期,也就相当于了解了其背后的运作规律,这些规律,我无法控制,也不是我所规定的的,所以我只能空论一番。知道总比不知道的好,这算是聊以自慰的话,也许有一天这些看似不起眼的东西还真能帮自己的忙,我因为工作原因不能像那些博客牛人一样,一头钻进技术里面去,去研究这些运作过程。我只是想,只是一个只想不做的人,也许心想,有人会写的,在搜索引擎的帮助下,吸收别人的胜利果实也许是最快的办法。也许更其喜欢去评论一些东西,评论别人博客的内容,但是要做一个真正的评论员谈何容易,没有满腹经纶的才学,品头论足起来就会顾此失彼,只是一家之言的片面之词。
今天的话题就是生命周期,了解运作的生命周期非常重要,虽然我们已经不能控制,但是可以利用,能在合适的生命周期阶段编写代码,以达到预期效果。
看两个例子,ASP.NET 中如何对生成的 HTML 内容流进行控制?(http://blog.csdn.net/net_lover/article/details/5324455)
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected override void Render(HtmlTextWriter writer)
{
string content = string.Empty;
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
try
{
// 将当前页面的内容呈现到临时的 HtmlTextWriter 对象中
base.Render(htmlWriter);
htmlWriter.Close();
// 得到当前页面的全部内容
content = stringWriter.ToString();
// 替换页面中的部分内容
string newContent = content.Replace("[mxh]", "孟宪会");
// 将新页面的内容显示出来
writer.Write(newContent);
}
catch { }
finally
{
stringWriter.Dispose();
htmlWriter.Close();
htmlWriter.Dispose();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>孟宪会之替换页面呈现内容测试</title>
</head>
<body>
<form id="form1" runat="server">
[mxh]
</form>
</body>
</html>
Application_BeginRequest事件过滤恶意提交(http://www.cnblogs.com/LYunF/archive/2012/08/31/2665307.html)
protected void Application_BeginRequest(object sender, EventArgs e)
{
//遍历Post参数,隐藏域除外
foreach (string i in this.Request.Form)
{
if (i == "__VIEWSTATE") continue;
this.goErr(this.Request.Form[i].ToString());
}
//遍历Get参数。
foreach (string i in this.Request.QueryString)
{
this.goErr(this.Request.QueryString[i].ToString());
}
}
private void goErr(string tm)
{
if (SqlFilter2(tm))
{
Response.Redirect("p404.html");
Response.End();
}
}
public static bool SqlFilter2(string InText)
{
string word = "and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
if (InText == null)
return false;
foreach (string i in word.Split('|'))
{
if ((InText.ToLower().IndexOf(i + " ") > -1) || (InText.ToLower().IndexOf(" " + i) > -1))
{
return true;
}
}
return false;
}
这两个之所以能这么做,就是因为其生命周期是固定的,而生命周期的每个阶段用于处理不同的事情,第一个就是在render中用来控制html流的,而第二个是在服务器已接受到请求的时候就去检查
第一个的周期其实就是ASP.NET页面的生命周期,关于这个网上有太多的介绍,微软的官网就有介绍:http://msdn.microsoft.com/zh-SG/library/ms178473(v=vs.80).aspx,此外我推荐一篇篇我喜欢的:http://www.cnblogs.com/alan99/archive/2007/01/22/627090.html
第二个其实是HttpApplication的一个事件,很多人可能对这个还不太懂,其实前面在介绍IHttpHandler的时候,在我转载的那个博文中就有,大家可以去看看,这里推荐另外的博文:
http://www.cnblogs.com/I-am-Betty/archive/2010/09/06/1819558.html,
http://blog.csdn.net/nndtdx/article/details/7071171
这篇博文,我大力推荐,不得不佩服博主的专研和共享精神。不看后悔:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html