Java 带有Jersey的简单Web应用返回404

Java 带有Jersey的简单Web应用返回404,java,rest,jersey,Java,Rest,Jersey,我正在尝试用Jersey服务器端实现一个非常简单的web应用程序。我没有使用Maven、eclipse或任何其他工具。我称之为下面的url: 我跟踪日志文件,这是我看到的: GET/RestfulExample/hello HTTP/1.1“4045 我查看了许多其他帖子,我试图确保我的url模式与main.java、web.xml和我调用的url匹配。 我最初是跟随vogella的教程 main.java类: package com.unitask.web; import javax.ws

我正在尝试用Jersey服务器端实现一个非常简单的web应用程序。我没有使用Maven、eclipse或任何其他工具。我称之为下面的url:

我跟踪日志文件,这是我看到的:

GET/RestfulExample/hello HTTP/1.1“4045

我查看了许多其他帖子,我试图确保我的url模式与main.java、web.xml和我调用的url匹配。 我最初是跟随vogella的教程

main.java类:

package com.unitask.web;

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


//Sets the path to base URL + /hello
@Path("/hello")

public class main{

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String sayPlainTextHello(){
      return "Hello Jersey";
   }//end of hello

  // This method is called if HTML is request
  @GET
  @Produces(MediaType.TEXT_HTML)
  public String sayHtmlHello() {
    return "<html> " + "<title>" + "Hello Jersey" + "</title>"
        + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
  }

}//end of class
package com.unitask.web;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
导入javax.ws.rs.core.MediaType;
//设置基本URL+/hello的路径
@路径(“/hello”)
公共班机{
@得到
@生成(MediaType.TEXT\u PLAIN)
公共字符串sayplantextHello(){
返回“Hello Jersey”;
}//你好结束
//如果请求HTML,则调用此方法
@得到
@生成(MediaType.TEXT\u HTML)
公共字符串sayHtmlHello(){
返回“+”+“Hello Jersey”+“
+“+”你好,泽西衫“+”+“+”;
}
}//下课
web.xml:


Restful应用程序示例
使用Jersey的Restful服务器应用程序示例。
org.glassfish.jersey.servlet.ServletContainer
泽西网应用
jersey.config.server.provider.classnames
com.unitask.web.main
1.
泽西网应用
/*

这是因为对于单个
@Path(“/hello”)
模式有两个方法映射。因此它是不明确的

使用@Path.like将每个方法映射到不同的URL模式

@Path("/hello")
public class main{

   @Path("/sayPlain")
   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String sayPlainTextHello(){
      return "Hello Jersey";
   }//end of hello


  @Path("/sayHTML")
  @GET
  @Produces(MediaType.TEXT_HTML)
  public String sayHtmlHello() {
    return "<html> " + "<title>" + "Hello Jersey" + "</title>"
        + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
  }

}//end of class
@Path(“/hello”)
公共班机{
@路径(“/sayplane”)
@得到
@生成(MediaType.TEXT\u PLAIN)
公共字符串sayplantextHello(){
返回“Hello Jersey”;
}//你好结束
@路径(“/sayHTML”)
@得到
@生成(MediaType.TEXT\u HTML)
公共字符串sayHtmlHello(){
返回“+”+“Hello Jersey”+“
+“+”你好,泽西衫“+”+“+”;
}
}//下课

我在plain方法和@Path(/htmlHello)中添加了@Path(“/plainHello”)到第二个。我调用了以下URL:和。它仍然返回404。除了404之外,日志中没有任何其他错误消息吗?事实上,我刚刚在catalina中发现了。out::严重:第2行第6列解析致命错误:处理指令目标匹配“[xX][mM][lL]“这是不允许的。org.xml.sax.SAXParseException;systemId:jndi:/localhost/RestfulExample/WEB-INF/WEB.xml;行号:2;列数:6;不允许处理指令目标与“[xX][mM][lL]”匹配。但是我不明白,我的web.xml看起来是正确的。我的web.xml开头有一行空行。我去掉了那条线。它不再抛出任何错误,但HTTP代码变为503@Luiggi Mendoza感谢您指出错误消息。因为它抛出了一个503,您可能应该对其中一个方法进行注释,因为同一URL有两个端点。我意识到我的WEB-INF/lib目录层次结构不正确。我解压缩了jersey发行版,得到了这个:WEB-INF/lib/jaxrs-ri。我在编译脚本中正确地设置了它,但我没有意识到当我部署它时它将无法工作。不管怎样,它现在起作用了。谢谢你的帮助@Luiggi Mendoza