java – 为什么以及何时使用动态servlet注册?

我正在调查JHipster生成的spring boot项目,发现所有请求映射都是通过web.xml(AFAIK,spring-boot rids来自创建web.xml,没关系)完成的,不是通过spring的RequestMapping,而是如下所示:

 ServletRegistration.Dynamic someServlet=
                servletContext.addServlet("someServlet", new SomeServlet());

 someServlet.addMapping("/someUrl");
 someServlet.setAsyncSupported(true); 

我的问题是:

>动态注册有没有合理的优势而不是经典的映射?
>是spring-boot注册映射的标准还是仅仅是jhipster所有者的意愿?
> someServlet.setAsyncSupported(true)只是另一种制作response.setHeader(“Access-Control-Allow-Origin”,“*”)的方法吗?

最佳答案
  1. Is there any reasonable advantages of dynamic registration instead of classic mapping?

动态servlet注册Servlet 3注册servlet的方式.在Servlets 3中,您可以避免创建web.xml并在纯Java中配置应用程序.它提供了一些优点,比如编译时检查一切是否正常,以及更重要的是因为你在Java代码中执行它,你可以做一些额外的检查或条件 – 例如,只有在设置了环境属性或类可用时才注册特定的servlet在类路径上.

它不是@RequestMapping的替代品.在Spring Boot的情况下,当你想要注册一些第三方servlet时,你很可能会使用它 – 比如JHipster的Dropwizard Metrics servlet.

  1. Is it spring-boot’s standard of registering mappings or it’s just a will of jhipster’s owner?

在Spring Boot中至少有两种方法可以注册其他servlet.见答案:How can I register a secondary servlet with Spring Boot?.

您自己的控制器可以像往常一样使用@RequestMapping进行映射.

  1. Is someServlet.setAsyncSupported(true) just another way of making response.setHeader(“Access-Control-Allow-Origin”, “*”)?

不.要设置此标头,通常使用CORSFilter(更多信息:Enabling Cross Origin Requests for a RESTful Web Service). asyncSupported标志用于使servlet能够异步处理请求.

转载注明原文:java – 为什么以及何时使用动态servlet注册? - 代码日志