Один из способов сделать это - использовать фильтры. Вы должны написать немного собственного кода, но это не плохо. Вот пример, если вы не хотите передавать файлы * .css или * .js в ваш сервлет Spring:
web.xml:
<filter-mapping>
<filter-name>fileTypeFilter</filter-name>
<filter-class>foo.FileTypeFilter</filter-class>
<url-pattern>/*</url-pattern>
</filter-mapping>
Java класс:
public class FileTypeFilter implements Filter {
public void init(FilterConfig conf) {
// init logic here
}
public void destroy() {
// release resources here
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
if(shouldExclude(req)) {
chain.doFilter(req, res);
//some logic so the request doesnt go to the servlet
//maybe you could just forward
//the request directly to the file getting accessed. not sure if that would work
}
//file should be passed to the servlet; you can do some logic here
//if you want
}
private boolean shouldExclude(ServletRequest req) {
if(req instanceof HttpServletRequest) {
HttpServletRequest hreq = (HttpServletRequest) req;
return (hreq.getRequestURI().endsWith(".css") ||
hreq.getRequestURI().endsWith(".js"));
}
return false;
}
}
Я не проверял это, но думаю, что это сработает.
РЕДАКТИРОВАТЬ : В спецификации сервлета нет никаких исключающих функций. Я не думаю, что есть хороший способ сделать это в Spring, но он, по сути, достигает того же в вашем посте.
РЕДАКТИРОВАТЬ 2 : Если вы хотите иметь возможность легко изменять то, что фильтруется, вы можете просто использовать Spring для добавления чего-либо в Фильтр во время выполнения.
РЕДАКТИРОВАТЬ 3 : Я только что понял, что если вы перейдете прямо к файлу, он снова выполнит фильтр, и вы попадете в бесконечный цикл. Может быть другой способ сделать это с фильтрами, но я, честно говоря, не уверен, что это такое.