【问题标题】:How to get a list of all available servlets?如何获取所有可用 servlet 的列表?
【发布时间】:2010-10-27 20:33:55
【问题描述】:

是否可以获得应用程序中所有可用 servlet 的列表?

我正在编写一个 Web 应用程序,它会公开大量 servlet,我想使用 HttpUnit 来测试每一个,看看它是否返回(或不返回!)。

因为其中很多会返回一个简单的 XML 响应,所以不要为每个测试用例编写测试用例,只验证它是否正常工作(例如,数据库更改并没有阻止这个 servlet 工作) .

【问题讨论】:

  • 我不知道有什么功能可以做到这一点,但应用程序的 web.xml 将列出所有这些功能。

标签: java servlets


【解决方案1】:
Map<String, ? extends ServletRegistration> servletRegistrations = request.getServletContext().getServletRegistrations();

它会帮助你。

【讨论】:

  • 这对我有用,谢谢。但仅供参考,getServletRegistrations() 方法仅在 Servlet 3.0 规范后可用(即 Java EE 6 - 即 Tomcat 7+)
【解决方案2】:

不要认为有什么开箱即用的东西。但是,您可以编写一个小程序来解析您的 web.xml 以获得所需的信息。

【讨论】:

    【解决方案3】:

    使用反射,您可以查找所有属于 HTTPServlet 的类。

    【讨论】:

    • 我认为您不能使用反射来查看 HTTPServlet 的实现。我知道不可能获取类/接口的实例,因为加载的类在加载之前不知道它们。
    【解决方案4】:

    如果您使用 tomcat,您可以在类路径中包含服务器 jar,然后将 ServletContext 强制转换为 Tomcat 实现。它包含您需要的一切。

    【讨论】:

    • 从 tomcat 5.5 开始,它不可用。 getServletNames() 和 getServlets() 都已弃用,没有替代品,并且总是返回一个空枚举。见tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/…
    • 您不能使用公共 API,只能使用内部 API。这就是为什么我说“包含服务器 jars”,即 $TOMCAT_HOME/server/lib 中的 jars
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多