需要帮助从web.xml spring boot转换

Dan*_*llo 7 java spring spring-mvc spring-boot

我正在尝试将基于web.xml的Web应用程序转换为spring boot但是在配置HttpRequestHandlerServlet时遇到问题.我的web.xml中有以下内容:

<servlet>
  <servlet-name>webServices</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
  <servlet-name>updateServlet</servlet-name>
  <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>updateServlet</servlet-name>
  <url-pattern>/update</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>webServices</servlet-name>
  <url-pattern>/ws/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

DispatcherServlet不是问题:

@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer
{
  public static void main(String[] args)
  {
    SpringApplication.run(PoolWebApplication.class);
  }

  @Bean
  public DispatcherServlet dispatcherServlet()
  {
    return new DispatcherServlet();
  }

  @Bean
  public ServletRegistrationBean servletRegistrationBean()
  {
    return new ServletRegistrationBean(dispatcherServlet(), "/ws/*");
  }
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何配置updateServlet.

如何在Spring Boot应用程序中配置基于HttpRequestHandlerServlet的servlet?

附加信息:

我尝试了建议的答案,但它对我不起作用.

我没有提到的一件事是UpdateServlet被命名为"updateServlet":Componenet("updateServlet")公共类UpdateServlet实现了HttpRequestHandler

该名称与答案中的bean名称冲突.更改后(更新),我得到:

No bean named 'httpRequestHandlerServlet' is defined
Run Code Online (Sandbox Code Playgroud)

在将updateServlet的名称更改为httpRequestHandlerServlet之后,我得到了

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'httpRequestHandlerServlet' must be of type [org.springframework.web.HttpRequestHandler], but was actually of type [org.springframework.web.context.support.HttpRequestHandlerServlet]
Run Code Online (Sandbox Code Playgroud)

M. *_*num 3

DispatcherServlet一种更简单的方法,只需添加一行application.properties并从应用程序类中删除 servlet bean。

server.servlet-path=/ws/*
Run Code Online (Sandbox Code Playgroud)

接下来只需将 的定义添加HttpRequestHandlerServlet到您的配置中,而不是DispatcherServlet.

@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer
{
  public static void main(String[] args)
  {
    SpringApplication.run(PoolWebApplication.class);
  }

  @Bean
  public HttpRequestHandlerServlet updateServlet()
  {
    return new HttpRequestHandlerServlet();
  }

  @Bean
  public ServletRegistrationBean updateServletRegistrationBean()
  {
    return new ServletRegistrationBean(updateServlet(), "/update");
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:

注意,usingupdateServlet()方法在这里是绝对合法的,并且可以用来获取SpringBean实例(见下面的注释)。

  • 不,不会。`@Bean`方法是由spring处理的,实际上是被拦截的。 (2认同)