是否可以在运行时动态地向Servlet添加URL模式?例如,当Servlet启动时,扫描文件夹中的注释,然后将这些url模式注入servlet中?
在Servlet的init文件中,我想这样做(伪代码)
// scan all the files in the package my.project.services
// find all the classes with the Annotation @Service
// read those annotations, find the url patterns in them, and insert them into the servlet
答案 0 :(得分:7)
我不确定我理解你的最终目标,但这是一个可能的解决方案。
使用Servlet 3.0,实现ServletContainerInitializer
接口。将其注册为javadoc说
此接口的实现必须由JAR文件声明 位于
META-INF/services
目录内并以其命名的资源 此接口的完全限定类名
在onStartup(..)
方法中,您可以访问Web应用程序类路径中的所有类。
逐一扫描它们。如果一个类在你想要的包中,并且它有你正在寻找的注释,则处理它并将URL模式存储在一个集合中。
扫描完成后,您可以使用提供的Servlet
注册ServletContext
个实例/类,并使用给定的ServletRegistration.Dynamic
对象注册URL模式。
ServletRegistration.Dynamic registration = servletContext.addServlet("myServlet", new MyServlet());
registration.addMapping(yourCollectionAsAStringArray);
如果您需要,还有许多其他配置选项。