欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

透过ashx看浏览器服务器运行本质(图解)

程序员文章站 2024-03-05 13:25:24
浏览器与iis服务器与.net framework关系 asp.net asp.net是一种动态网页技术,在服务器端运行.net代码,动态生成html,然后响应给...

浏览器与iis服务器与.net framework关系

透过ashx看浏览器服务器运行本质(图解)

asp.net

asp.net是一种动态网页技术,在服务器端运行.net代码,动态生成html,然后响应给浏览器。

可以使用javascript、dom在浏览器端完成很多工作,但是有很多工作无法在浏览器端完成,比如存储数据、访问数据库、复杂的业务逻辑运算、安全性要求高的逻辑运算等。

asp.net:一般处理程序(ashx),webform(aspx)、mvc3(model, view , controler)。

asp.net里的常用文件

文件扩展名

说明

.ashx

一般处理程序,asp.net核心程序,但一般使用.aspx[不需要返回大量html代码时使用]

.aspx

常用程序webform,用于创建网页和对网页进行编程的核心文件类型(前台文件),和.aspx.cs文件配套使用[当需要返回大量html代码使用使用它]

.aspx.cs

常用程序,用于编写大量的c#业务代码,和.aspx配套使用。

.ascx

指明一个 asp.net 用户定义控件

.asax

包含 asp.net 应用程序级事件的事件语法

.config

配置文件,用于设置网站应用程序的各种属性

.asmx 供宿主 web 服务在本地或远程使用

一般处理程序(httphandler)

是一个实现system.web.ihttphandler接口的特殊类。
任何一个实现了ihttphandler接口的类是作为一个外部请求的目标程序的前提。(凡是没有实现此接口的类,就不能被浏览器请求。)

它由支持asp.net的服务器调用和启动运行。一个httphandler程序负责处理它所对应的一个或一组url地址的访问请求,并接收客户端发出的访问请求信息(请求报文)和产生响应内容(响应报文)。

咱可以通过创建一个我们自己的httphandler程序来生成浏览器代码发送回客户端浏览器。

httphandler程序可以完成普通类程序所能完成的大多数任务:
1.获取客户端通过html的form表单提交的数据和url参数
2.创建对客户端的响应消息内容
3.访问服务器端的文件系统
4.连接数据库并开发基于数据库的应用
5.调用其他类

ashx的简单使用
cul.ashx读取model.html将处理后的html代码返回给浏览器

复制代码 代码如下:
 
using system.web;
namespace ashx{
public class cul : ihttphandler { //ihttphandler非常重要的接口 实现接口就是为了统一调用processrequest处理页面的方法
//注意:q2:为什么浏览器输入cul.ashx同样能显示内容呢? a2:因为程序编译的时候 对cul.ashx进行了重命名
public void processrequest( httpcontext context) { //context 请求上下文对象 浏览器请求所有信息包括在其内部
context.response.contenttype = "text/plain" ;//text/plain 当做普通的字符串解释就行 text/html则是当做html解释执行
//注:如果text/plain 而输出的内容时一个完整的html页面内容 会被浏览器自动解释执行 因为浏览器的向下兼容
//获得模板页面在 服务器上的 物理路径
string pagepath = context.server.mappath("model.htm" );
//读取模板内容
string htmlstr = system.io.file .readalltext(pagepath);
htmlstr = htmlstr.replace( "@{title}" , "这是第一个静态处理文件" ).replace( "@{content}", "我是静态处理文件动态产生的哦~ ~" );
//输出到页面
context.response.write(htmlstr); //response服务器响应属性
context.response.write( "痞子一毛" ); //q1:为什么"痞子一毛"和htmlstr一起输出到界面 而非覆盖呢?
//a1:因为write其实是向 response属性所操作的一个httpresponse对象 里的htmlwrite对象里的缓存区写数据
//q3:为什么要写入缓存区? a3:因为此时压根儿就没有生成响应报文
}
public bool isreusable {
get {
return false ; //是否可重用
}
}
}
}

html.model代码如下:
复制代码 代码如下:

< head>
<title > @{title}</ title >
</ head>
< body>
@{content}
</ body>
</ html>

以上代码运行原理图解

透过ashx看浏览器服务器运行本质(图解)