Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
1. 由于HTTP请求有很多种请求类型,比如请求aspx、html、jpg等等。因此,仅仅由HttpApplication直接处理请求时很臃肿的,而且不利于扩展。因此 采用了抽象工厂模式来处理这些请求。 允许我们制定某些请求映射到一个HttpHandlerFactory。
所以,我们应该这样理解HttpHanlder:一个HttpHanlder用于响应一类的请求,为一类的请求生成响应结果。
2. servlet 与 IHttpHandler
Httphandler更加的名称含义明确,,程序集 都能实现HTTP请求/响应模式
@WebServlet(name = "FileUploadServiceServlet", urlPatterns = "/CommonServlet")
public class CommonServlet implements Servlet {
public static ThreadLocal<ServletResponse> resp=new ThreadLocal<ServletResponse>();
@Override
public void service(ServletRequest req,
ServletResponse paramServletResponse) throws IOException,
ServletException {
resp.set(paramServletResponse);
String ret=new UrlDslParserV2().exe((HttpServletRequest)req);
paramServletResponse.getWriter().println(ret);
}
}
作者:: 绰号:老哇的爪子 ( 全名::Attilax akbar al rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
3. HttpModule的职责 listener
有时候有些页面需要一些相同的检查功能,比如身份验证。明显使用HttpHandler是不方便的,因为不是所有的页面都需要去调用那些相同的功能。
HttpModule的设计正是提供了一个灵活的方法解决这种功能重用的问题,它采用事件(观察者)的设计模式,将某些HttpHandler都需要的功能抽取出来,形成不同的观察者类型,这些观察者类型可以编译成类库形式,供多个网站共用
HttpModule,Http模块。实际上就是那19个标准事件的处理者,或者说19个标准事件的订阅者,比如OutputCacheModule,SessionStateModule。详细可以到在这篇文章里面看到
4. 19个标准事件
在HttpApplication中,利用. 中的事件机制,通过在处理过程中依次发出的多个事件,将这个处理过程分解为多个步骤,这个处理机制通常我们称为处理管道。
HttpApplication的19个标准事件如下:
事件名称 |
说明 |
BeginRequest |
Asp.net处理的第一个事件,表示处理的开始 |
AuthenticateRequest |
验证请求,一般用来取得请求用户的信息 |
PostAuthenticateRequest |
已经获取请求用户的信息 |
AuthorizeRequest |
授权,一般用来检查用户的请求是否获得权限 |
PostAuthorizeRequest |
用户请求已经得到授权 |
ResolveRequestCache |
获取以前处理缓存的处理结果,如果以前缓存过,那么,不必再进行请求的处理工作,直接返回缓存结果 |
PostResolveRequestCache |
已经完成缓存的获取操作 |
PostMapRequestHandler |
已经根据用户的请求,创建了处理请求的处理器对象 |
AcquireRequestState |
取得请求的状态,一般用于Session |
PostAcquireRequestState |
已经取得了Session |
PreRequestHandlerExecute |
准备执行处理程序 |
PostRequestHandlerExecute |
已经执行了处理程序 |
ReleaseRequestState |
释放请求的状态 |
PostReleaseRequestState |
已经释放了请求的状态 |
UpdateRequestCache |
更新缓存 |
PostUpdateRequestCache |
已经更新了缓存 |
LogRequest |
请求的日志操作 |
PostLogRequest |
已经完成了请求的日志操作 |
EndRequest |
本次请求处理完成 |
t服务器对于每一次请求的处理过程都相同,都要经过这个HttpApplication处理管道。管道内部的处理过程是固定的,在服务器处理请求的各个阶段,伴随着处理的进行,依次触发对应的事件,以便于程序员在处理的各个阶段完成自定义的处理工作。
1、最先触发的事件是BeginRequest,这个事件标志着 服务器处理工作得开始,也是程序员在 中针对请求所能够处理的第一个事件。
5. 参考
HttpApplication处理对象与HttpModule处理模块 (第三篇) - 逆心 - 博客园.htm
HttpHandler与HttpModule的用处与区别 - 逆心 - 博客园.htm
相关文章
- Java实现 LeetCode 面试题 01.07. 旋转矩阵(按照xy轴转+翻转)
- Java面试必问,ThreadLocal终极篇
- Java C# C语言中的占位符
- C# Java间进行RSA加密解密交互(二)
- java和C#异常处理的差异
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
- Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js
- Atitit.收银机小票打印功能的设计 java php c#.net版本
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
- Atitit.得到网络邻居列表java php c#.net python
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
- Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c#
- Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
- Atitit.ati orm的设计and架构总结 适用于java c# php版
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- atitit.系统托盘图标的设计java swing c# .net c++ js
- atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结
- Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
- Atitit.实现继承的原理and方法java javascript .net c# php ...
- Atitit. 解压缩zip文件 的实现最佳实践 java c# .net php
- GcExcel 4.0.2 for Java and C# The Crack