>

이 예 (저지 + 부두용 Google에서 처음으로 조회)이지만 운이 적습니다.

아래의 주석가들의 제안에 따라, 최신 버전의 Jetty (9.1.0.RC2)와 Jersey (2.7)를 사용하도록 예제를 업데이트하기로 결정했습니다.

업데이트 된 종속성이있는 업데이트 된 pom은 다음과 같습니다.

<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>HelloJerseyLatest</groupId>
<artifactId>HelloJerseyLatest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>9.1.0.RC2</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>9.1.0.RC2</version>
    </dependency>
</dependencies>
</project>

첫 번째로 알아야 할 것은 Jersey 패키지가 com.sun.jersey.spi.* 에서 변경되었다는 것입니다.   org.glassfish.jersey.* 로 . 결과적으로 주요 방법도 변경해야합니다.

package example.server;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
//import com.sun.jersey.spi.container.servlet.ServletContainer;
import org.glassfish.jersey.servlet.ServletContainer;
public class MinimalServerRest {
     public static void main(String[] args) throws Exception {
         ServletHolder sh = new ServletHolder(ServletContainer.class);
         // these initialization strings will need to be updated.
         sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
         sh.setInitParameter("com.sun.jersey.config.property.packages", "rest");//Set the package where the services reside
         sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
         Server server = new Server(9999);
         ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
         context.addServlet(sh, "/*");
         server.start();
         server.join();
      }
}

원본 샘플 코드를 최신으로 업데이트하려면 어떤 변경이 필요합니까? web.xml 파일이 없습니다. 내가 필요한가요?

  • 답변 # 1

    이것은 당신이 일한 예제를 얻지 못한다는 것을 알고 있습니다 (예제 링크가 깨졌습니다)-Jersey 1을 잘 모르고 다른 사람의 프로젝트를 업그레이드하는 것은 어렵습니다. HelloWorld 를 요구하는 또 다른 질문이 있으니  예를 들어, Jersey&Jetty를 이용하려면 무언가가 필요하다고 가정합니다.

    여기서 JettyHttpContainerFactory 를 사용하는 두 가지 예가 있습니다.  다른 하나는 Jersey 를 사용하여  와이즈 비즈 .

    저지 저지 자원-정말 간단합니다. 이것은 클래스를 ServletContainer 의 경로로 설정합니다. 및 "test" 경로를 가진 한 가지 방법 hello 수락  일반 텍스트로 "Hello World"를 생성합니다.

    GET
    
    

    다음 서버 클래스 :

    @Path("/test")
    public class TestResource {
        @GET
        @Path("hello")
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
           return "Hello World";
        }
    }
    
    

    그리고 마지막으로 pom 의존성 (두 예제 모두에 대한 의존성이 있음).

    public class ExampleServer {
        public static void main(String[] args) {
                URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build();
                ResourceConfig config = new ResourceConfig(TestResource.class);
                Server server = JettyHttpContainerFactory.createServer(baseUri, config);
           }
    }
    
    

    또한 기능에 대한 이해는 https://jersey.java.net/apidocs/2.7/jersey/javax/ws/rs/core/Feature.html을 참조하십시오-클래스 경로에 Moxy를 포함 시키면 Jersey는 자동으로 MoxyJSON 특징. Jackson을 사용하려면 JacksonFeature 및 종속성을 수동으로 등록해야합니다. 리소스를 등록하는 것과 동일한 초기화 매개 변수 (쉼표로 구분)로 모든 기능을 등록 할 수 있습니다.

    서블릿으로 구성하려면 이것을 ExampleServer 코드로 사용하십시오

          <dependencies>
                <dependency>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-server</artifactId>
                    <version>9.1.3.v20140225</version>
                </dependency>
                <dependency>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-servlet</artifactId>
                    <version>9.1.3.v20140225</version>
                </dependency>
                <dependency>
                    <groupId>org.glassfish.jersey.core</groupId>
                    <artifactId>jersey-server</artifactId>
                    <version>2.7</version>
                </dependency>
                <dependency>
                    <groupId>org.glassfish.jersey.containers</groupId>
                    <artifactId>jersey-container-servlet-core</artifactId>
                    <version>2.7</version>
                </dependency>
                <dependency>
                    <groupId>org.glassfish.jersey.containers</groupId>
                    <artifactId>jersey-container-jetty-http</artifactId>
                    <version>2.7</version>
                </dependency>
                <dependency>
                    <groupId>org.glassfish.jersey.media</groupId> 
                    <artifactId>jersey-media-moxy</artifactId> 
                    <version>2.7</version> 
                </dependency>
                <!-- if you want to enable JSON support, include Moxy and Jersey will automatically enable the Feature -->
          </dependencies>
    
    

    서블릿 버전과 관련하여, 나는 리소스의 클래스 이름을 정의하고있다. 몇 가지가 있다면 public class ExampleServer { public static void main(String[] args) throws Exception { Server server = new Server(9998); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); server.setHandler(context); ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*"); jerseyServlet.setInitOrder(0); /*This parameter tells the Jersey Servlet which of your REST resources to load. In this example we're adding the TestResource class. Jersey will then invoke this class for requests coming into paths denoted by the @Path parameter within the TestResource class. If you have multiple classes, you can either list them all comma separated, of use "jersey.config.server.provider.packages" and list the package name instead */ jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", "foo.bar.TestResource"); server.start(); server.join(); } } 를 사용하는 대신 패키지 이름을 제공하는 것이 가장 좋습니다.

    이것이 도움이되기를 바랍니다. 문제가 있으면 알려주세요.

    jersey.config.server.provider.packages

  • 이전 python multiprocessing matplotlib savefig () 문제를 해결하는 방법?
  • 다음 c# - 버전 번호에 대한 정규식