在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
j2ee是我喜欢的东西,当然现在已经是javaee了。相对来说,比.net更喜欢。我以前曾决定不要再学.net,就像本科时候决定只学win32一样。但形势所迫,这工作岗位需要.net的还挺多。而我恰恰找不到工作。所以这四年里,我不得已又看看MFC,Java,最后还是要学习.net。 无论什么服务器IIS,Apache,Tomcat最终要使用Http协议,无论什么FrameWork,无论stuts,webwork,还是Asp.net 2.0,最后总归要生成html文本。我不是一个可以很专注研究问题的人,所以错误是正常的。我的毅力坚持不了几分钟,我知道我喜欢手写而不喜欢打字,喜欢空想而不喜欢行动。2003年,我毕业正在打算建一个个人网站,而淘宝网也刚刚开始,到现在,淘宝已有数千万注册用户,我的网站只不过是一个网页的两行文字;2004年,p2p如日中天,几个学生正躲在宿舍里开发pplive,我也对torrent协议很感兴趣,不过我是用pp点点通来上网下载A片,到现在pplive用户也数以千万计,而我对AV也颇有认识。2005年,我筹划写我的小说已有10个年头,箫鼎此时正开始准备写《诛仙》,到现在,《诛仙》的读者也数以千万计,而我的小说依然只是一个开头而已。写技术文章不是我的强项,因为需要查阅很多东西,有时候我觉得我懂了,其实我是感觉懂了,但是写出来就不一样了,群众的眼睛是雪亮的,是我所无法糊弄的,所以我不得不打点精神,去查一些东西,当然查不到的东西只能猜测一番,给出一个自认合理的解释。我写东西一向喜欢跑题,时不时出来牢骚一番,就像莫言也喜欢在小说中跳出来,自我感慨一番一样。当然这不是好的写作方式,除非我是大家,可惜我不是,我只是找不到工作,而且找不到媳妇,尘世中的一个迷途窝囊之一。 相对于J2ee来说,asp.net封装的东西更多,所以它就更先进,更不灵活,更没有效率,但是对开发者来说,也就更省心。好怀念那种纯粹的时候,没有中间件,自己手动连接监听回馈,多自由。这才是纯粹的程序员,这些天看linux源码,看到用汇编语言操作中断控制器建立各种系统描述符还有页表GDT/IDT表,禁不住热血沸腾,啊,这个年代的编程才是真正的编程,多么的明白直观,多么的没有效率,多么的不可移植。jeffy richer说看到了中间语言,就不再关心这些底层的东西了,实在是不解风情阿。到了j2ee以后,符合规范的服务器封装了Request和Response,并且提供了固定的流程让我们只要重载servlet的service()函数,已经不够灵活。后来的框架就更不像话了,成为了各种设计模式的试验场。其实对我们来说,没有必要做到这么松耦合。现在的上传已经不需要自己手工解析,各种框架提供了现成的函数直接可以提取出文件,真是可惜我了。 服务器在解析jsp文件的时候实际上是生成了一个servlet并且编译了,所以它的输出就是html。.net解析一个aspx文件,实际上也是生成了一个继承自IHttphandler的类,并且编译了。我们看一看实际源代码,相信大家从源代码中得到的东西比我说的更好。有时候太追求细节往往太烦人,所以我一向崇拜那些破解者,他们的毅力与坚持实在让我汗颜。 这是我的Test.aspx文件
%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
很简单,只是两个控件。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="bt" runat="server" Height="100px" OnClick="bt_Click" Text="Click Me !" /> <asp:TextBox ID="TextBox1" runat="server">assd</asp:TextBox></div> </form> </body> </html 下面是伴随它的Test.aspx.cs文件
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; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; public partial class Test : System.Web.UI.Page } 关于ViewState是我为了测验.net关于ViewState做了些什么而加入的,大家可以不看。现在我们看看微软怎么改编组合这些东西呢。下面是微软生成的cs文件,为了方便,我们把这些放在一起。
public partial class Test : System.Web.UI.Page
}
非常庞大,我已经尽可能的去掉不需要的东西,构造button 和 textbox和label差不多,所以就把代码省略了,但button多一个事件,这行保留。有些地方解释一下,ViewState是一个StateBag对象,属于Page类的成员,所以被自然继承了,因此没有代码中没有声明它。我们可以看到实际上我们运行的是test.aspx类,它直接继承自Test和IHttphandler,我们知道,继承IHttpHandler必须要实现IsReusable属性,那代码中为什么没有呢,原来它是在Page类里。另外Page类有一个ProcessRequest方法,IHttphandler也有一个。可知aspx最后要编译成一个httphandler,然后容器调用它的proces-s-request方法,发现只有一行,base.proceRequest(),于是转向Test的ProcessRequest方法,也就是Page的ProcessRequest方法了,然后再这个方法里面Render各种Control,ClearViewState,调用Page_onLoad等等。这些我也不清楚,因为毕竟没找到源代码。不误己误人。 |
请发表评论