Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Tomcat8上实现Jersey 2.x的最佳方法是什么?_Java_Jersey 2.0_Tomcat8 - Fatal编程技术网

Java 在Tomcat8上实现Jersey 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有很大

我了解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有很大不同。有没有一种简单的方法来判断基本Tomcat安装需要哪些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");
        }
    }