我已经使用了jaxrs的球衣实现,但是iam无法对程序进行跟踪是我遇到问题的任何想法帮助我
在下面的程序中,我使用了jaxy的jersy 2.x实现 我使用jax-rs(restfull)的jersey实现实现了该程序 我编写了2个类而不是web.xml,我使用了类
MyResource.java
package com.rest.application;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import com.rest.webservice.SampleService;
@ApplicationPath("rest")
public class MyResource {
private Set s;
public MyResource() {
s=new HashSet();
s.add(new SampleService());
}
public Set getSingletons() {
return s;
}
}
SampleService.java
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@Path("sample")
public class SampleService {
@GET
@Produces("text/html")
@Path("{username}")
public String sayHello(@PathParam("username")String s) {
return "<font color='blue' size=8>Hello:" +s+ "</font>";
}
@GET
@Produces("text/plain")
public String sayBye() {
return "Bye";
}
}
我添加了这个程序所需的所有罐子 我仍然得到以下错误
java.util.concurrent.ExecutionException:
org.apache.catalina.LifecycleException:
Failed to start component [StandardEngine[Catalina].
StandardHost[localhost].StandardContext[/RestApp2]]
Caused by: org.apache.catalina.LifecycleException:
Failed to start component [StandardEngine[Catalina].
StandardHost[localhost].StandardContext[/RestApp2]]
像这样同样的错误显示在任何地方
当我将服务器tomcat 7更改为6时 它正在工作,但没有显示输出 任何人都有任何想法提前感谢你
答案 0 :(得分:1)
This说,@ApplicationPath("rest")
可能只适用于Application的子类。
您可以分享更多关于您要做什么以及完整堆栈跟踪的内容。你在用web.xml吗?
答案 1 :(得分:1)
正如@MSD所提到的,您对@ApplicationPath
的使用不正确。请参阅Application Deployment上的Jersey文档,了解所有不同的部署选项,以及它们在不同环境中的工作方式。
基本上,最简单的方法是将@ApplicationPath
置于空Application
类
@ApplicationPath("/rest")
public class MyApplication extends Application {}
这将扫描@Provider
和@Path
带注释类的整个类路径,以便向应用程序注册。虽然这看起来更容易,但更常见的方法是在使用Jersey时使用它的ResourceConfig
类,它是Application
的子类。您可以注册包,它将扫描包和子包
@ApplicationPath("/rest")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("com.my.packages");
}
}
有一个好处是,有时会有注释的第三方依赖项,但您不想注册。要注册单个班级,只需使用register(...class)
中的ResourceConfig
。
现在Tomcat 7而不是6中出错的原因很可能是因为Tomcat 6(servlet 2.5)没有使用ServletContainerInitializer
的sevlet可插拔机制。此初始化程序的Jersey实现加载应用程序,在@ApplicationPath
子类上查找Application
。如果您不在3.0环境中,则此功能将无效。
注意Jersey初始化程序包含在jersey-container-servlet
jar中。您可以阅读更多相关信息here