Java Spring Boot中的DispatcherServlet和web.xml
我目前正试图将我的项目从JavaEE转移到SpringBoot项目。 然而,我对DispatcherServlet和web.xml这两个部分感到困惑,似乎项目不再读取web.xml了。当前项目正在Tomcat7上运行 在我的Java Spring Boot中的DispatcherServlet和web.xml,java,spring,spring-boot,tomcat7,web.xml,Java,Spring,Spring Boot,Tomcat7,Web.xml,我目前正试图将我的项目从JavaEE转移到SpringBoot项目。 然而,我对DispatcherServlet和web.xml这两个部分感到困惑,似乎项目不再读取web.xml了。当前项目正在Tomcat7上运行 在我的web.xml文件中,我有很多servlet,servlet映射,filter和filter映射,我不知道如何在dispatcher中进行映射 我在下面附上了我的web.xml的一个示例,版本是2.5 显示名称 描述 ... 某些筛选器名称 一些过滤类 某个参数名 一些价
web.xml
文件中,我有很多servlet
,servlet映射
,filter
和filter映射
,我不知道如何在dispatcher中进行映射
我在下面附上了我的web.xml
的一个示例,版本是2.5
显示名称
描述
...
某些筛选器名称
一些过滤类
某个参数名
一些价值
某些筛选器名称
一些url模式
某个参数名
某些参数值
一些Servlet名称
一些Servlet类
一些Servlet名称
一些Url模式
pom.XML
。SpringBoot的方法是将所有xml配置、web.xml等移动到SpringBoot的自动配置+java配置web.xml
,但它需要添加
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>
org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener
在web.xml
中。并且,需要依赖于pom.xml
@配置。
Spring boot更喜欢注释而不是基于xml的配置,因此在您的情况下,您可以使用基于注释的自动bean创建来注册bean,而不是使用
web.xml
来配置servlet、servlet映射、过滤器
和过滤器映射
- 将基于xml的映射转换为基于注释的映射
- 使用
@Bean
注释创建Bean,以便spring boot在组件扫描期间自动使用它们
供参考:
- 为了注册过滤器和添加过滤器bean您可以创建一个类,用
@Configuration
或@Component
注释对其进行注释,并创建FilterRegistrationBean的bean
来注册过滤器。您还可以使用@bean注释在那里创建过滤器本身的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>
- Springboot仍然允许我们使用基于xml的配置,例如,如果您想使用
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>
调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/dispatcher.xml
1.
调度员
/
在另一个文件dispatcher.xml中,您可以将bean创建为:
<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>
请注意,Springweb.xml
通常位于src/main/webapp/web-INF
中
你可以参考:
花了相当长的时间,所以分享了我记得的三件事,让它在命令行中工作
最重要的是:JSP应该只保存在/src/main/resources/META-INF/resources文件夹中李>
确保maven在构建jar时考虑了您的文件夹/src/main/resources,否则在pom.xml中添加这些行
src/main/resources
感谢您的澄清!因此,我说得对吗?我需要将web.xml
中每个标记的所有值注册到我的@SpringBootApplication
类中?最好保持@SpringBootApplication
类干净。例如,在@springboot应用程序的包下创建一个名为config
的新包,并创建一个名为FiltersConfiguration
的@Configuration>注释类,然后开始将过滤器注册为@Bean
注释方法。这样,您的代码将更清晰,更易于阅读。您可以根据需要创建更多的@Configuration
类。
<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>