Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
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://www.cnblogs.com/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
Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python的更多相关文章
- Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle
Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq index2 3. ...
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...
- Atitit.跨语言异常转换机制 java c# php到js的异常转换
Atitit.跨语言异常转换机制 java c# php到js的异常转换 1. bizEx 直接抓取,然后js catchEX1 2. Chkec runtimeEx1 3. Other异常..J ...
- Atitit.数据库表的物理存储结构原理与架构设计与实践
Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
Atitit.js javascript异常处理机制与java异常的转换.js exception processVoae 1. 1. javascript异常处理机制 1 2. 2. Web前后台异 ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- Atitit.木马病毒websql的原理跟个设计
Atitit.木马病毒websql的原理跟个设计 1. Keyword Wsql { var sql="select "+p.txt+" as t,"+p.v+ ...
- Atitit.架构设计趋势 设计模式 ---微服务架构 soa
Atitit.架构设计趋势 设计模式 ---微服务架构 soa 什么是微服务架构?1 .微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现1 微服务与康威定律2 微服务的一些 ...
- Atitit.atiRI 与 远程调用的理论and 设计
Atitit.atiRI 与 远程调用的理论and 设计 1. 怎么做到透明化远程服务调用?1 2. 2 怎么对消息进行编码和解码1 2.1. 确定消息数据结构dsl1 2.1.1. 消息里为什 ...
随机推荐
- linux查看进程内存占用
ps -aux | grep xxx USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 可以看到RSS ...
- angularjs自动加载和手动加载
(一)自动加载 ng-app是angular的一个指令,代表一个angular应用(也叫模块).使用ng-app或ng-app=""来标记一个DOM结点,让框架会自动加载.也就是说 ...
- ACM--素数距离问题
题目描述:现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数,则输出左侧的值及相应距离.如果输入的整数本身就是素数,则输出该素数本身,距离输出 ...
- Jetty错误: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@472adad9{r=2,c=false,a=IDLE,uri=}
最近用Jetty跑Spring MVC接收POST请求(POST中数据很大).出现数据无法获取到的问题.如: @RequestMapping(value = "/receive", ...
- hidefocus小技巧
hidefocus即隐藏聚焦,具有使对象聚焦失效的功能,其功能相当于: onFocus="this.blur()" 它的值是一个布尔值,如 hidefocus="true ...
- Delphi 窗体失踪在最上面的代码
unit ufrmSysPubMessage; interface uses Windows, Forms, Messages, Classes, ExtCtrls, Controls, StdCt ...
- [SVN] svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复
转载自:http://www.cnblogs.com/xulb597/archive/2012/07/18/2597311.html 合并步骤:(1)先切换到分支:(2)svn merge trunk ...
- XPath注入技术综述
一次完整的 XPath 注入攻击应该包括使用特殊构造的查询来提取一个 XML 数据库内的 数据或者信息.作为一门新的技术,XPath 注入在一定程度上和 SQL 注入漏洞有着惊人的相 似之处,通过下面 ...
- JavaScript basics: 2 ways to get child elements with JavaScript
原文: https://blog.mrfrontend.org/2017/10/2-ways-get-child-elements-javascript/ Along the lines of oth ...
- 【转载】tcp窗口滑动以及拥塞控制
转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥 ...