Java—向Servlet动态添加URL模式

Java—向Servlet动态添加URL模式,java,servlets,servlet-3.0,Java,Servlets,Servlet 3.0,是否可以在运行时向Servlet动态添加URL模式?例如,当Servlet启动时,扫描文件夹中的注释,然后将这些url模式注入Servlet 提供更清晰的信息- 在Servlet的init文件中,我想这样做(伪代码) 我不确定我是否理解你的最终目标,但这里有一个可能的解决方案 使用Servlet3.0实现接口。按照javadoc的说明注册它 此接口的实现必须由JAR文件声明 资源位于META-INF/services目录中,以 此接口的完全限定类名 在其onStartup(…)方法中,您将可

是否可以在运行时向Servlet动态添加URL模式?例如,当Servlet启动时,扫描文件夹中的注释,然后将这些url模式注入Servlet

  • 提供更清晰的信息-
在Servlet的init文件中,我想这样做(伪代码)


我不确定我是否理解你的最终目标,但这里有一个可能的解决方案

使用Servlet3.0实现接口。按照javadoc的说明注册它

此接口的实现必须由JAR文件声明 资源位于
META-INF/services
目录中,以 此接口的完全限定类名

在其
onStartup(…)
方法中,您将可以访问web应用程序类路径上的所有类

逐一扫描。如果一个类在您想要的包中,并且它具有您要查找的注释,则处理它并将URL模式存储在集合中

扫描完成后,您可以使用提供的
ServletContext
注册
Servlet
实例/类,并使用给定的
ServletRegistration.Dynamic
对象注册URL模式

ServletRegistration.Dynamic registration = servletContext.addServlet("myServlet", new MyServlet());
registration.addMapping(yourCollectionAsAStringArray);

如果需要,您还有许多其他配置选项。

可能我误解了。您希望在启动时还是以后使用此功能?启动时可以。例如,在servlet的init()函数中。其目的是什么?你确定使用简单的控制器模式不会更好吗?也许吧,但我正试图为这个项目编写一个简单的库,让我只编写新的控制器,命名它们的url模式,而不编辑servlet或web.xml。也许你应该使用现有的库(例如spring mvc或jersey)?@Koitoer是的,我补充了一个澄清。谢谢
ServletRegistration.Dynamic registration = servletContext.addServlet("myServlet", new MyServlet());
registration.addMapping(yourCollectionAsAStringArray);