2

我对 Jboss 等 Web 容器如何处理 http 请求很感兴趣,假设 JBoss 中有很多war,Jboss 如何知道请求应该传递给其中一个?如果我曾经使用过,我想这样做struts2。reqeust 最终是如何传递给Actionstruts2 的?任何人都可以帮我弄清楚吗?谢谢。

更新

假设您在 A.War 和 B.War 中都有相同的 servlet 映射,如下所示。但它们是不同的实现类HttpServlet

    <servlet-mapping>
        <servlet-name>DeployServlet</servlet-name>
        <url-pattern>/deploy/*</url-pattern>
    </servlet-mapping>

如果 url 是,JBoss http 请求处理顺序会/deploy/test怎样?

更新

总结一下,当web容器接收到对某个资源的Http请求(*.html *.jsp等)时,web容器会根据上下文xml(如server.xmltomcat)选择一个war应用来处理这个请求。然后,这个war应用程序将首先选择Web.xml中定义的一个servlet来处理请求......

好吧,我的问题: Filter执行 Http Request 早于Servlet

谢谢。

4

2 回答 2

2

servlet 映射将与应用程序上下文相关。如果您部署 2 场战争,他们将有 2 个不同的上下文。如果他们不这样做,您将收到部署错误。您可以将战争设置为上下文根,因此假设您将 2 场战争 warA.war 和 warB.war 部署到您的服务器http://my_server.com

要在任一战争中访问资源,您将使用:

http://my_server.com/warA/somePage

或者

http://my_server.com/warB/somePage

使用您描述的映射看起来像http://my_server.com/warA/deploy/

如果您将任一 war 设置为上下文根,您可以以http://my_server.com/deploy/访问资源,但服务器仍在将其从 /deploy 转换为 warA/deploy

因此,对于检索哪个 servlet 不会有任何混淆。

于 2012-12-27T06:09:58.380 回答
2

首先,Web 服务器接收到 http 请求。通常 Servlet 容器(如 tomcat)和应用服务器(如 JBoss)有一个内置的 Web 服务器。所以 Web 服务器或也称为 http 服务器获取请求并决定它是否可以处理它。

Web 服务器可以处理静态内容请求,如 html、图像等。如果请求是动态内容,那么它将请求传递给 Servlet 容器。

Servlet 容器是 Java EE 服务器(如 Tomcat 和 JBoss AS)的一部分。Servlet 容器具有部署描述符(.xml 文件),通过它可以了解所有已部署的应用程序。当容器启动时,这些配置文件会被加载(并转换为对象)。因此,使用部署描述符映射它决定请求是否有效,如果有效,则将请求发送到适当的资源(如 servlet )。

有关详细信息,您可以阅读 Servlet 的生命周期以及容器的工作原理。

于 2012-12-27T06:21:36.170 回答