1.HttpModule和HttpHandler
(1)事实上我们每请求一个aspx页面都经历了同样的过程,只不过我们没有察觉而已
(2)一个请求可以经过多个 Module但是最终只能被一个Handler处理

2.HttpHandler的使用
在web应用程序项目中添加一般应用程序

一般处理程序页面及注释

3.水印的实现(一般有一下三种方法)
(1)直接编辑每张图片-----------(需要大量的人力。)
(2)编程实现批量编辑图片----------(节省人力,效率高,但原始图片丢失了。)
(3)在显示图片时,动态添加数字水印效果---------(使用HttpHandler)
4.使用HttpHandler方式是实现水印
前台界面
<div>
<img alt="" class="style1" src="ProductImgs/1.jpg" />
<img alt="" class="style2" src="ProductImgs/2.jpg" />
<img alt="" class="style1" src="ProductImgs/3.jpg" />
<img alt="" class="style2" src="ProductImgs/4.jpg" />
</div>
<div>
<img alt="" class="style1" src="Handler1.ashx?id=1" />
<img alt="" class="style2" src="Handler1.ashx?id=2" />
<img alt="" class="style1" src="Handler1.ashx?id=3" />
<img alt="" class="style2" src="Handler1.ashx?id=4" />
</div>
后台代码实现
public void ProcessRequest(HttpContext context)
{
//获取图片路径
string imgs="~/ProductImgs/";
//获取要添加数字水印的图片
string file = context.Request.MapPath(imgs + context.Request.QueryString["id"] + ".jpg");
//string file = context.Request.PhysicalPath;
Image img = null;
//判断图片的物理地址是否存在
if (File.Exists(file))
{
//加载图片
img = Image.FromFile(file);
//定义画布
Graphics grap = Graphics.FromImage(img);
//合成水印图片
grap.DrawString("水印",new Font("微软雅黑",20),Brushes.Red,img.Width-50,img.Height-30);
//释放水印
grap.Dispose();
}
else
{
}
//定义输出类型
context.Response.ContentType = "image/jpeg";
//保存图片到输出流
img.Save(context.Response.OutputStream,ImageFormat.Jpeg);
//释放画布
img.Dispose();
//输出结束
context.Response.End();
}
5.全局Handler方式实现水印
5.1实现思路分析
(1)修改配置信息,将所有对.JPG内容的访问转到HttpHandler处理程序
(2)获得访问请求,得到用户访问的图片路径;
(3)根据请求的路径,查找相对应的DVD封面图片;
(4)将网站标识“绘制”在DVD封面图片的左下角;
(5)修改程序的输出类型,并将组合出的新图片输出。
5.2实现及代码
<div>
<img alt="" class="style1" src="ProductImgs/1.jpg" />
<img alt="" class="style2" src="ProductImgs/2.jpg" />
<img alt="" class="style1" src="ProductImgs/3.jpg" />
<img alt="" class="style2" src="ProductImgs/4.jpg" />
</div>
public void ProcessRequest(HttpContext context)
{
//获取图片路径
string imgs="~/ProductImgs/";
//获取要添加数字水印的图片
//string file = context.Request.MapPath(imgs + context.Request.QueryString["id"] + ".jpg");
string file = context.Request.PhysicalPath;
Image img = null;
//判断图片的物理地址是否存在
if (File.Exists(file))
{
//加载图片
img = Image.FromFile(file);
//定义画布
Graphics grap = Graphics.FromImage(img);
//合成水印图片
grap.DrawString("水印",new Font("微软雅黑",20),Brushes.Red,img.Width-50,img.Height-30);
//释放水印
grap.Dispose();
}
else
{
}
//定义输出类型
context.Response.ContentType = "image/jpeg";
//保存图片到输出流
img.Save(context.Response.OutputStream,ImageFormat.Jpeg);
//释放画布
img.Dispose();
//输出结束
context.Response.End();
}
修改Web.config文件的httpHandlers
(1)verb:谓词GET、POST、FTP等。
(2)path:访问路径,此处表示所有针对“ProductImgs/*.jpg”路径的的请求都将交给PicCoverHandler类进行处理。
(3)type:指定的处理程序(类)。
6.在IIS配置处理程序
(1)在IIS上使用该方式要做其他处理
(2)开发服务器仅提供最简单的Web服务器功能,它不对请求的内容做任何处理,而是直接将所有的请求转交给ASP.NET处理;
(3)IIS功能比较完善,可以独立处理一些访问请求,比如.html、.jpg等的访问不会提交给ASP.NET来处理


