Web应用程序是如何启动的?入口点在哪里(如果有的话)?

时间:2011-01-04 15:04:25

标签: iis

我正在使用IIS开发一些Web应用程序。我曾经相信每个应用程序都应该有一个入口点。但似乎Web应用程序没有。

我已阅读过很多关于如何在IIS下构建ASP.NET应用程序的书籍和文章,但它们并没有解决我想知道的最明显和最基本的问题。

所以有人能告诉我如何启动Web应用程序?传统桌面应用程序和Web应用程序在工作范例方面的区别是什么,例如启动和终止逻辑。

非常感谢。

更新 - 1 - 23:14 2011/1/4

我目前的理解是:

当某个请求到达时,IIS将提取请求中包含的URL。我想IIS必须保留某种内部表,将URL映射到磁盘上相应的物理目录。我们以下面的URL为例:

http://myhost/webapp/page1.aspx

在上述内部表的帮助下,IIS将在磁盘上找到 page1.aspx 文件。然后检查此文件并找到代码隐藏代码文件。然后将构造适当的页面类实例,并且将以预定义的顺序调用其在代码隐藏文件中定义的方法。调用方法系列的输出将是发送给客户端的响应。

更新 - 2 - 23:32 2011/1/4

网址只是 一个标识符,用作上述内部表的索引 。使用此索引,IIS(或任何类型的Web服务器技术)可以找到资源的物理位置。然后使用一些提示(例如文件扩展名如* .aspx),Web服务器知道应该使用什么处理程序(例如asp.net ISAPI处理程序)来处理该资源。选择的处理程序将知道如何解析和执行资源文件。

因此,这也解释了为什么Web服务器应该是可扩展的。

3 个答案:

答案 0 :(得分:4)

这取决于您使用的语言和框架,但广泛地说,有许多入口点将绑定到HTTP请求(例如,通过URL)。当服务器收到与这些绑定之一匹配的请求时,将执行绑定的代码。

还可能存在基于请求的其他条件执行的各种过滤器链和拦截器。可能还会有一些服务器在启动时执行的设置代码。最终,仍有一个入口点 - 服务器的main()函数 - 但从Web应用程序的角度来看,重要的是请求绑定。

编辑以回答问题编辑

我从未使用过IIS,但我认为没有“查找表”,而是一些查找规则。我将通过在Apache服务器上调用.jsp页面来与您联系,这应该基本上是相同的过程。

  1. 编写webapp并将其放置在文件系统中 - 例如C:/ WWW / mywebapp
  2. 为Web服务器提供配置规则,告知URL路径/ webapp /应映射到C:/ www / mywebapp
  3. Web服务器还配置为将.jsp文件识别为JSP servlet
  4. Web服务器收到/webapp/page1.jsp请求,将其分派给工作线程
  5. Web服务器使用其映射规则来定位C:/www/mywebapp/page1.jsp
  6. Web服务器将JSP文件中的代码包装在方法serveRequest(request, response)的类中并编译它(如果尚未这样做的话)
  7. Web服务器调用serveRequest函数,该函数现在是用户代码的入口点
  8. 用户代码完成后,Web服务器将响应发送给客户端,工作线程终止
  9. 这是最基本的系统 - 基于资源的servlet(即.jsp或.aspx文件)。当使用像MVC框架这样的技术时,绑定规则变得更加复杂,但基本概念是相同的。

答案 1 :(得分:1)

类似于OrangeDog在他的回答中提到的,在提供这些页面之前还有很多事情要做。在你找到代码之前。

不仅在asp.net mvc中,而且在asp.net中,当你执行请求时,会有各种各样的部分发挥作用。

有代码,如模块,处理程序等,再次进行处理之后才能进入页面代码。此外,您可以映射同一页面,以便能够处理不同的网址。

asp.net中处理程序的概念很重要,因为有各种处理程序负责处理与扩展和/或http动词匹配的请求(get,head,post)。如果您查看%systemroot%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config,您可以看到一个部分。您还可以在IIS中看到处理程序(这些可以更改为x站点)。

例如,HttpForbiddenHandler就是拒绝请求的人。它被配置为调用特殊文件,如源“* .cs”。

您可以定义自己的处理程序,它只不过是一个实现IHttpHandler接口的类。所以它有2个方法:ProcessRequest和IsReusable。这与您的cgi程序更相似,因为实现主要是基于请求中的信息生成HTML或任何其他类型的输出的方法。

Asp.net页面构建于此之上,并且具有大量额外功能,旨在使您更容易开发页面。您实现了一个继承自Page的类,并且有两个与之关联的代码文件(.aspx和.cs)。 asp.net mvc也是如此,但它的结构不同。除此之外,如果你想利用它,你需要了解它。

这些抽象的缺点是,它会让一些开发人员忘记他们在底层的内容。上下文仍然是相同的,您正在生成一个接收请求并生成输出的应用程序。不同之处在于,有更多的代码可以使其更容易实现。

答案 2 :(得分:0)

就IIS的ASP.NET请求生命周期的更详细列表而言,HTTPApplication管道中有相当多的阶段。 Faily最近有一篇很好的博客文章,我认为它们非常简洁和完整地总结。这是"HTTP Request Lifecycle Events in IIS Pipeline that every ASP.NET Developer Should Know" by Suprotim Agarwal

有关更详细的说明,您应该check out the MSDN article on the subject。这也将提供有关该管道之前发生的事情的信息。