2013-08-10 4 views
0

Я стараюсь использовать простой фильтр с Джерси, но без везения. Мой фильтр:Почему мой простой фильтр в Джерси не работает?

public class JerseyHelloFilter implements ContainerResponseFilter { 

    @Override 
    public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) { 
     System.out.println("JerseyHelloFilter : filter"); 
     return cresp; 
    } 
} 

Мой web.xml:

<servlet> 
    <servlet-name>Log Filter</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
     <param-value>my.package.JerseyHelloFilter</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Log Filter</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Мои JSP-страница: /my.page/index.jsp
Мои JAX-RS услуги: /my.page/resources/*

С выше коде я ожидаю метод filter воли выполняться с каждым вызовом на мой сайт и возвращать мою страницу. Но вместо этого я получаю журнал из фильтра и: HTTP Status 404 - Not Found, когда пытаюсь получить доступ к моему приветствующему файлу index.jsp в браузере. Что я делаю неправильно?

+0

Это правда. Мой JAX-RS API находится в пути '/ my.page/resources/*'. И мой файл приветствия находится только в '/ my.page/index.jsp'. Спасибо за подсказку. Я проверю это еще. – flyer

+0

Добро пожаловать. Исправление «url-pattern» для фильтра должно делать трюк. Сообщите нам, если это сработает. –

+0

Yesss! Я помещаю '/resources/*' и работает так, как мне нужно. Но хм. Я думаю, я ожидал, что Джерси получит контроль над всем моим содержанием. Плохое предположение. – flyer

ответ

0

Я подозреваю, что ваше сопоставление JAX-RS для обслуживания запросов через Джерси может быть /services/*. Таким образом, вы пытаетесь отфильтровать запрос, который Джерси не настроен для обработки. /* Соответствует более широкому набору URL-адресов.

Смежные вопросы