Дійсно не можна визначити порядок виконання фільтра за допомогою @WebFilter
примітки. Однак, щоб мінімізувати web.xml
використання, достатньо анотувати всі фільтри лише таким filterName
чином, що вам не потрібно <filter>
визначення, а просто <filter-mapping>
визначення в потрібному порядку.
Наприклад,
@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}
з в web.xml
тільки це:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/url2/*</url-pattern>
</filter-mapping>
Якщо ви хочете зберегти шаблон URL-адреси @WebFilter
, ви можете просто так,
@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}
@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
але ви все ж можете залишити <url-pattern>
в систему web.xml
, так як це вимагається згідно з XSD, хоча він може бути порожнім:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern />
</filter-mapping>
Незалежно від підходу, це все вийде з ладу в Tomcat до версії 7.0.28, оскільки він задихається від присутності <filter-mapping>
без <filter>
. Дивіться також Використання Tomcat, @WebFilter не працює з <filter-mapping> всередині web.xml
order
атрибут вкладеної@WebFilterMapping
анотації. Цікаво, чи не зробили це для простоти