Java 使用Jersey和@ApplicationPath注释加载资源

Java 使用Jersey和@ApplicationPath注释加载资源,java,tomcat,jersey,jax-rs,servlet-3.0,Java,Tomcat,Jersey,Jax Rs,Servlet 3.0,我正在尝试在不使用web.xml的情况下将基本的jersey restful服务部署到Tomcat7: @WebServlet(loadOnStartup=1) @ApplicationPath("resources") @Path("/mypath/{name}") public class MyResource extends Application { @Override public Set<Class<?>> getClasses() {

我正在尝试在不使用web.xml的情况下将基本的jersey restful服务部署到Tomcat7:

 @WebServlet(loadOnStartup=1)
 @ApplicationPath("resources")
 @Path("/mypath/{name}")
 public class MyResource extends Application {

 @Override
 public Set<Class<?>> getClasses() {
     Set<Class<?>> s = new HashSet<Class<?>>();
     s.add(MyResource.class);
     return s;
 }

 @GET
 @Consumes("text/plain")
 @Produces("text/plain")
 public String getWelcome(@PathParam(value = "name") String name) {
     return "Welcome to jax-rs " + name;
 }
}
@WebServlet(loadOnStartup=1)
@应用程序路径(“资源”)
@路径(“/mypath/{name}”)
公共类MyResource扩展应用程序{
@凌驾

public Set>s=new HashSet您使用的是Jersey的哪个版本?尝试将应用程序和资源分为两个类。明确删除
@WebServlet
注释。即,使用
@ApplicationPath
注释一个类扩展应用程序,使用
@Path
注释另一个类


编辑:确保WAR文件中包含
jersey servlet.jar

我正在使用jersey的v1.14。我尝试从根资源类中拆分
应用程序
,但没有效果。完成此操作后,我仍在尝试以相同的URL访问资源。WAR文件中是否包含jersey-servlet.jar?这就解决了问题。我不明白,Jersey servlet中特定于Jersey的servlet是如何被引用和加载我的资源的?使用servlet3 ServletContainerInitializer机制-Jersey通过META-INF服务注册一个自定义ServletContainerInitializer。如果
@ApplicationPath
@Path,servlet容器会调用此函数注释类被找到并自动注册自定义Jersey servlet。@MartinMatula您应该在答案中添加
Jersey servlet.jar
提示。重复的