2012-12-26 61 views
2

如何通过Web容器处理http请求,比如Jboss,JBoss中假设有很多war,Jboss如何知道请求应该传递给其中的一个?我想如果我使用struts2。 reqeust如何最终传递给struts2的Action?有人能帮我弄清楚吗?谢谢。如何使用struts2处理Jboss的http请求

更新

说你无论是在A.War和B.War象下面这样相同的servlet映射。但他们不同的实现类的HttpServlet

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

如果该URL为/deploy/test发生什么事到JBoss的http请求处理订单?

更新

让我们做一个summany,当Web容器接收HTTP请求到一定的种源(* HTML *的.jsp等),Web容器会选择战争应用程序来处理这请求基于上下文xml(如server.xmltomcat中)。那么,这场战争的应用程序会选择在web.xml处理首先请求定义一个servlet ...

好,我的问题: Filter执行HTTP请求比Servlet更早?

谢谢。

+0

我们使用它来告诉容器关于struts2过滤器调度程序,并指定何时通过映射调用它,看看web.xml,了解服务器如何知道您需要了解服务器上下文以及它如何deply应用程序 –

+0

@UmeshAwasthi帮助查看更新的内容。谢谢。 –

回答

2

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

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

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

有关详细信息,您可以阅读Servlet的生命周期以及Contaner如何工作。

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/

如果设置任何战争作为上下文根,你可以访问的资源作为http://my_server.com/deploy/但服务器仍然翻译从/部署到藁/部署

所以不会有任何混乱至于哪个servlet是检索。

+0

您的意思是,如果存在请求,请求首先会转到某个实现类“HttpServlet”上。谢谢 –

+0

不,请求首先转到适当的容器(包含该servlet的war)。看一下servlet部分的生命周期[这里](http://en.wikipedia.org/wiki/Java_Servlet),它很好地解释了这个过程。 – gebuh

+0

谢谢。请检阅我发布的最新内容..谢谢。 –