2015-11-30 7 views
1

Пожалуйста, помогите мне, ребята, я схожу с ума здесь ..Джерси Jetty Embedded не будет читать Путь аннотацию, Ошибка 404

Так что я пытался использовать трикотаж (2.22.1) во встроенном причалу (9.2. 14.v20151106), с очень простым основным приложением, как это:

public class MainApp{ 
    public static void main(String[] args) throws Exception { 
     Server server = new Server(8080); 
     ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS); 

     ServletHolder sh = new ServletHolder(ServletContainer.class); 
      sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "etc.mypackage"); 
      sh.setInitParameter(ServerProperties.PROVIDER_SCANNING_RECURSIVE, "true"); 
      sh.setInitParameter(ServerProperties.TRACING, "ALL"); 
      sh.setInitParameter("jersey.config.server.tracing", "ALL"); 
      sh.setInitOrder(1); 
      sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); 
     context.addServlet(sh, "/"); 
     server.start(); 
     server.join(); 
    } 
} 

Одна из вещей, что не работаешь здесь является то, что, кажется, не трассировка Джерси, чтобы работать, даже если установить его в параметре ,

И у меня есть 2 сервлетам etc.mypackage.servlets:

@Path("/") 
public class TestServlet { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String testString){ return "TestServlet.class; } 

    @Path("test1") 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getString(){ 
     String test = "TestServlet.class second method called"; 
     return test; 
    } 
} 

, а другой с идентичными функциями, но с другой путь и отладки строки:

@Path("/2") 
public class TestServlet2 { 
    @Path("/test1") 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String testString){ return "TestServlet2.class; } 

    @Path("test2") 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getString(){ 
     String test = "TestServlet2.class second method called"; 
     return test; 
    } 
} 

Эти коды запуска и при вызове его в http://localhost:8080/ он вернет простой текст TestClass.class из первого метода этот класс, но если я добавлю больше пути в ссылку, он просто вернет ту же строку и никак не сможет вызвать для него второй способ: TestServlet класс или TestServlet2.

Но если изменил путь от TestServlet из @Path («/») во что-нибудь, кроме того, он просто возвращает ошибку 404 для любого URL, включая http://localhost:8080/. Я пробовал все, что я могу думать о причинах, но безуспешно, и это так расстраивает. Я что-то упустил?

Благодаря ...

ответ

2

Здесь context.addServlet(sh, "/"); вы говорите, что путь, чтобы соответствовать для доступа к сервлету. Итак, единственная точка доступа у вас есть /. если вы хотите получить доступ к «ничего после /», вы должны добавить подстановочный знак *. Так что просто измените его на .addServlet(sh, "/*");

+0

Это работает! Я не могу поверить, что на самом деле это была проблема, потому что я был уверен, что я попытался с шаблоном, но я, должно быть, что-то изменил раньше. Огромное спасибо – samiunn

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