Java 在Tomcat8上实现Jersey 2.x的最佳方法是什么?
我了解Web容器和Tomcat,能够部署静态和动态Web站点。但我是新的休息和新泽西州。我阅读了2.6用户指南,浏览了许多网站和youtube视频。关于1.x Jersey的信息似乎很多,但关于2.x的信息不多。我可以在我的环境中使用1.18,但似乎无法使用任何适用于2.x的部署模型。我注意到在2.x中有一个应用程序部署模型。所以我想我会问一些非常普通的问题来开始这项工作Java 在Tomcat8上实现Jersey 2.x的最佳方法是什么?,java,jersey-2.0,tomcat8,Java,Jersey 2.0,Tomcat8,我了解Web容器和Tomcat,能够部署静态和动态Web站点。但我是新的休息和新泽西州。我阅读了2.6用户指南,浏览了许多网站和youtube视频。关于1.x Jersey的信息似乎很多,但关于2.x的信息不多。我可以在我的环境中使用1.18,但似乎无法使用任何适用于2.x的部署模型。我注意到在2.x中有一个应用程序部署模型。所以我想我会问一些非常普通的问题来开始这项工作 通过Tomcat8,哪种部署模式最适合基本REST服务?为什么 我发现2.6版部署的.jar与1.18版部署的.jar有很大
感谢我能够使用Jersey 2.6用户指南中提供的关于部署到3.x servlet容器的说明来实现这一点。我最终使用了类似于下面的项目。因为URL映射是在.xml中提供的,所以可以从应用程序子类中省略@ApplicationPath
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Servlet declaration can be omitted in which case
it would be automatically added by Jersey -->
<servlet>
<servlet-name>org.example.MyApplication</servlet-name>
</servlet>
<!-- Servlet mapping can be omitted in case the Application subclass
is annotated with @ApplicationPath annotation; in such case
the mapping would be automatically added by Jersey -->
<servlet-mapping>
<servlet-name>org.example.MyApplication</servlet-name>
<url-pattern>/myresources/*</url-pattern>
</servlet-mapping>
</web-app>
org.example.MyApplication
org.example.MyApplication
/我的资源/*
以下是我希望能相对完整地解决您的问题的方法
你不提Maven,所以我会说:Maven是你的朋友
让我们从pom开始:
应用程序如下所示:
package some.package;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import some.package.HelloRest;
@ApplicationPath("/rest")
public class RestApp extends Application {
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>(Arrays.asList(HelloRest.class));
}
}
public class RestApp extends ResourceConfig {
public RestApp() {
packages("some.package");
}
}
但我不想使用Maven强>
好的。以下是jars Eclipse作为Maven依赖项的列表:
- javax.servlet-api-3.1.0.jar
- jersey-container-servlet-core-2.13.jar
- javax.inject-2.3.0-b10.jar
- jersey-common-2.13.jar
- javax.annotation-api-1.2.jar
- 泽西-番石榴-2.13.jar
- hk2-api-2.3.0-b10.jar
- hk2-utils-2.3.0-b10.jar
- aopalliance-repacked-2.3.0-b10.jar
- hk2-locator-2.3.0-b10.jar
- javassist-3.18.1-GA.jar
- osgi-resource-locator-1.0.1.jar
- jersey-server-2.13.jar
- jersey-client-2.13.jar
- validation-api-1.1.0.Final.jar
- javax.ws.rs-api-2.0.1.jar
- jersey-container-servlet-2.13.jar
据推测,将这些手动添加到类路径应该是可行的。或者使用Maven。在过去几年与RestEasy合作后,我才开始关注Jersey。你为什么要“强迫”Tomcat这样做?我问这个问题的原因是,我从Jersey用户指南开始,遵循他们的步骤,使用Maven进行构建,使用Grizzly进行web服务器,然后一切都运行起来。我相信最初的样本使用了Jersey 2.6。当你说“强迫Tomcat”时,你是指Jersey在Grizzly上进行了测试,而我应该使用它吗?顺便说一句,我让它在Tomcat中按照用户指南中的说明工作。我在测试中遇到了一个用户错误,当我试图访问错误的路径时,它看起来好像不起作用。这并不是说它是负面的,只是我最近经历了一些相同的过程,并且很容易使用用户指南中的“默认值”。很高兴听到你让它运行起来了!顺便说一句,一定要接受你对自己问题的回答——你会因此获得一些声誉积分!:-)哇!这是一个极好的答案!不要认为我曾经遇到过一个更完整的答案……我希望没有xml也能完成同样的事情,而是使用
main()
方法,就像使用HttpServer
1一样。如果想要使用不同版本的jersey(Tomcat服务器中已经存在的版本除外),需要做什么?2.可以部署与servlet jar捆绑的war文件吗?3.可以在现有的Tomcat服务器中使用不同版本的jersey吗?
package some.package;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/hello")
public class HelloRest {
@GET
public String message() {
return "Hello, rest!";
}
}
package some.package;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import some.package.HelloRest;
@ApplicationPath("/rest")
public class RestApp extends Application {
public Set<Class<?>> getClasses() {
return new HashSet<Class<?>>(Arrays.asList(HelloRest.class));
}
}
public class RestApp extends ResourceConfig {
public RestApp() {
packages("some.package");
}
}