您可能会缺少JAX-
RS应用程序servlet。您可以在中定义它,
web.xml或者如果您希望不使用xml,可以使用
Application子类。IMO最简单的方法就是使用
Application带有注释的子类
@ApplicationPath。将创建一个servlet,并在注释中设置servlet路径的值。就像是
@ApplicationPath("/rest")public class RestApplication extends Application { // All request scoped resources and providers @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<>(); classes.add(DukesAgeResource.class); return classes; } // all singleton resources and providers @Override public Set<Object> getSingletons() { Set<Object> singletons = new HashSet<>(); return singletons; }}然后资源应该通过
http://localhost:8080/DukesAgeService/rest/dukesAge。
还有其他方法,但这是可移植的方法。Glassfish使用Jersey,但是在Netbeans中从头开始创建Java EE
Web应用程序将仅导入编译时Java EE标准类(没有Jersey依赖项)。因此,以上内容确实是您的最佳选择。
您可以在Jersey文档中查看其他部署选项。对于某些选项,您可能需要添加一些Jersey编译时依赖性。这就是我刚才提到的原因。无需其他罐子。
导致404错误的另一件事是,如果您将JAX-RS
servlet路径指定为
/*。这将与提供静态资源(例如html页面)的默认servlet冲突。这就是为什么我将其设置为
/rest。
更新
JAX-
RS规范中还指出,如果
getClasses()and中返回了空集,则
getSingletons()应该进行隐式包扫描。(提供者)
@Provider默认情况下,带有注释的类将作为单例添加,带有注释的资源类
@Path将是按请求的对象(这意味着将在每个请求中创建一个新对象)。所以您可以选择拥有
@ApplicationPath("/rest")public class RestApplication extends Application { // Left empty}它应该工作相同。



