Я'сейчас пытаюсь перевести свой проект с Java EE на Spring Boot. Однако я застрял и запутался на части с сервлетом dispatcher и web.xml, и кажется, что web.xml больше не читается проектом. Текущий проект работает на tomcat 7.
В моем web.xml
файле у меня много servlet
, servlet-mapping
, filter
и filter mapping
и я не очень понимаю, как сделать отображение в диспетчере.
Я приложил образец моего web.xml
ниже и версия 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
, чтобы он полагался на диспетчер spring, если да, то как я могу этого добиться?web.xml
способом продвижения для проекта spring boot?Может ли кто-нибудь помочь мне в этом? Спасибо!!!
pom.xml
. При использовании Spring Boot лучше всего перенести все ваши xml конфигурации, web.xml и т.д. в spring boot' автоматическую конфигурацию + вашу java конфигурацию.Spring boot работает очень хорошо, когда вы делаете все в конфигурации java и следуете ее принципам. По моему опыту, когда вы начинаете объединять XML конфигурацию и унаследованный spring, это начинает нарушать процесс автоматической конфигурации, и гораздо лучше постараться как можно больше соответствовать новым лучшим практикам spring boot.
Вы можете оставить свой web.xml
, но в него необходимо добавить
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>
в web.xml
. И, необходимая зависимость pom.xml
.
Все классы слушателей, фильтры преобразуются в Java класс. Этот класс будет @Configuration.
.
Если у вас есть перехватчик, его можно перенести в класс конфигурации.
Spring-boot предпочитает аннотации, а не конфигурации на основе xml, поэтому в вашем случае вместо использования web.xml
для настройки сервлетов, servlet-mapping, filterи
filter mapping`, вы можете использовать автоматическое создание бобов на основе аннотаций для регистрации бобов.Для этого вам нужно:
@Bean
, чтобы spring-boot автоматически подхватил их во время сканирования компонентов.Для справки: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html
@Configuration
или @Component
и создать боб FilterRegistrationBean
для регистрации фильтра. Вы также можете создать боб самого фильтра, используя аннотацию @Bean.Например, эквивалент следующего фильтра на основе xml
<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>
Эквивалентом фильтра на основе аннотации будет:
@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>
и в другом файле dispatcher.xml вы можете создать бобы как:
<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>
Обратите внимание, что Spring web.xml
обычно находится в src/main/webapp/WEB-INF
.
Вы можете обратиться к: https://www.baeldung.com/register-servlet