我在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
.
2条答案
按热度按时间vmdwslir1#
根据Servlet3.0规范,只要web应用版本>=3.0且metadata complete属性为false(默认值),就可以将web.xml与编程servlet注册混合使用。以您当前的配置,它应该可以工作
tuwxkamq2#
您可以使用tomcatembeddedservletcontainerfactory
在这个带有嵌入式tomcat会话集群的threadspring引导应用程序中,您可以找到一个完整的代码示例
编辑:在这种情况下我不使用spring boot,tomcatembeddedservletcontainerfactory不可用
webapplicationinitializer的javadoc说,可以将其与web.xml一起使用:
web inf/web.xml和webapplicationinitializer的使用不是相互排斥的;例如,web.xml可以注册一个servlet,而webapplicationinitializer可以注册另一个servlet。初始化器甚至可以通过servletcontext#getservletregistration(string)等方法修改web.xml中执行的注册。