我感兴趣的是如何通过像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请求?
感谢。
答案 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的工作原理。