2013-04-26 5 views
7

Я следую this учебным пособиям, чтобы создать сервис REst с использованием Джерси.Попытка создать сервис REst с использованием Джерси

Иногда я не в полной мере понять, что автор учебника средствами, но это те шаги, которые я следовал до сих пор:

1)создал динамический веб-проект и назвал его: de.vogella.jersey.first

2)Установленные Maven зависимостей от затмения

3)Старинный мой проект в проект Maven (это означает, что создан файл pom.xml)

4)Добавлены необходимые зависимости в pom.xml, так что я могу использовать майку без необходимости вручную добавьте файлы jar. Я добавил следующий XML:

<dependencies> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.17.1</version> 
    </dependency> 
</dependencies> 

5)автор предлагает создать класс Java и дает некоторый код. Я могу только предположить, что он хочет, чтобы мы создали новый пакет в папке src, назовите его de.vogella.jersey.first, а затем создайте класс java и назовите его Hello и поместите там код. Вот что я сделал.

6)Затем он предлагает открыть файл web.xml. Тем не менее, нет такого файла в проекте. Поэтому я продолжаю и создаю такой файл в пути WebContent/WEB-INF/lib. Я размещаю код, который он предлагает.

7)Следующий шаг, который я не понимаю больше всего. Он говорит о web.xml, что мы только что добавили, и более конкретно он заявляет:

«Параметр„com.sun.jersey.config.property.package“определяет, в котором джерси пакет будет искать классы веб-службы. Это свойство должно указывать на ваши классы ресурсов. "

8)Последний шаг, это открыть URL http://localhost:8080/de.vogella.jersey.first/rest/hello в моем браузере. Однако я получаю HTTP Status 404 - /de.vogella.jersey.first/rest/hello


с тем, что должен я заменить именно com.sun.jersey.config.property.package?

Являются ли шаги, которые я выполнил до сих пор, правильно, или я неправильно истолковал что-то?

+1

Файл web.xml идет в 'WebContent \ WEB-INF' * не * в 'lib'. – Qwerky

ответ

11

Свойство com.sun.jersey.config.property.package просто необходимо установить как пакет, содержащий классы веб-сервиса. В учебнике это de.vogella.jersey.first, и вы можете видеть, что класс Hello объявлен в этом пакете.

Другими словами, при развертывании приложения Джерси будет искать классы веб-службы в пакете de.vogella.jersey.first, и в этом случае он найдет класс Hello был объявлен с javax.ws.rs.Path аннотацию, а также создать конечную точку прослушивания веб-службы на URL, который был объявлен @Path.

Однако я никогда не устанавливал такие вещи для проектов на Джерси. Я просто поместил свои веб-сервисные классы в папку src, и Джерси узнает их независимо от того, какой пакет я их поместил. Это минимальная конфигурация, что я с проектами Джерси в web.xml:

<servlet> 
    <description>JAX-RS Tools Generated - Do not modify</description> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 

    <!-- 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.your.webservice.classes</param-value> 
    </init-param> 
    --> 

    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Кроме того, если вы не фантазии проектов Maven, просто создать простую Dynamic Web Project и скопировать Jersey JARs в WebContent/WEB-INF/lib.

Кроме того, как Qwerky предложил, web.xml должен быть в WebContent/WEB-INF/ и .jar файлы должны быть скопированы в WebContent/WEB-INF/lib.

Кроме этого, описанная процедура выглядит нормально!

+0

Ну, что я сделал, это вручную включить файлы Jar Jar и не использовать зависимости Maven. На самом деле мне также нужно было включить jersey-servlet.jar, который можно найти здесь: http://search.maven.org/#search|ga|1|fc%3a%22com.sun.jersey.spi.container.servlet.ServletContainer% 22. Я также заменил пакет com.sun.jersey.config.property.package с моим пакетом, где мои классы Java. пожалуйста, обновите свой ответ с помощью этой информации, и я приму это. Кроме того, у xml, который вы указали, есть некоторые ошибки? Я считаю, что теги, связанные с сервлетом, должны находиться внутри тегов сервлета вправо? – 2013-04-26 09:26:53

+0

@DonP Я думаю, что предоставленный 'web.xml' в порядке. Взгляните на учебник, глава '5.3. Определить диспетчер сервлетов Джерси': '' определяется после ''! –

9

Для получения дополнительной информации, если вы используете Джерси 2 этот класс был заменен jersey.config.server.provider.packages так конфигурация ресурсов будет, как:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>de.vogella.jersey.todo.resources</param-value> 
</init-param> 
+1

Я был смущен этим, так как в данном web.xml автор использовал свойство 'jersey.config.server.provider.packages', в то время как в описании он говорит о' com.sun.jersey.config.property.packages'. Ваш ответ очистил его. –

+0

добро пожаловать! –

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