我最近遇到了一个障碍,可能会让我无法完成计划用两个servlet打包一个WAR。解决方法是创建一个额外的Maven WAR模块。
除了给我和客户带来的额外麻烦外,还有其他真正的缺点吗?有优势吗?
@Edit
我遇到的“障碍”是我想为每个servlet提供两种不同的身份验证机制。一个使用Spring Security,另一个使用不同的身份验证提供程序或可能的基本身份验证。见这里:
答案 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详细说明您的问题。