java: вопрос о сопоставлении фильтров и сервлетов

У меня есть веб-приложение со следующей структурой:

TOMCAT_HOME
  |
   webapps
     |_myapp
          |-html/
          |-various directories
          |-WEB-INF/
          |-index.html

В приложении есть различные сервлеты, которые зарегистрированы по разным путям.
К самому приложению можно получить доступ через http://IP:PORT/myapp/
Этот курс приводит к получению index.html (в списке приветствия).
У меня вопрос, как бы Я регистрирую фильтр специально для доступа к корневому каталогу, но не подкаталогам, то есть сопоставление URL-адресов не должно быть /* Если я помещаю как URL-шаблон /, похоже, не работают.
Таким образом, фильтр будет перехватывать только этот запрос http://IP:PORT/myapp/, а не http://IP:PORT/myapp/path или http://IP:PORT/myapp/servlet/path.
Кроме того, фильтр перехватит такой запрос, как http://IP:PORT/myapp/index.html, который эквивалентен тому, к которому я стремлюсь.

Спасибо


person Cratylus    schedule 17.02.2011    source источник


Ответы (2)


Вы можете легко проверить / и заняться своим делом, иначе пусть это пройдет. С шаблоном URL /*.

@Override
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
    throws IOException,ServletException{

    HttpServletRequest request=(HttpServletRequest)req;
    String path=request.getServletPath();

    if(path.equals("/") || path.equals("/index.html"){
        // do your thing
    }

    chain.doFilter(req,res);
}
person Jeremy    schedule 17.02.2011
comment
Вот как я это делаю сейчас, но я не хочу жестко кодировать строковые сравнения путей в коде. Хотелось бы сделать это через конфигурацию, если возможно - person Cratylus; 17.02.2011
comment
@user: в этом случае вы должны настроить параметр инициализации в вашем web.xml и получить его из ServletContext, который вы можете получить из объекта FilterConfig, переданного в метод init(). - person Jeremy; 17.02.2011
comment
Извините, я не слежу: какой параметр передать? Путь? - person Cratylus; 18.02.2011
comment
Любое из значений, которые вы хотите передать в ваше приложение из web.xml, должно быть параметром инициализации. - person Jeremy; 18.02.2011

Почему бы тогда не установить фильтр как /index.html? Это не приведет к фильтрации ваших подкаталогов.

person limc    schedule 17.02.2011