web.xml 初始化参数超过一个参数值

web.xml init params more than one param-value

请问是否可以在

中添加多个param-value
<param-value>

标签?

例如:

<init-param>
        <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext, org.springframework.web.context.support.XmlWebApplicationContext</param-value>
</init-param>

谢谢!

你做的是正确的,应该用逗号,分隔作为分隔符

<context-param>
  <param-name>contextClass</param-name>
  <param-value>ex1.com,ex2.com,.....</param-value>
</context-param>

或者您可以像下面这样放置它们以使其更具可读性,

<context-param>
    <param-name>contextClass</param-name>
    <param-value> 
        org.springframework.web.context.support.AnnotationConfigWebApplicationContext
       org.springframework.web.context.support.XmlWebApplicationContext
    </param-value>
</context-param>

应该按预期工作

您可以在 <param-value> 中使用多个值,但前提是方法可以接受值数组。

示例 1:

<init-param>
    <param-name>suffixExclusions</param-name>
    <param-value>.jsp, .ftl</param-value>
</init-param>

它工作正常,因为可以有很多参数。

示例 2:

<init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true, false</param-value>
</init-param>

将是一个例外:

 org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'boolean' for property 'forceEncoding'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [true, false]
[INFO] [talledLocalContainer]   at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:480)
[INFO] [talledLocalContainer]   at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:512)
[INFO] [talledLocalContainer]   at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1120)

原因方法只需要一个布尔值。

UPD

根据 documentation 预计参数 contextClass

中只有一个 class

这取决于参数。读取该值的代码可以按照他们喜欢的任何方式对其进行解析。这意味着你没有办法说 "I want to pass multiple values" 也没有标准。

Spring 不支持多个 class 作为 contextClass。此 class 用于构建应用程序上下文,而 Java class 始终只能有一个具体类型。如果您不指定参数,Spring 将使用 XmlWebApplicationContext 作为默认值。如果您使用带注释的 Java 配置,那么您需要将其替换为 org.springframework.web.context.support.AnnotationConfigWebApplicationContext.

配置Spring的classes需要用contextConfigLocation指定,它采用文件列表(逗号and/or space分隔)或class 名字。

详情见文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-java-instantiating-container-web and http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html