如何在Jetty上部署一个简单的JAX-RS应用程序?

时间:2014-07-14 13:23:11

标签: java rest servlets jax-rs

我正在尝试将简单的Web应用程序部署到jetty。

扩展javax.ws.rs.core.Application类的类如下:

package com.restfully.shop.services;

import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

/**
 * Created by Administrator on 7/14/14.
 */
public class ShoppingApplication extends Application{

    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> empty = new HashSet<Class<?>>();

    //Constructor
    public ShoppingApplication()
    {
        singletons.add(new CustomerResourceService());
    }

    @Override
    public Set<Class<?>> getClasses()
    {
        return empty;
    }

    @Override
    public Set<Object> getSingletons()
    {
        return singletons;
    }
}

我使用的web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>Rest</servlet-name>
        <servlet-class>com.restfully.shop.services.ShoppingApplication</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Rest</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

虽然我已经使用了RESTful Java和JAX-RS第一版,但我在IntelliJ Idea控制台上收到以下错误:

/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/bin/java -DSTOP.PORT=0 -Dcom.sun.management.jmxremote= -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -DOPTIONS=jmx -Didea.launcher.port=7535 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 13.app/bin" -Dfile.encoding=UTF-8 -classpath "start.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/lib/tools.jar:/Applications/IntelliJ IDEA 13.app/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain org.eclipse.jetty.start.Main --module=jmx /private/var/folders/v4/6w9zl0rd4818w9djqcm698wh0000gn/T/context6968151164482499658config/jetty-contexts.xml
Detected server http port: 8080
[2014-07-14 03:14:12,949] Artifact JAX-RS-Project1:war exploded: Server is not connected. Deploy is not available.
2014-07-14 15:14:13.273:INFO::main: Logging initialized @412ms
STOP.PORT=51033
STOP.KEY=sevdrb0afh1c
2014-07-14 15:14:13.511:INFO:oejs.Server:main: jetty-9.2.1.v20140609
2014-07-14 15:14:13.546:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/Users/Administrator/Servers/jetty/webapps/] at interval 1
2014-07-14 15:14:13.548:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/private/var/folders/v4/6w9zl0rd4818w9djqcm698wh0000gn/T/context5313593443757925212deploy/] at interval 1
2014-07-14 15:14:13.565:INFO:oejs.ServerConnector:main: Started ServerConnector@51247834{HTTP/1.1}{0.0.0.0:8080}
2014-07-14 15:14:13.565:INFO:oejs.Server:main: Started @711ms
Connected to server
[2014-07-14 03:14:13,976] Artifact JAX-RS-Project1:war exploded: Artifact is being deployed, please wait...
2014-07-14 15:14:15.919:WARN:/JAX_RS_Project1_war_exploded:Scanner-1: unavailable
javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
    at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:481)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:346)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:861)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
2014-07-14 15:14:15.920:WARN:oejuc.AbstractLifeCycle:Scanner-1: FAILED Rest@26cff4==com.restfully.shop.services.ShoppingApplication,1,false: javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
    at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:481)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:346)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:861)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
2014-07-14 15:14:15.920:WARN:/JAX_RS_Project1_war_exploded:Scanner-1: unavailable
javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
    at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:481)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:346)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:879)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
2014-07-14 15:14:15.921:WARN:oejuc.AbstractLifeCycle:Scanner-1: FAILED Rest@26cff4==com.restfully.shop.services.ShoppingApplication,1,false: javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet
    at org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:481)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:346)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:879)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
2014-07-14 15:14:15.922:WARN:oejw.WebAppContext:Scanner-1: Failed startup of context o.e.j.w.WebAppContext@47cce62c{/JAX_RS_Project1_war_exploded,file:/Users/Administrator/IdeaProjects/JAX-RS-Project1/out/artifacts/JAX_RS_Project1_war_exploded/,STARTING}
MultiException[javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet, javax.servlet.UnavailableException: Servlet class com.restfully.shop.services.ShoppingApplication is not a javax.servlet.Servlet]
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:821)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:300)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1341)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1334)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:744)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:497)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
    at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
[2014-07-14 03:14:16,054] Artifact JAX-RS-Project1:war exploded: Artifact is deployed successfully
[2014-07-14 03:14:16,054] Artifact JAX-RS-Project1:war exploded: Deploy took 2,078 milliseconds
Disconnected from server

Process finished with exit code 137

有什么想法吗? 谢谢。

更新1:我甚至尝试使用JAX-RS-Unaware容器运行此Jax-Rs应用程序(请参阅下面的web.xml)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>Rest</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.restfully.shop.services.ShoppingApplication</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>Rest</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

但是我收到以下错误:

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

当然,我的pom.xml包含所有必需的文件。

<?xml version="1.0" encoding="UTF-8"?>
<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>com.skiabox.apps</groupId>
    <artifactId>JAX-RS-Project1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>jsr311-api</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.18.1</version>
        </dependency>
    </dependencies>

</project>

0 个答案:

没有答案