2016-07-13 11 views
1

私はチュートリアルをダウンロードし、それを(追加Mavenを)私のニーズに合うように少し変更したJAX-RS - ホームURL

私は特定のホーム・ページでのサービス開始を作るものが思っていました -

<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Restful Web Application</display-name> 
    <servlet> 
     <servlet-name>jersey-serlvet</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.ricki.test</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>jersey-serlvet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

マイ桟橋SERVICを次のように私のweb.xmlに見える次

http://localhost:8080/RESTfulExample/WEB-INF/classes/com/ricki/test/JettyService.java

に私は私のサービスを実行するには、デフォルトEクラスは、私のホームページは私のホームページまたはを表示するwhcih http://localhost:8080/RESTfulExample/に設定されますIdeall

@Path("/hello") 
public class HelloWorldService 
{ 
    private final Logger logger = Logger.getLogger(HelloWorldService.class); 

    @GET 
    @Path("/{param}") 
    public Response getMsg(@PathParam("param") String msg) 
    { 
     logger.info("Received message " + msg); 
     String output = "Hi : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 
} 

を次のように任意の私の残りのクラスが見えます。この

import com.google.common.util.concurrent.AbstractIdleService; 
import java.lang.management.ManagementFactory; 
import org.eclipse.jetty.jmx.MBeanContainer; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.util.resource.Resource; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class JettyService extends AbstractIdleService 
{ 
    private Server server; 

    @Override 
    protected void startUp() throws Exception 
    { 
     server = new Server(8080); 
     MBeanContainer mbContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer()); 
     server.addBean(mbContainer); 
     Resource resource = Resource.newClassPathResource("/webapp"); 
     WebAppContext context = new WebAppContext(resource.getURL().toExternalForm(), "/ricki-test/"); 
     server.setHandler(context); 
     server.start(); 
    } 

    @Override 
    protected void shutDown() throws Exception 
    { 
     try 
     { 
      server.stop(); 
      server.join(); 
     } 
     finally 
     { 
      server.destroy(); 
     } 
    } 
} 

のように見える私はと対話することができます実際​​の私サービス。

お時間をいただきありがとうございます。

答えて

4

あなたがしたくない場合はweb.xmlファイルを使用する必要はありません。あなたは組み込みのJettyサーバを使用している場合は、手動でジャージーにwireingを行うことができます。

public static void main(String[] args) throws Exception { 
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 

    Server jettyServer = new Server(8080); 
    jettyServer.setHandler(context); 

    ServletHolder jerseyServlet = context.addServlet(
     org.glassfish.jersey.servlet.ServletContainer.class, "/*"); 
    jerseyServlet.setInitOrder(0); 

    // Tells the Jersey Servlet which REST service/class to load. 
    jerseyServlet.setInitParameter(
     "jersey.config.server.provider.classnames", 
     EntryPoint.class.getCanonicalName()); 

    try { 
     jettyServer.start(); 
     jettyServer.join(); 
    } finally { 
     jettyServer.destroy(); 
    } 
} 

例から:http://www.nikgrozev.org/2014/10/16/rest-with-embedded-jetty-and-jersey-in-a-single-jar-step-by-step/

またjersey-container-jetty-http依存関係を使用することができます。

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-jetty-http</artifactId> 
    <version>2.23.1</version> 
</dependency> 

これで、次の操作を実行できます。

URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build(); 
ResourceConfig config = new ResourceConfig(MyResource.class); 
Server server = JettyHttpContainerFactory.createServer(baseUri, config); 

あなたが本当にweb.xmlを使用する場合は、別の方法でそれにアクセスする必要があります

Server server = new Server(8080); 

String rootPath = SimplestServer.class.getClassLoader().getResource(".").toString(); 
WebAppContext webapp = new WebAppContext(rootPath + "../../src/main/webapp", ""); 
server.setHandler(webapp); 

server.start(); 
server.join(); 

も参照してください:Configure embedded jetty with web.xml?

その時点で、使用する方が簡単ですJetty Mavenプラグイン。warファイルをバンドルし、ローカルのJettyサーバーにデプロイします。

 <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>9.3.6.v20151106</version> 
      <configuration> 
       <scanTargets> 
        <scanTarget>${project.basedir}/src/main</scanTarget> 
        <scanTarget>${project.basedir}/src/test</scanTarget> 
       </scanTargets> 
       <webAppConfig> 
        <contextPath>/${project.artifactId}-${project.version}</contextPath> 
       </webAppConfig> 
       <contextPath>${project.artifactId}</contextPath> 
      </configuration> 
     </plugin> 
+0

ありがとう – Biscuit128

関連する問題