从 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()
调用
有没有办法通过使用 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()
调用