代码之家  ›  专栏  ›  技术社区  ›  Nuri Tasdemir

仅使用静态函数访问Tomcat中servlet的URL映射

  •  1
  • Nuri Tasdemir  · 技术社区  · 11 年前

    我需要使用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

    1 回复  |  直到 11 年前
        1
  •  1
  •   icza    11 年前

    添加 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 值,然后再使用它。

    推荐文章