使用Spring MVC 3.1+ WebApplicationInitializer以编程方式配置session-config和error-page

Bij*_*men 19 java spring-mvc servlet-3.0

WebApplicationInitializer提供了一种以编程方式表示标准web.xml文件的一部分的方法 - servlet,过滤器,监听器.

但是,我无法找到使用WebApplicationInitializer表示这些元素(会话超时,错误页面)的好方法,是否仍需要维护这些元素的web.xml?

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/uncaughtException</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/resourceNotFound</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

Jap*_*edi 13

我对这个主题做了一些研究,发现对于某些配置,比如sessionTimeOut和错误页面,你仍然需要有web.xml.

看看这个链接

希望这对你有所帮助.干杯.

  • 对于**error-page**配置,可以使用`@ExceptionHandler`注释方法或`@ControllerAdvice`类.对于**session-config**,为会话添加侦听器,并使用setMaxInactiveInterval()指定超时. (4认同)

Mat*_*ean 5

使用弹簧靴很容易.

我相信通过扩展SpringServletContainerInitializer可以在没有spring boot的情况下完成.它似乎是专门为它设计的.

Servlet 3.0 ServletContainerInitializer旨在使用Spring的WebApplicationInitializer SPI支持基于代码的servlet容器配置,而不是(或可能与传统的基于web.xml的方法相结合).

示例代码(使用SpringBootServletInitializer)

public class MyServletInitializer extends SpringBootServletInitializer {

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory containerFactory = new TomcatEmbeddedServletContainerFactory(8080);

        // configure error pages
        containerFactory.getErrorPages().add(new ErrorPage(HttpStatus.UNAUTHORIZED, "/errors/401"));

        // configure session timeout
        containerFactory.setSessionTimeout(20);

        return containerFactory;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于嵌入式tomcat.在`application.properties`中设置`server.session-timeout = 20`更容易 (3认同)