关于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>
也就是说,同一类的元素必须配置完毕后才能开始配置下一类的元素