关于web.xml文件配置顺序的问题 - AtrovirensBamboo/PersonalBlogWebApplication GitHub Wiki

配置web.xml文件的时候,下面这样的配置看起来没什么问题:

<!-- log4j2配置 -->
<filter>
    <filter-name>log4jServletFilter</filter-name>
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>log4jServletFilter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>

  <!-- 设置post发送的消息体内容的编码方式为utf-8 -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>

事实上,IntelliJ IDEA会显示这样的错误:

The content of element type "web-app" must match "(icon?,displayname?,description?,distributable?,contextparam*,servlet*,servlet-mapping*,session-config?, mime- mapping*,welcome-file-list?,error-page*,taglib*,resource-ref*,security-constraint*,login-config?,security- role*, env-entry*,ejb-ref*)".

看着这段提示,我想:filter和filter-mapping都是这里面的元素啊,怎么会出问题呢? 后面仔细一想,发现不仅必须是提示里面的元素,还得 严格按照顺序排列

这样就没问题了:

<!-- log4j2配置 -->
<filter>
    <filter-name>log4jServletFilter</filter-name>
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>

  <!-- 设置post发送的消息体内容的编码方式为utf-8 -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>log4jServletFilter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>


<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>

也就是说,同一类的元素必须配置完毕后才能开始配置下一类的元素

⚠️ **GitHub.com Fallback** ⚠️