Saat ini saya sedang mencoba memindahkan proyek saya dari Java EE ke proyek Spring Boot. Namun, saya telah terjebak dan bingung pada bagian dengan servlet dispatcher dan web.xml dan sepertinya web.xml tidak lagi dibaca oleh proyek lagi. Proyek saat ini berjalan di tomcat 7.
Dalam file web.xml
saya, saya memiliki banyak servlet
, servlet-mapping
, filter
dan filter mapping
dan saya tidak mengerti bagaimana melakukan pemetaan di dispatcher.
Saya telah melampirkan contoh web.xml
saya di bawah ini dan versinya adalah 2.5.
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>displayName</display-name>
<description>description</description>
<resource-ref>
...
</resource-ref>
<filter>
<filter-name>Some Filter Name</filter-name>
<filter-class>Some Filter Class</filter-class>
<init-param>
<param-name>Some Param Name</param-name>
<param-value>Some Value</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Some Filter Name</filter-name>
<url-pattern>Some url-pattern</url-pattern>
</filter-mapping>
<context-param>
<param-name>Some Param Name</param-name>
<param-value>Some Param Value</param-value>
</context-param>
<servlet>
<servlet-name>Some Servlet Name</servlet-name>
<servlet-class>Some Servlet Class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Some Servlet Name</servlet-name>
<url-pattern>Some Url Pattern</url-pattern>
</servlet-mapping>
</web-app>
Qns:
web.xml
saya untuk bergantung pada dispatcher musim semi, jika ya, bagaimana saya bisa mencapainya?web.xml
adalah cara yang tepat untuk proyek spring boot?Adakah yang bisa memandu saya di sini? Terima kasih!
pom.xml
. Cara untuk menggunakan spring boot adalah memindahkan semua konfigurasi xml Anda, web.xml dll ke konfigurasi otomatis spring boot + konfigurasi java Anda.Spring boot bekerja sangat baik ketika Anda melakukan semuanya dalam konfigurasi java dan mengikuti prinsip-prinsipnya. Dari pengalaman saya dengan itu, ketika Anda mulai menggabungkan konfigurasi XML dan spring lawas, itu mulai merusak proses konfigurasi otomatis dan jauh lebih baik untuk mencoba sebanyak yang Anda bisa untuk mematuhi praktik terbaik spring boot yang baru.
Anda dapat menyimpan web.xml
Anda, tetapi perlu menambahkan
<listener>
org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener <listener-class>/listener-class>
</pendengar>
di web.xml
. Dan, ketergantungan yang diperlukan dari pom.xml
.
Semua kelas pendengar, filter dikonversi dalam kelas Java. Kelas ini akan menjadi @Configuration.
Jika Anda memiliki interceptor, yang dapat dipindahkan ke kelas konfigurasi.
Spring-boot lebih memilih anotasi daripada konfigurasi berbasis xml, jadi dalam kasus Anda alih-alih menggunakan web.xml
untuk mengkonfigurasi servlet, servlet-mapping, filter
dan filter mapping
, Anda dapat menggunakan kreasi bean otomatis berbasis anotasi untuk mendaftarkan beans:
@Bean
sehingga spring-boot akan secara otomatis mengambilnya selama pemindaian komponen.Sebagai referensi: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html
@Configuration
atau @Component
dan membuat beans dari FilterRegistrationBean
untuk mendaftarkan filter. Anda juga dapat membuat beans filter itu sendiri di sana dengan menggunakan anotasi @Bean.Sebagai contoh, ekuivalen dengan filter berbasis xml berikut ini
<filter>
<filter-name>SomeUrlFilter</filter-name>
<filter-class>com.company.SomeUrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SomeUrlFilter</filter-name>
<url-pattern>/url/*</url-pattern>
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</filter-mapping>
Berbasis anotasi yang setara adalah:
@Bean
public FilterRegistrationBean someUrlFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(someUrlFilter());
registration.addUrlPatterns("/url/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("Filter");
registration.setOrder(1);
return registration;
}
@Bean(name = "someUrlFilter")
public Filter someUrlFilter() {
return new SomeUrlFilter();
}
web.xml
:Web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
dan di file lain dispatcher.xml Anda dapat membuat beans sebagai:
<beans ...>
<context:component-scan base-package="com.demo"/>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Perhatikan bahwa Spring web.xml
biasanya akan berada di src/main/webapp/WEB-INF
.
Anda dapat merujuk: https://www.baeldung.com/register-servlet