Spring 4 - Java Config,Tomcat和Display Name

Bri*_*ian 10 java spring tomcat tomcat7 spring-4

我正在使用Spring 4.1.1和纯Java Config(即根本没有web.xml).AnnotationConfigWebApplicationContext有一个displayName属性,我假设它类似于web.xml文件中的display-name标签.但是,当我在Java Config中设置此属性时,Tomcat管理器中的"显示名称"列在部署WAR时为空,这与我在web.xml中使用display-name标记不同.

这是预期的行为还是我做错了什么.我使用的是最新版本的Tomcat 7.0.57,Java 1.7 u51和Groovy 2.3.7.

@Slf4j
class WebAppInitializer implements WebApplicationInitializer {
{
    @Override
    void onStartup(ServletContext container) throws ServletException {
        def rootContext = new AnnotationConfigWebApplicationContext()
        rootContext.register(WebAppConfig)
        rootContext.servletContext = container
        rootContext.displayName = 'Description of WAR goes here!'

        DispatcherServlet dispatcherServlet = new DispatcherServlet(rootContext)
        dispatcherServlet.throwExceptionIfNoHandlerFound = true

        def dispatcherServletReg = container.addServlet('dispatcher', dispatcherServlet)
        dispatcherServletReg.addMapping('/')
        dispatcherServletReg.loadOnStartup = 1
    }
}
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助.

小智 11

正如您所看到的那样,设置的displayName仅适用于Spring ApplicationContext,并且与web.xml display-name完全无关.web.xml display-name与:container.getServletContextName();

由于此对象已经使用其值集传入,并且ServletContext接口不允许您更改此值,因此我不确定它是否可以使用纯Java配置.

但是,您仍然可以通过设置metadata-complete ="false"将部分web.xml与WebApplicationInitializer结合使用:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="false" version="3.0">
    <display-name>Web Application Name</display-name>
</web-app>
Run Code Online (Sandbox Code Playgroud)