同一个WAY中的两个servlet与两个单独的WAR - 优点和缺点?

时间:2010-09-22 05:17:48

标签: java servlets

我最近遇到了一个障碍,可能会让我无法完成计划用两个servlet打包一个WAR。解决方法是创建一个额外的Maven WAR模块。

除了给我和客户带来的额外麻烦外,还有其他真正的缺点吗?有优势吗?

@Edit

我遇到的“障碍”是我想为每个servlet提供两种不同的身份验证机制。一个使用Spring Security,另一个使用不同的身份验证提供程序或可能的基本身份验证。见这里:

Is it possible to use a different Spring Security AuthenticationProvider in different servlets, same WAR?

3 个答案:

答案 0 :(得分:3)

主要缺点是Web应用程序容器使单独的应用程序完全彼此分开。因此,如果他们使用一组通用的jar文件(例如),他们每个人都必须加载自己的版本,这会占用大量内存。此外,它们无法通过Session或ServletContext与请求转发进行真正的通信。

优势仅来自您真正将两个WAR视为独立应用程序的情况。

如果两个servlet属于一个,你应该把它们放在同一个WAR中。

答案 1 :(得分:2)

如果您使用的是基于容器的身份验证,那么我认为这是根据每个webapp完成的。但是,如果在servlet中或通过过滤器进行身份验证,则在同一个Web应用程序中有2个具有不同身份验证机制的servlet就没有问题。

对于Spring,它将在dispatchservlet映射的顶部进行身份验证。如果您使用的是过滤器,请确保它与每个servlet的路径匹配,只对该servlet进行身份验证。

<filter>
  <filter-name>auth1</filter-name>
  <filter-class>...</filter-class>
</filter>
<filter>
  <filter-name>auth2</filter-name>
  <filter-class>...</filter-class>
</filter>

<filter-mapping>
  <filter-name>auth1</filter-name>
  <url-pattern>auth1/*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>auth2</filter-name>
  <url-pattern>auth2/*</url-pattern>
</filter-mapping>

答案 2 :(得分:0)

WAR可以包含任意数量的servlet。 你应该真的不会遇到每个WAR多个servlet的问题。

也许您可以使用多个servlet详细说明您的问题。