您的位置:首页 > 理论基础 > 计算机网络

Atitit. servlet 与 IHttpHandler  ashx  listen 和HttpModule的区别与联系 原理理论 架构设计   实现机制    java php c#.net j

2016-01-19 00:06 996 查看
Atitit. servlet 与 IHttpHandler  ashx  listen 和HttpModule的区别与联系 原理理论 架构设计   实现机制    java php c#.net js javascript  c++ python  

 

1. 由于HTTP请求有很多种请求类型,比如请求aspx、html、jpg等等。因此,仅仅由HttpApplication直接处理请求时很臃肿的,而且不利于扩展。因此 采用了抽象工厂模式来处理这些请求。 允许我们制定某些请求映射到一个HttpHandlerFactory。
1

2. servlet 与 IHttpHandler1

3. HttpModule的职责 listener2

4. 19个标准事件
3

5. 参考4

 

 

 

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

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: