1

我需要为在 web.xml 中设置的 servlet 使用 URL 映射。目前我可以在 processRequest 函数中使用以下代码读取映射。

Iterator<String> urlMappings = this.getServletContext().getServletRegistration(MyServletClass.class.getSimpleName()).getMappings().iterator();
while (urlMappings.hasNext()) {
    System.out.println(urlMappings.next());
}

但是 getServletContext 函数不是静态的,因此如果没有 servlet 的实例,我就无法读取它。这也没关系,但如果有办法只使用静态函数来做到这一点,我会更喜欢那个解决方案。有什么帮助吗?

我正在使用 Tomcat 8.0.3 和 JDK 1.8

4

1 回答 1

1

ServletContextListener添加到您的web.xml. 这将在您的 web 应用程序加载时调用。在该contextInitialized()方法中,您可以将其存储ServletContext在一个静态变量中,例如供以后使用。然后您将能够以ServletContext静态方式访问:

class MyListener implements ServletContextListener {

    public static ServletContext context;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        context = sce.getServletContext();
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        context = null;
    }

}

像这样添加它web-xml

<web-app>
    <listener>
        <listener-class>
            com.something.MyListener
        </listener-class>
    </listener>
</web-app>

你可以像这样从任何地方访问它:

MyListener.context.getServletRegistration(
    MyServletClass.class.getSimpleName()).getMappings().iterator();

笔记:

您可能希望将其存储为private并提供一种getter方法,并null在使用它之前检查其值。

于 2014-08-25T07:19:33.617 回答