Tôi đang cố gắng chuyển đổi một ứng dụng web dựa trên web.xml thành khởi động mùa xuân nhưng đang gặp sự cố khi định cấu hình một HttpRequestHandlerServlet. Tôi có những điều sau đây trong web.xml của tôi:Cần trợ giúp chuyển đổi từ web.xml khởi động mùa xuân
<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>
Các DispatcherServlet không phải là một vấn đề:
@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/*");
}
}
Nhưng tôi không thể tìm ra cách để cấu hình updateServlet.
Làm thế nào để cấu hình một servlet dựa trên HttpRequestHandlerServlet trong ứng dụng Khởi động mùa xuân?
Thông tin bổ sung:
Tôi đã thử câu trả lời được đề xuất nhưng không hiệu quả đối với tôi.
Một điều mà tôi không đề cập đến là UpdateServlet được đặt tên "updateServlet": componenet ("updateServlet") public class UpdateServlet thực hiện HttpRequestHandler
Đó xung đột tên với tên đậu trong câu trả lời. Sau khi thay đổi nó (cập nhật), tôi nhận được:
No bean named 'httpRequestHandlerServlet' is defined
Sau khi thay đổi tên của updateServlet để httpRequestHandlerServlet, tôi nhận được
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]
Bạn không nên sử dụng phương thức 'updateServlet()' trực tiếp trong 'updateServletRegistrationBean()', vì lệnh gọi trực tiếp sẽ tạo ra cá thể sẽ nằm ngoài 'ApplicationContext'. –
Không, không. Các phương thức '@ Bean' được xử lý bởi mùa xuân và thực sự bị chặn. –
Phương thức '@ Bean' không bị chặn, Spring sử dụng chúng để tạo các cá thể Spring Bean và gọi chúng là thủ công là vô nghĩa. Ở đây nó trông như thế nào: '@Bean public ServletRegistrationBean updateServletRegistrationBean (HttpRequestHandlerServlet updateServlet)'. Trong trường hợp này, Spring sẽ tiêm cá thể 'updateServlet' từ ApplicationContext. –