混合web.xml和abstractannotationconfigdispatcherservletinitializer在spring中

bwitn5fc  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(394)

我在spring上有一个应用程序,并使用javaconfigs来配置和初始化我的应用程序,因此我没有 web.xml . 这是我的网页初始化器的样子,

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{PublicApiConfig.class, MobileConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/*"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        LoggingFilter loggingFilter = new LoggingFilter();
        return new Filter[]{characterEncodingFilter, loggingFilter};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[0];
    }
}

我需要实现tomcat会话复制,为了达到这个目的,我需要将应用程序作为可分发的。使用传统的web.xml,我可以添加 <distributable/> 属性,就这样。然而,据我所知,没有办法通过java配置来做到这一点。
我的问题是,web.xml和java是否可以混合配置,例如

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <distributable/>

</web-app>

并将其包含在 WebInitializer .

vmdwslir

vmdwslir1#

根据Servlet3.0规范,只要web应用版本>=3.0且metadata complete属性为false(默认值),就可以将web.xml与编程servlet注册混合使用。以您当前的配置,它应该可以工作

tuwxkamq

tuwxkamq2#

您可以使用tomcatembeddedservletcontainerfactory

@Override
public void customize(Context context){
            context.setDistributable(true);
        }

在这个带有嵌入式tomcat会话集群的threadspring引导应用程序中,您可以找到一个完整的代码示例
编辑:在这种情况下我不使用spring boot,tomcatembeddedservletcontainerfactory不可用
webapplicationinitializer的javadoc说,可以将其与web.xml一起使用:
web inf/web.xml和webapplicationinitializer的使用不是相互排斥的;例如,web.xml可以注册一个servlet,而webapplicationinitializer可以注册另一个servlet。初始化器甚至可以通过servletcontext#getservletregistration(string)等方法修改web.xml中执行的注册。

相关问题