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

Posted

技术标签:

【中文标题】如何在 tomcat 容器中安装 servlet 并将其加载到每个 Web 应用程序的上下文中?【英文标题】:How do I install a servlet in a tomcat container and have it loaded into each web app's context? 【发布时间】:2015-08-28 11:37:15 【问题描述】:

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

最终,我希望它为每个 webapp 上下文根的公共子路径上的请求提供服务。

http://host/webappA/common/ http://host/webappB/common/

我在想也许我可以从 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
    

感谢您的帮助。

【问题讨论】:

制作第三个应用程序将 servlet 共享给两者;) @StefanLindenberg 你能扩展你的评论吗?我不知道应用程序如何在另一个 web 应用程序的上下文中提供 servlet。也许提供它作为答案... 如果您只想让您的 servlet 在多个路径下可用,您可以将重定向安装到其实际(且唯一)位置。 你“实际上”试图归档什么? @f_puras 我想让我的 servlet 在多个上下文中可用,但在这些上下文下相同的子路径“通用”。我怎样才能安装重定向来完成这个? 【参考方案1】:

您可以使用war overlay 来执行此操作。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

谢谢。我熟悉 common.loader,但有没有办法加载“共享”servlet?我认为这是可能的,因为 urlPatterns 是相对于 webapp 的上下文根的,我希望它会被加载到每个 webapp 的 ApplicationContext 中。以提供的 servlet 为例:host/webappA/HelloServlet 和 host/webappB/HelloServlet。我错过了什么? 这就是我之前描述的。做到这一点的唯一方法是在两个应用程序中添加 servlet(以便在它们的上下文中可以访问它)。 “共享”其功能的唯一方法是将其添加为共享库 jar,并在您的应用程序中以这种方式使用它。

以上是关于如何在 tomcat 容器中安装 servlet 并将其加载到每个 Web 应用程序的上下文中?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Tomcat 8 中安装地理服务器

如何在 apache2 tomcat6 中安装 ffmpeg 或在 ubuntu 中安装 xampp?

如何在 Amazon Web Services EC2 中安装 Tomcat

如何在高山容器中安装 Docker?

docker中安装的centos启动tomcat 非常慢解决方案

如何在myeclipse中安装tomcat和部署项目到tomcat中