Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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 eclipse中Tomcat上Jersey的基本完整配置_Java_Eclipse_Maven_Tomcat_Jersey - Fatal编程技术网

Java eclipse中Tomcat上Jersey的基本完整配置

Java eclipse中Tomcat上Jersey的基本完整配置,java,eclipse,maven,tomcat,jersey,Java,Eclipse,Maven,Tomcat,Jersey,我来自新泽西州,正在尝试使用Tomcat和eclipse建立一个基本的Web应用程序。我看过很多教程和示例,但它们彼此都不同,或者省略了过程的一部分(例如,使用Spring、使用web.xml文件、在Tomcat上部署非Jersey应用程序等) 到目前为止,我的情况如下: 我在eclipse中创建了一个名为TestProject的动态Web项目,并将其转换为maven项目 以下是我的pom.xml: <project xmlns="http://maven.apache.org/POM/

我来自新泽西州,正在尝试使用Tomcat和eclipse建立一个基本的Web应用程序。我看过很多教程和示例,但它们彼此都不同,或者省略了过程的一部分(例如,使用Spring、使用web.xml文件、在Tomcat上部署非Jersey应用程序等)

到目前为止,我的情况如下:

我在eclipse中创建了一个名为TestProject的动态Web项目,并将其转换为maven项目

以下是我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jersey.version>2.23.1</jersey.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
        <scope>provided</scope>
    </dependency>

    <!-- POJO to JSON support -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <!-- required to run without web.xml on Tomcat -->
    <dependency>
        <groupId>org.glassfish.jersey.bundles</groupId>
        <artifactId>jaxrs-ri</artifactId>
        <version>${jersey.version}</version>
    </dependency>

</dependencies>
TestProvider
作为最小资源类:

@Path("/test")
public class TestProvider {

    @GET
    @Produces("application/json")
    public Test getTest(){
        return new Test();
    }

}
Test
作为以JSON格式返回的最小对象:

public class Test {

    private String field = "test";

}
我有一个Tomcat服务器运行,该项目作为web模块添加。如果我运行项目(运行方式>在服务器上运行),并导航到
http://localhost:8080/test
http://localhost:8080/TestProject/test
我有一个标准的tomcat 404

这是我的Tomcat启动日志:

jun 14, 2016 11:29:06 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TestProject' did not find a matching property.
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/8.0.35
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          May 11 2016 21:57:08 UTC
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         8.0.35.0
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 7
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            6.1
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jre1.8.0_71
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_71-b15
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         C:\Users\tim\workspace\apache-tomcat-8.0.35
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=C:\Users\tim\workspace\apache-tomcat-8.0.35
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=C:\Users\tim\workspace\apache-tomcat-8.0.35\endorsed
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1252
jun 14, 2016 11:29:06 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_71\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_71/bin/server;C:/Program Files/Java/jre1.8.0_71/bin;C:/Program Files/Java/jre1.8.0_71/lib/amd64;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\ImageMagick-6.9.1-Q16;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\ProgramFiles\apache-maven-3.2.5\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\eclipse;;.
jun 14, 2016 11:29:06 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
jun 14, 2016 11:29:06 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
jun 14, 2016 11:29:06 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
jun 14, 2016 11:29:06 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 941 ms
jun 14, 2016 11:29:06 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
jun 14, 2016 11:29:06 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.35
jun 14, 2016 11:29:07 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [187] milliseconds.
jun 14, 2016 11:29:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
jun 14, 2016 11:29:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
jun 14, 2016 11:29:07 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 668 ms
如果我使用注释
@WebServlet(name=“hello”,urlPatterns={”/hello”}
创建一个非jersey HttpServlet,我确实会在
http://localhost:8080/TestProject/hello


我错过了什么?此外,上述任何一项都不是基本web应用程序的“最佳实践”吗?这项技术似乎变化很快,很难知道哪些示例或方法已经过时。

Jersey 2 Tomcat 8、Java 8和Servlet 3.0基本最小配置

package com.test;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/*")
public class TestApplication extends ResourceConfig {

    public TestApplication(){
        packages("com.test");
        register(JacksonFeature.class);
    }

}
package com.test;

public class Test {

  private String name;
  private String version;
  private String servlet;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getVersion() {
    return version;
  }

  public void setVersion(String version) {
    this.version = version;
  }

  public String getServlet() {
    return servlet;
  }

  public void setServlet(String servlet) {
    this.servlet = servlet;
  }
}
:{port}以访问tomcat管理器。您可以登录以查找上下文路径

通过以下地址访问您的应用程序:

:{port}/{context path}/{url pattern}/{resource path}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jersey2</groupId>
  <artifactId>jersey2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jersey.version>2.23.1</jersey.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
       <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
    </dependency>

</dependencies>
资源

package com.test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/test")
public class TestResource {

    @GET
    @Produces("application/json")
    public Test getTest(){
        Test bean = new Test();
        bean.setName("Jersey");
        bean.setVersion("2.0");
        bean.setServlet("3.0");
        return bean;
    }

}
测试Bean

package com.test;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/*")
public class TestApplication extends ResourceConfig {

    public TestApplication(){
        packages("com.test");
        register(JacksonFeature.class);
    }

}
package com.test;

public class Test {

  private String name;
  private String version;
  private String servlet;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getVersion() {
    return version;
  }

  public void setVersion(String version) {
    this.version = version;
  }

  public String getServlet() {
    return servlet;
  }

  public void setServlet(String servlet) {
    this.servlet = servlet;
  }
}

此外,如果您使用的是jackson,那么dependency已经被称为jersey media json jackson-

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

org.glassfish.jersey.media

它似乎仍然不起作用。这些类应该使用哪个url?该项目称为“TestProject”,但
http://localhost:8080/TestProject/test
给出一个404错误。您还向
Test
对象添加了一些设置(例如
setName
Test
在这种情况下扩展了哪个类?您应该能够在tomcat管理器中查看您的上下文路径。我将添加测试类。它只是一个bean。我的上下文路径应该是TestProject(我在问题中添加了一个屏幕截图).尽管如此,
http://localhost:8080/TestProject/test
给出了404。在您的示例中,您要导航到哪个URL?请尝试手动将war复制到tomcat部署文件夹(webapps)中并点击相同的url而不是通过eclipse部署?只是好奇还是没什么。如果我尝试一个带有注释的非jersey
HttpServlet
@WebServlet(name=“hello”,urlPatterns={”/hello”}
,我确实会得到
http://localhost:8080/TestProject/hello
,因此我的服务器似乎正在工作。
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-processing</artifactId>
    <version>${jersey.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jettison</artifactId>
    <version>${jersey.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>${jersey.version}</version>
</dependency>