【问题标题】:Accessing URL mappings of a servlet in Tomcat with only static functions仅使用静态函数访问 Tomcat 中 servlet 的 URL 映射
【发布时间】:2014-10-18 07:04:10
【问题描述】:

我需要为我在 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

【问题讨论】:

    标签: java tomcat servlets web.xml servlet-mapping


    【解决方案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 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-24
      • 2012-02-12
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多