如何在tomcat容器中安装servlet并将其加载到每个Web应用程序的上下文中?

suc*_*awk 5 java tomcat servlets classloader

我目前正在使用Tomcat 7.我想部署/安装一个将在其上下文中的每个webapp中加载的servlet.我正在寻找一个解决方案,不涉及我将servlet添加到每个webapp的战争.这可能吗?

最终,我希望它能够在每个webapp的上下文根的公共子路径上处理请求.

我想也许我可以从tomcat通用类加载器加载一个带注释的servlet,但我无法让它工作.例如,相同的带注释的servlet在战争中工作,但不在常见的类加载器中工作.

@WebServlet(
    description = "Says Hello", 
    urlPatterns = { "/HelloServlet" })
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // log hello
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Dim*_*mos 0

你描述的东西与Servlet的逻辑不完全兼容。

如果您想在 Tomcat 中使用来自 2 个不同应用程序的服务/库,那么您可以在 Tomcat 中添加一个库作为共享库。然后,您将能够从应用程序 servlet 中使用该库。如果你想实现这一点,你必须添加 jar $CATALINA_HOME/shared/lib,然后编辑$CATALINA_HOME/conf/catalina.properties以添加{catalina.home}/mylibs/*.jar属性common.loader。然后,您将能够在应用程序的各种 servlet 中使用您的库。

但是,这与您所描述的不同。事实上,你所描述的在Tomcat中是不可行的,因为每个Web应用程序都有自己的ApplicationContext。因此,webappA的应用程序上下文将为http://host/webappA,而webappB的应用程序上下文将为http://host/webappB。因此,如果您希望在这两个应用程序之外有一个 servlet,那么该 servlet 将属于不同的 ApplicationContext。因此,无法通过属于先前 ApplicationContext 的http://host/webappA/commonhttp://host/webappB/common路径访问此 servlet。