Web服务器开发学习(1)
2006-01-25 20:27 Clingingboy 阅读(4463) 评论(0) 编辑 收藏 举报
这几天想学习下简单web服务器开发.被逼的,没办法,必须学习.提高自己
重要概念
1.控件呈现
控件呈现:是指向HTTP输出流中写入标记文本的过程.服务器通过HTTP输出流向客户端发送生成的标记文本,这些文本将会通过客户端浏览器转化为可视化的元素显示出来.
在asp.net中使用Render方法来实现.
学习前,必须要理解HtmlTextWriter 类
概述:将标记字符和文本写入到 ASP.NET 服务器控件输出流。此类提供 ASP.NET 服务器控件在向客户端呈现标记时所使用的格式设置功能。
该类位于System.Web.UI命名空间下
(1)了解其常用方法
AddAttribute(HtmlTextWriterAttribute, String) 向开始标记添加属性(如<img src=...>,img为标记开头,src为属性)
AddStyleAttribute(HtmlTextWriterStyle, String) 添加样式属性(添加css样式格式的属性)
Write(String) 输出为HTML文本流(可理解为输出为字符串,不呈现为HTML格式)
WriteAttribute(String, String) 将指定的标记属性和值写入到输出流如设置img的alt属性
WriteEndTag 写入指定的标记元素的任何制表符间距和结束标记(结束标记)
RenderBeginTag(HtmlTextWriterTag) 将标记元素的开始标记写入到输出流。
RenderEndTag 将标记元素的结束标记写入到输出流。
(2)了解三种枚举类型
一,HtmlTextWriterTag 枚举 该枚举包含了大部分的HTML开头标记(如HtmlTextWriterTag.Img)
二,HtmlTextWriterAttribute 枚举 指定 HTML 属性(如HtmlTextWriterAttribute.Border)
三,HtmlTextWriterStyle 枚举 指定输出流的 HTML 样式(如HtmlTextWriterStyle.Color)
2.使用Control类的呈现方法
System.Web.UI.Control是创建服务器控件的基类
该类有三个方法
Render 将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderChildren 将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderControl 已重载。 输出服务器控件内容,并存储有关此控件的跟踪信息(如果已启用跟踪)。
了解三者的关系
先将实例对象传递给RenderControl方法
RenderControl方法先检测其Visible然后判断是发否调用Render()方法,Render()方法执行默认实现调用RenderChildren方法.RenderChildRen默认实现调用每个子控件的RenderControl方法. 其是一个递归调用的过程
其中最常用为Render方法.
示例一.
重写Render方法的例子
aspx要求
先注册控件
然后在body里呈现
测试
示例二.使用HtmlTextWriter的多种方法来实现
测试
注意点:在呈现控件的过程中,需要先定义服务器的属性和CSS样式等,然后再定义服务器空间的主体内容,位置不能改变.
大家可以打开源代码查看
重要概念
1.控件呈现
控件呈现:是指向HTTP输出流中写入标记文本的过程.服务器通过HTTP输出流向客户端发送生成的标记文本,这些文本将会通过客户端浏览器转化为可视化的元素显示出来.
在asp.net中使用Render方法来实现.
学习前,必须要理解HtmlTextWriter 类
概述:将标记字符和文本写入到 ASP.NET 服务器控件输出流。此类提供 ASP.NET 服务器控件在向客户端呈现标记时所使用的格式设置功能。
该类位于System.Web.UI命名空间下
(1)了解其常用方法
AddAttribute(HtmlTextWriterAttribute, String) 向开始标记添加属性(如<img src=...>,img为标记开头,src为属性)
AddStyleAttribute(HtmlTextWriterStyle, String) 添加样式属性(添加css样式格式的属性)
Write(String) 输出为HTML文本流(可理解为输出为字符串,不呈现为HTML格式)
WriteAttribute(String, String) 将指定的标记属性和值写入到输出流如设置img的alt属性
writer.WriteAttribute("alt", "AtlValue");
WriteBeginTag(string tagName) 将任何制表符间距和指定标记元素的开始标记写入到输出流。(如<img src >开头的img标记)WriteEndTag 写入指定的标记元素的任何制表符间距和结束标记(结束标记)
RenderBeginTag(HtmlTextWriterTag) 将标记元素的开始标记写入到输出流。
RenderEndTag 将标记元素的结束标记写入到输出流。
(2)了解三种枚举类型
一,HtmlTextWriterTag 枚举 该枚举包含了大部分的HTML开头标记(如HtmlTextWriterTag.Img)
二,HtmlTextWriterAttribute 枚举 指定 HTML 属性(如HtmlTextWriterAttribute.Border)
三,HtmlTextWriterStyle 枚举 指定输出流的 HTML 样式(如HtmlTextWriterStyle.Color)
2.使用Control类的呈现方法
System.Web.UI.Control是创建服务器控件的基类
该类有三个方法
Render 将服务器控件内容发送到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderChildren 将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。
RenderControl 已重载。 输出服务器控件内容,并存储有关此控件的跟踪信息(如果已启用跟踪)。
了解三者的关系
1
//RenderControl方法的基本实现
2
public void RenderControl(HtmlTextWriter writer)
3
{
4
if(Visible)
5
{
6
Render(writer);
7
}
8
}
9
//Render方法基本实现
10
protected virtual void Render(HtmlTextWriter writer)
11
{
12
RenderChildren(writer);
13
}
14
//RenderChildren方式基本实现
15
protected virtual void RenderChildren(HtmlTextWriter writer)
16
{
17
foreach (Control c in Controls)
18
{
19
c.RenderControl(writer);
20
}
21
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

先将实例对象传递给RenderControl方法
RenderControl方法先检测其Visible然后判断是发否调用Render()方法,Render()方法执行默认实现调用RenderChildren方法.RenderChildRen默认实现调用每个子控件的RenderControl方法. 其是一个递归调用的过程
其中最常用为Render方法.
示例一.
重写Render方法的例子
1
using System;
2
using System.Web.UI;
3
/// <summary>
4
/// link 的摘要说明
5
/// </summary>
6
namespace ClingingBoy
7
{
8
public class link:Control
9
{
10
protected override void Render(HtmlTextWriter writer)
11
{
12
writer.Write("<a href='http://www.clingingboy.com'>ClingingBoy</a>");
13
}
14
}
15
}
16

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

aspx要求
先注册控件
<%@ Register TagPrefix="aspSample" Namespace="ClingingBoy"%>
然后在body里呈现
<aspSample:link ID="test" runat=server></aspSample:link>
测试
示例二.使用HtmlTextWriter的多种方法来实现
1
using System;
2
using System.Web;
3
using System.ComponentModel;
4
using System.Web.UI;
5
namespace ClingingBoy
6
{
7
/// <summary>
8
/// LinkTwo 的摘要说明
9
/// </summary>
10
public class LinkTwo : Control
11
{
12
protected override void Render(HtmlTextWriter writer)
13
{
14
writer.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.clingingboy.com");
15
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "blue");
16
writer.RenderBeginTag(HtmlTextWriterTag.A);
17
writer.Write("ClingingBoy");
18
writer.RenderEndTag();
19
}
20
}
21
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

测试
注意点:在呈现控件的过程中,需要先定义服务器的属性和CSS样式等,然后再定义服务器空间的主体内容,位置不能改变.
大家可以打开源代码查看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现