从 Class 名称获取 WebServlet 名称

Get WebServlet name from Class name

有没有办法通过使用 class 名称来获取 Servlet@WebServlet 名称?

如果有帮助,我可以访问 ServletContext

class 名称使用起来更安全,因为如果我更改它,它会被重构。

我正在尝试按如下方式获取 Servlet 的映射

String servletName = "someServlet"   
Collection<String> mappings = servletContext.getServletRegistration(servletName).getMappings();

但是,与其简单地硬编码 servletName 的值,我更愿意从 HttpServlet class.

中安全地检索它

您感兴趣的ServletContext has another method which returns all servlet registrations: getServletRegistrations(). The ServletRegistration interface has in turn a getClassName()方法:

String getClassName()

Gets the fully qualified class name of the Servlet or Filter that is represented by this Registration.

所以,应该这样做:

Class<? extends HttpServlet> servletClass = YourServlet.class;
Optional<? extends ServletRegistration> optionalRegistration = servletContext
    .getServletRegistrations().values().stream()
    .filter(registration -> registration.getClassName().equals(servletClass.getName()))
    .findFirst();

if (optionalRegistration.isPresent()) {
    ServletRegistration registration = optionalRegistration.get();
    String servletName = registration.getName();
    Collection<String> servletMappings = registration.getMappings();
    // ...
}

servletName就是你的答案。但是正如您所看到的,映射很容易获得,而不需要使用 servletName.

进行另一个 ServletContext#getServletRegistration() 调用