カスタムサーブレットを登録しようとしています。SpringブートカスタムServletがBean名にマップされない
私は@Configuration
クラスでこのコードを使用:
@Bean (name="probe")
public PingServlet probe(){
return new PingServlet();
}
を、私は、これは/プローブにマッピングすることだろうと思ったが、それはしません。私は「/」にマッピングして、その理由は、クラスServletContextInitializerBeans
、そこにこの方法ではということです:
private <T, B extends T> void addAsRegistrationBean(ListableBeanFactory beanFactory,
Class<T> type, Class<B> beanType, RegistrationBeanAdapter<T> adapter) {
List<Map.Entry<String, B>> beans = getOrderedBeansOfType(beanFactory, beanType,
this.seen);
for (Entry<String, B> bean : beans) {
if (this.seen.add(bean.getValue())) {
int order = getOrder(bean.getValue());
String beanName = bean.getKey();
// One that we haven't already seen
RegistrationBean registration = adapter.createRegistrationBean(beanName,
bean.getValue(), beans.size());
registration.setName(beanName);
registration.setOrder(order);
this.initializers.add(type, registration);
if (this.log.isDebugEnabled()) {
this.log.debug(
"Created " + type.getSimpleName() + " initializer for bean '"
+ beanName + "'; order=" + order + ", resource="
+ getResourceDescription(beanName, beanFactory));
}
}
}
}
ラインList<Map.Entry<String, B>> beans = getOrderedBeansOfType(beanFactory, beanType, this.seen);
、1つの豆の復帰リストのみ(私のサーブレット)beanTypeはjavaxのサーブレットであると私はのDispatcherServletを期待するだろうが私もSpring MVCを使用しています。
これは(クラスServletRegistrationBeanAdapter
で)次のような方法でエラーに結果:
@Override
public RegistrationBean createRegistrationBean(String name, Servlet source,
int totalNumberOfSourceBeans) {
String url = (totalNumberOfSourceBeans == 1 ? "/" : "/" + name + "/");
if (name.equals(DISPATCHER_SERVLET_NAME)) {
url = "/"; // always map the main dispatcherServlet to "/"
}
ServletRegistrationBean bean = new ServletRegistrationBean(source, url);
bean.setMultipartConfig(this.multipartConfig);
return bean;
}
豆リストはサイズ1であるので、createRegistrationBeanに「/」にハードコードマッピング。
これは、 '/'(DispatcherServletと私のPingServlet)への2つのマッピングがあるため、それらがjettyを埋め込むのを失敗させます。
何が問題なのですか?
' PingServlet'は例えばDispatcherServletによって処理されます)。 –
おかげで、私はbean名がそれ自身で動くべきだと思った。したがって、私のサーブレットが唯一のものであれば動作しますか? – YaOg
'ServletRegistrationBean'でマッピングを指定したり、サーブレットの登録を無効にしたりしない限り、後者の場合、リクエストは' DispatcherServlet'によって処理され、次にDispatcherServletがBeanの名前に基づいてサーブレットにディスパッチします。呼び出されるURL。 –