2015-08-28 5 views
0

Я создал проект для оценки и обучения и тестирования, ошибок в коде нет, но как бы я ни старался, я не могу понять путь URI, который является методом GET в testGet .java, это тестовая страница, и я всегда получаю ошибку 404, я искал Google в течение нескольких часов, но я не нашел код answer.my здесь https://github.com/abcdef123ghi/jerseytestДжерси всегда возвращается 404

вот мой web.xml

<!DOCTYPE web-app 
    PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 
    'http://java.sun.com/dtd/web-app_2_3.dtd'> 
<web-app> 
    <display-name>Restful Web Application</display-name> 
    <servlet> 
     <servlet-name>Restful Web Application</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>service</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Restful Web Application</servlet-name> 
     <url-pattern>/webapi/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

вот мой testGET.java

package service; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 


@Path("/test") 
public class testGet { 

    @GET 
    //@Path("/test") 
    @Produces({MediaType.APPLICATION_JSON+ ";charset=utf-8"}) 
    public String Hello() 
    { 
     return "Test"; 
    } 
} 

Вопрос

Кто-нибудь работал с чем-то связанным? Я что-то не так? Я думаю, что это может быть ошибкой при работе с более чем одним @Path, одним в классе и другими в методе. Любые советы приветствуются!

С уважением

+0

Какой URL-адрес вы используете, который возвращает статус 404? – ColinMc

+0

благодарит за меня –

+0

Ваша конфигурация web.xml плохая. Вы используете конфигурацию Jersey 1.x, но вы используете банки Джерси 2.x. Посмотрите на [документацию] (https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.2) для правильной конфигурации –

ответ

2

Вы используете Maven для зависимостей? Если нет, я бы рекомендовал вам использовать его, это упростит вашу жизнь!

Одна вещь, которую мы можем указать, заключается в том, что вы используете jersey 2.19. Тем не менее, в вашем web.xml, вы используете

<servlet> 
    <servlet-name>Restful Web Application</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>service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

, который является от jersey 1.x. В jersey 2.x было изменено на:

<servlet> 
    <servlet-name>Restful Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 

    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Тогда попробуйте также добавить свой .jar в WebContent/WEB-INF/lib (как это было предложено here)

Однако ваш testGet.java должен быть правильным (Обратите внимание, что я хотел бы переименовать его в TestGet.java). Вы можете быть в состоянии, когда вы запустите свою услугу для доступа: http://host:port/rest/test

Надеюсь, это поможет!

+0

Благодарим вас за помощь –

0

Правильный URL будет:

http://{server}:{port}/{context-root}/{servlet-mapping}/{path} 

В вашем примере:

  • {server} = localhost
  • {port} = 8080
  • {context-root} = service?(Обычно название файла войны)
  • {servlet-mapping} = webapi
  • {path} = test

Так оно и должно быть:

http://localhost:8080/service/webapi/test 

Если URL не доступен, то, возможно, развертывание не смогли. Проверьте журнал своего сервера (на время развертывания файла войны).

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