如果我使用struts2,Jboss如何处理http请求

时间:2012-12-26 14:43:46

标签: web-applications struts2 jboss

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

更新

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

的不同实现类
    <servlet-mapping>
        <servlet-name>DeployServlet</servlet-name>
        <url-pattern>/deploy/*</url-pattern>
    </servlet-mapping>

如果网址为/deploy/test,JBoss http请求流程订单会发生什么?

更新

让我们做一个 summany ,当Web容器收到某个资源的Http请求(* .html * .jsp等)时,Web容器会选择一个war应用程序来处理这个请求。上下文xml(如server.xml中的tomcat)。然后,这个war应用程序将选择一个在Web.xml中定义的servlet来首先处理请求......

好吧,我的问题是: Filter早于Servlet执行Http请求?

感谢。

2 个答案:

答案 0 :(得分:2)

servlet-mapping将相对于应用程序上下文。如果你部署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不会有任何混淆。

答案 1 :(得分:2)

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

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

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

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