J'essaie actuellement de déplacer mon projet de Java EE vers un projet Spring Boot. Cependant, j'ai été bloqué et confus de part avec servlet et web.xml dispatcher et il semble que Web Le projet ne lit plus le fichier .xml, celui-ci est exécuté sur Tomcat 7.
Dans mon web.xml
fichier, j'ai beaucoup de servlet
, servlet-mapping
, filter
et filter mapping
et je ne comprends pas vraiment comment faire le mappage dans le répartiteur.
J'ai joint un échantillon de mon web.xml
ci-dessous et la version est 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
compter sur le répartiteur de printemps, si oui, comment puis-je y parvenir?web.xml
la voie à suivre pour le projet de démarrage du printemps?Quelqu'un peut-il me guider s'il vous plaît ici? Merci!!
pom.xml
. Le chemin à parcourir avec Spring Boot consiste à déplacer toute votre configuration XML, web.xml, etc. vers la configuration automatique de Spring Boot + votre configuration Java).Le démarrage de printemps fonctionne très bien lorsque vous faites tout dans Java configuration et suivez ses principes. D'après mon expérience, lorsque vous commencez à fusionner la configuration XML et le ressort hérité, il commence à briser le processus de configuration automatique et C’est beaucoup mieux d’essayer autant que possible de se conformer aux nouvelles pratiques de démarrage printanières.
Vous pouvez garder votre web.xml
, mais il faut ajouter
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>
dans web.xml
. Et, dépendance requise de pom.xml
.
Toutes les classes d'écoute, les filtres sont convertis en Java. Cette classe serait @Configuration.
Si vous avez un intercepteur, celui-ci peut être déplacé vers la classe de configuration.
Spring-boot préfère les annotations aux configurations basées sur xml , donc dans votre cas, au lieu d'utiliser web.xml
pour configurer le servlet, servlet-mapping, filter
et filter mapping
, vous pouvez utiliser des créations automatiques de beans basées sur des annotations pour enregistrer des beans.Pour que vous deviez:
@Bean
annotations pour que spring-boot les prenne automatiquement en charge lors de l’analyse des composants.Pour référence: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html
@Configuration
ou @Component
annotation et créer le haricot de FilterRegistrationBean
pour enregistrer le filtre. Vous pouvez également créer les haricots du filtre lui-même en utilisant l'annotation @Bean.Par exemple, l’équivalent du filtre XML suivant
<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>
Les annotations équivalentes seront:
@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
.Par exemple :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>
et dans un autre fichier dispatcher.xml vous pouvez créer des beans en tant que:
<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>
Notez que Spring web.xml
vivra généralement à src/main/webapp/WEB-INF
.
Vous pouvez vous référer: https://www.baeldung.com/register-servlet
J'ai passé assez de temps à partager trois choses dont je me souviens pour que tout fonctionne à partir d'une ligne de commande.
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
Dans votre fichier de configuration MVC
@Configuration public class MvcConfig étend WebMvcConfigurerAdapter {@Bean public InternalResourceViewResolver viewResolver () {InternalResourceViewResolver resolver = new InternalResourceViewResolver (); resolver.setPrefix ("/ Representation /"); resolver.setSuffix (". jsp"); retour résolveur; }