Путаница с отображением сервлетов в Джерси

Может кто-нибудь объяснить на простом английском, как это работает (или, по крайней мере, почему моя структура не работает)? Я хочу, чтобы функция с именем ExportLicenseInfo в моем ресурсе сервлета Джерси, который я назвал ExportResource, сопоставлялась с http://example.com/myApp/export/software_licenses.{year}-{month}.{format}, например: http://example.com/myApp/export/software_licenses_2013-10.csv

Конфигурация сервлета в web.xml:

<servlet>
    <servlet-name>ExportServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.mycompany.app.ExportApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Мое отображение сервлета в web.xml:

<servlet-mapping>
    <servlet-name>ExportServlet</servlet-name>
    <url-pattern>/export</url-pattern>
</servlet-mapping>

Мой код с аннотациями @Path:

@Path("/export")
public class ExportResource {

    ...

    @GET
    @Produces({"text/csv", "application/json"})
    @Path("/software_licenses_{year: [0-9][0-9][0-9][0-9]}-{month: [0-1][0-9]}.{format}")
    public String ExportLicenseInfo( ... ) {
    ...
    }

Когда я пытаюсь получить доступ к ресурсу, я получаю журнал трассировки 404. Джерси:

Feb 21, 2014 2:41:46 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 6 * LoggingFilter - Request received on thread http-bio-8080-exec-67
6 > GET http://localhost:8080/app/export/software_licenses_2013-10.csv
6 > host: localhost:8080
6 > connection: keep-alive
6 > cache-control: max-age=0
6 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
6 > user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
6 > accept-encoding: gzip,deflate,sdch
6 > accept-language: en
6 > cookie: JSESSIONID=DB64E0B066BDEE8CABFC94686AD6ACDC.test; JSESSIONIDSSO=61B51CEED61F8F6CE8A8DB46B38BAC9F; i18next=en

Feb 21, 2014 2:41:46 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 6 * LoggingFilter - Response received on thread http-bio-8080-exec-67
6 < 404

person brokethebuildagain    schedule 21.02.2014    source источник
comment
Ваш ExportResource не является сервлетом.   -  person Luiggi Mendoza    schedule 22.02.2014
comment
Да; Я знаю это. Мой сервлет — это трикотажный сервлет, который вызывает package.   -  person brokethebuildagain    schedule 22.02.2014
comment
О, и я получаю 404. Я обновлю свой вопрос.   -  person brokethebuildagain    schedule 22.02.2014
comment
Это не трикотажный сервлет. И, очевидно, вы сопоставляете свой путь "/export" с несуществующим сервлетом. Вот почему вы получаете 404. Вместо этого покажите свои конфигурации web.xml для вашего сервлета из трикотажа.   -  person Luiggi Mendoza    schedule 22.02.2014
comment
Предполагая, что ExportServlet сопоставлен с сервлетом диспетчера трикотажа, вы сопоставляете /export со своей службой отдыха, которая отвечает /export в этом пути, поэтому я думаю, что правильный URL-адрес вашей службы - http://example.com/myApp/export/export/software_licenses_2013-10.csv.   -  person Katona    schedule 22.02.2014
comment
Я думал, что это может иметь место, но я все еще получаю 404, когда пытаюсь использовать этот URL.   -  person brokethebuildagain    schedule 22.02.2014


Ответы (1)


Попробуйте сопоставить сервлет трикотажа следующим образом:

<servlet-mapping>
<servlet-name>ExportServlet</servlet-name>
<url-pattern>/export/*</url-pattern>
</servlet-mapping>
person Camilo    schedule 21.02.2014
comment
Спасибо! Я только что закончил работать с этим шаблоном. В моем ресурсе сервлета мне также пришлось изменить аннотацию @Path для класса с '/export' на '/'. - person brokethebuildagain; 22.02.2014