当前位置: 首页 > 知识库问答 >
问题:

使用内置 HTTP 服务器运行泽西岛

樊俊悟
2023-03-14

我正在尝试使用内置的HTTP服务器从命令行运行一个简单的泽西应用程序。

根据各种教程,我将我的应用程序设置为这样:

src/main/java/net/wjlafrance/jerseyfun/App.java:

package net.wjlafrance.jerseyfun;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

import java.io.IOException;

import com.sun.jersey.api.container.httpserver.HttpServerFactory;

/**
 * Hello world!
 *
 */
@Path("/hello")
public class App {

    public static void main(String[] args) {
        System.out.println("Starting HTTP server..");
        try {
            HttpServerFactory.create("http://localhost:9998/").start();
        } catch (IOException ex) {
            System.err.println(ex);
        }
    }

    @GET
    public Response getMessage() {
        String output = "It works!";
        return Response.status(200).entity(output).build();
    }

}

src/main/WEB app/we b-INF/WEB . XML:

<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>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
             <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>net.wjlafrance.jerseyfun</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>

当我运行mvn清洁包exec: java-Dexec.mainClass=net.wjlafrance.jerseyfun.App时,我看到这样的输出:

Starting HTTP server..
Apr 29, 2013 9:12:11 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Scanning for root resource and provider classes in the paths:
  C:\cygwin\home\wlafrance\bin\apache-maven-3.0.5/boot/plexus-classworlds-2.4.jar
Apr 29, 2013 9:12:11 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.17 01/17/2013 03:31 PM'
Apr 29, 2013 9:12:11 AM com.sun.jersey.server.impl.application.RootResourceUriRules <init>
SEVERE: The ResourceConfig instance does not contain any root resource classes.
[WARNING]
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
        at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
        at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1331)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
        at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:172)
        at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:264)
        at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:246)
        at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:117)
        at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:92)
        at net.wjlafrance.jerseyfun.App.main(App.java:22)
        ... 6 more

显然,我的服务器配置错误。有人能给我指出正确的方向吗?

共有3个答案

卢志强
2023-03-14

您应执行以下操作:

final com.sun.jersey.api.core.ResourceConfig packagesResourceConfig = new com.sun.jersey.api.core.ResourceConfig("net.wjlafrance.jerseyfun") ;

HttpServerFactory.create("http://localhost:9998/", packagesResourceConfig).start();
仇睿
2023-03-14

看到错误消息中的这行“ResourceConfig实例不包含任何根资源类”了吗?您没有为http服务器设置任何资源。我会用这种方法:

GrizzlyHttpServerFactory.createHttpServer("http://localhost:9998/", new Application());

新的应用程序()将为http服务器创建一个新的ResourceConfig类。你应该检查球衣的文件,这只是一个简单的类,其中包含一个java包。我的ResourceConfig是这样的:import org . glassfish . jersey . server . resource config;

public class Application extends ResourceConfig {
  public Application() {
    packages("ftp.recourse");
  }
}

虽然ftp.recourse软件包包含所有路径和操作,如GET,PUT,POST。请查看球衣的官方文档以获取更多详细信息。希望这会有所帮助

杨甫
2023-03-14

对于Jersey 1.x,@pakOverflow的答案指向正确的方向。这里是我成功使用的完整代码。而不依赖于Grizly1或Grizly2等。

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

import com.sun.jersey.api.container.httpserver.HttpServerFactory;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;

public class WineryUsingHttpServer {

    public static void main(String[] args) throws IOException {
        ResourceConfig packagesResourceConfig = new DefaultResourceConfig();
        Application app = new Application() {
            @Override
            public Set<Class<?>> getClasses() {
                Set<Class<?>> res = new HashSet<>();
                res.add(org.example.MainResource.class);
                return res;
            }
        };
        packagesResourceConfig.add(app);

        HttpServerFactory.create("http://localhost:8080/", packagesResourceConfig).start();
    }

}
 类似资料:
  • 我的网络服务有一些问题,我试图从网络服务接收我的电影列表,但总有这个严重的错误。 这是我的模型: 还有一把刀和一个门面,但它们工作得很好! 以下是我的服务: 方法“onemovie”和“count”运行良好,我将在浏览器中显示xml,但当我调用“XMLForApp”时,服务器抛出异常。 我的客户在这里: 例外情况是:

  • 我正在学习JAX-RS,在发出生成JSON的GET请求时,出现HTTP Status 500内部服务器错误。XML工作正常。 我搜索了其他问题,但找不到解决方案。这可能是因为我目前缺乏知识。然而,据我所知,有人建议我的项目在构建路径中缺少一个JAR。 我没有使用Maven。我刚刚在Eclipse中创建了一个动态Web应用程序,并将JAX-RS/jerjar添加到我的WEB-INF/lib目录中,并

  • 问题内容: 我一直坚持使用jersey库为RESTful Web服务创建gradle项目。项目配置应该能够在码头应用服务器内启动服务。我已经找到了资源:https : //github.com/ziroby/jetty-gradle-hello- world 该解决方案的我的问题是,它使用的是球衣的过时版本。我至少需要版本2(最好是最新的2.14)。我试图在Maven Central上搜索新版本,

  • 当我尝试在任何一点使用定位器时,我仍然无法创建我使用locator.create(mything.class)方法在AbstractBinder中注册的东西的实例。 我确信它们是正确绑定的,因为它们通过@inject字段注释被正确地注入到我的资源类中。 不同的是,Jersey/HK2框架正在实例化我的资源类(正如预期的那样,因为它们在我的包扫描路径中),但我似乎无法通过代码来利用ServiceLo

  • 我是JavaWeb服务的新手,我正在努力解决一个基本问题。 在找到了一堆过时的示例后,我设法找到了一些使用XML的方法,但是当我要求它返回JSON时,相同的代码就不起作用了。 起初我认为它缺少JSON格式化程序,但JAXB应该负责从POJO到JSON的转换,所以我认为这不是问题所在。 Tomcat中引发的错误是: 网状物。XML Todo.java TodoResource。Java语言 你知道为

  • 我试图在一个预构建项目中设置Swagger Swagger UI,该项目既不使用泽西2容器Servlet,也不使用官方文档中所述的过滤器配置(带web.xml)。 我的主类是这样的: 我想使用包扫描和Swagger用户界面来跟踪我的应用编程接口。我找到的所有答案都说你应该扩展类,或者使用带有文件的过滤器配置。请给我一个提示,告诉我如何将Swagger添加到给我的现有项目中。 我是新来JAX的,有点