GVKun编程网logo

独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动(servlet-api jar not loaded)

20

本文将为您提供关于独立Servlet5容器中的JAX-RS(Jersey)API无法启动的详细介绍,我们还将为您解释servlet-apijarnotloaded的相关知识,同时,我们还将为您提供关于

本文将为您提供关于独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动的详细介绍,我们还将为您解释servlet-api jar not loaded的相关知识,同时,我们还将为您提供关于HttpServlet类和与Jersey一起使用时的困惑、HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException、java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet、java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException的实用信息。

本文目录一览:

独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动(servlet-api jar not loaded)

独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动(servlet-api jar not loaded)

您需要使用 Jersey 3.x。 3.x 行是使用 Jakarta 命名空间的第一行。您拥有所有 Jakarta 依赖项(JAX-RS、Servlet),只是您使用的 Jersey 版本没有使用它们。有关最新的 3.x 版本,请参阅 Jersey docs。

在新的 Jakarta EE 中,所有 javax 包装都已更改为 jakarta,例如jakarta.ws.rs.ApplicationPath。一旦您更改 Jersey 版本(假设您没有任何其他旧的依赖项,您应该会收到导入错误。所有 javax 导入都应该显示错误。它们都应该用 jakarta 切换出来。所有 javax 导入(包括 JAX-RS、Servlet、Inject 等)。

HttpServlet类和与Jersey一起使用时的困惑

HttpServlet类和与Jersey一起使用时的困惑

我正在构建实现​​RESTful API的servlet。我知道Jersey是用于解密和使用给定URL的框架。如何与HttpServlet课程结合使用。

我不明白两者如何相互配合。我想这是一个很广泛的问题,但是我在阅读方面做得相当不错,但仍然停留在这个看似微不足道的概念上。我尝试HttpServlet使用扩展类并使用Jersey注释的类来部署应用程序。

@Path("/api")
public class API extends HttpServlet{

@GET
@Path("/{name}")
@Produces("text/hmtl")
public String doGetSayHello(@PathParam("name") String name){
    return "Hello" + name;
}
@GET
@Path("/articles")
@Produces("text/json")
public String doGetArticles(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{

    JSONObject obj = new JSONObject();
    obj.put("interns",interns);
    obj.put("company","Stack Overflow");

    return obj.toString();

}

}

任何帮助或信息材料将不胜感激!

HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException

HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException

我通过使用apache-tomcat-9.0.38和Jersey 2.16使其正常工作

java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet

java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet

Im目前正在使用Jersey 1.8与Guice 3.0一起使用针对我的JPA的DI.这与我无法克服的一个主要问题相当合适:

我必须使用bind手动将所有泽西资源类添加到JerseyServletModule中:

@Override
protected Injector getInjector() {
    return Guice.createInjector(new JerseyServletModule() {

        @Override
        protected void configureServlets() {

            install(new JpaPersistModule("dbname"));
            filter("/*").through(PersistFilter.class);

            /* bind the REST resources and serve*/
            bind(Hello.class);
            serve("/*").with(GuiceContainer.class);

        }
    });
}

我希望能够忽略对每个单一资源和提供者的绑定的使用,并在jersey-guice文档中找到一个备注:http://jersey.java.net/nonav/apidocs/1.8/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html

它基本上说可以将球衣资源的注册通过球衣服务.但是,我无法使用所述方法来管理这个问题:

@Override
     protected Injector getInjector() {
         return Guice.createInjector(new JerseyServletModule() {

             @Override
             protected void configureServlets() {
                 bind(GuiceResource.class);

                 Map<String,String> params = new HashMap<String,String>();
                 params.put(PackagesResourceConfig.PROPERTY_PACKAGES,"unbound");
                 serve("/*").with(GuiceContainer.class,params);
             }
         }
     });

遗憾的是,我无法获得关于泽西资源注册过程的更多信息.

任何帮助将不胜感激.当然,如果需要,我可以提供额外的信息!
谢谢.

解决方法

我回答自己的问题变得相当标准,但是我发现了一个Guice 2 Thread的答案,但幸运的是它与Guice 3和Jersey 1.8
/*
* The following line will scan ausbdsoccer.server.resources package for Jersey Resources
*/
params.put("com.sun.jersey.config.property.packages","ausbdsoccer.server.resources");

你去了

不要忘了将params地图传给你的GuiceContainer.class!

java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException

java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException

我使用球衣(1.8),maven和hibernate时遇到了问题.

我收到此错误(“完整”日志)

INFO: Scanning for root resource and provider classes in the packages:
      de.tum.fml.idp.backend.rest
    Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
    INFO: Root resource classes found:
      class de.tum.fml.idp.backend.rest.PlayerWebService
      class de.tum.fml.idp.backend.rest.RestSample
    Dez 04,2013 2:29:40 PM com.sun.jersey.api.core.ScanningResourceConfig init
    INFO: No provider classes found.
    Dez 04,2013 2:29:41 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
    INFO: Initiating Jersey application,version 'Jersey: 1.8 06/24/2011 12:17 PM'
    Dez 04,2013 2:29:42 PM com.sun.jersey.spi.inject.Errors processErrorMessages
    SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
      SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayerIDs() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type
      SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayers() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWe
bService.createuser() can produce the same media type
    2013-12-04 14:29:42.010:WARN:/0.1-SNAPSHOT:unavailable
    com.sun.jersey.spi.inject.Errors$ErrorMessagesException
        at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
        at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766)
        at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488)
        at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318)
        at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
        at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
        at javax.servlet.GenericServlet.init(GenericServlet.java:241)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:477)
        at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:293)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:730)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:254)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1240)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:689)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:482)
        at org.eclipse.jetenter code herety.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:172)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:229)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
        at org.eclipse.jetty.server.Server.doStart(Server.java:281)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.codehaus.cargo.container.jetty.internal.JettyExecutorThread.run(JettyExecutorThread.java:69)
        2013-12-04 14:29:42.022:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/Stefan/DropBox/Studium/TUM/IDP/repo/backend/backend/target/cargo/configurations/jetty7x/cargocpc.war!/ to C:\Users\Stefan\AppData\Local\Temp\jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-\webapp
        2013-12-04 14:29:42.052:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/cargocpc,file:/C:/Users/Stefan/AppData/Local/Temp/jetty-0.0.0.0-8080-cargocpc.war-_cargocpc-any-/webapp/},C:\Users\Stefan\DropBox\Studium\TUM\IDP\repo\backend\backend\target\cargo\configurations\jetty7x\cargocpc.war
        2013-12-04 14:29:42.108:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

这是我用过的代码:

package de.tum.fml.idp.backend.rest;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

import de.tum.fml.idp.backend.rest.interfaces.PlayerManagment;
import de.tum.fml.idp.gamelog.backend.beans.Player;
@Path("/players")
public class PlayerWebService implements PlayerManagment {

    @Override
    @GET
    public Player createuser() {
        // Todo Auto-generated method stub
        return new Player();
    }

    @Override
    @POST
    public Player updatePlayer(Player player) {
        // Todo Auto-generated method stub
        return new Player();
    }

    @Override
    @GET
    @Path("/getPlayer/{param}")
    public Player getPlayer(@PathParam("param") int id) {
        // Todo Auto-generated method stub
        Player bla = new Player();
        bla.setId(-1);
        return bla;
    }

    @Override
    @GET
    public List<Player> getPlayers() {
        // Todo Auto-generated method stub
        return null;
    }

    @Override
    @GET
    public List<Integer> getPlayerIDs() {
        // Todo Auto-generated method stub
        return null;
    }



}

和Player类.

package de.tum.fml.idp.gamelog.backend.beans;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OnetoMany;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.annotations.Entity;

//@XmlRootElement
public class Player {

//  @Id 
//  @GeneratedValue
    private int id; 

    private String name;

    private String password;

    Avatar avatar;

    private PlayerProperties properties; 

    private int tempId;

    private int availablePropertyPoints; 

    private int totalPropertyPoints;

//  @OnetoMany
    private ArrayList<AchievedAchievment> achievments;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getpassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Avatar getAvatar() {
        return avatar;
    }

    public void setAvatar(Avatar avatar) {
        this.avatar = avatar;
    }

    public PlayerProperties getProperties() {
        return properties;
    }

    public void setProperties(PlayerProperties properties) {
        this.properties = properties;
    }

    public int getTempId() {
        return tempId;
    }

    public void setTempId(int tempId) {
        this.tempId = tempId;
    }

    public int getAvailablePropertyPoints() {
        return availablePropertyPoints;
    }

    public void setAvailablePropertyPoints(int availablePropertyPoints) {
        this.availablePropertyPoints = availablePropertyPoints;
    }

    public int getTotalPropertyPoints() {
        return totalPropertyPoints;
    }

    public void setTotalPropertyPoints(int totalPropertyPoints) {
        this.totalPropertyPoints = totalPropertyPoints;
    }

    public List<AchievedAchievment> getAchievments() {
        if(achievments == null)
            achievments = new ArrayList<AchievedAchievment>();

        return achievments;
    }

    public void setAchievments(ArrayList<AchievedAchievment> achievments) {
        this.achievments = achievments;
    }

    public void addAchievment(AchievedAchievment aa1) {
        if(achievments == null)
            achievments = new ArrayList<AchievedAchievment>();

        if(aa1.getPlayer() != this)
            throw new RuntimeException("Player: Achievment was already given to   another user");
        else 
            achievments.add(aa1);

    }
}

有谁知道为什么这不起作用?我已经尝试过评论几乎所有的东西,几个不同的maven依赖,但它不会开始工作.

“玩具示例”工作正常…: – /

我希望你能帮帮我,

KR,

解决方法

错误消息告诉您出了什么问题(您必须查找以SEVERE开头的行):

SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayerIDs() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type

SEVERE: Producing media type conflict. The resource methods public java.util.List de.tum.fml.idp.backend.rest.PlayerWebService.getPlayers() and public de.tum.fml.idp.gamelog.backend.beans.Player de.tum.fml.idp.backend.rest.PlayerWebService.createuser() can produce the same media type

这意味着您有相同路径的多个GET端点(在类’annotation(“/ players”)中定义),产生相同的媒体类型:

@GET
public List<Player> getPlayers()

@GET
public Player createuser()

@GET
public List<Integer> getPlayerIDs()

在向玩家发送GET请求时,泽西岛无法判断您要呼叫哪一个.您需要为其中一些端点定义单独的路径.

如果您的意图实际上是让它们具有相同的路径,则需要添加具有不同媒体类型的@Produces注释,因此Jersey可以根据Accept标头选择正确的方法.如果请求正文请求,您也可以使用@Consumes注释.否则,您需要添加@Path注释或更改方法的请求类型,以避免此冲突.

关于独立 Servlet 5 容器中的 JAX-RS (Jersey) API 无法启动servlet-api jar not loaded的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于HttpServlet类和与Jersey一起使用时的困惑、HTTP状态500 javax.servlet.ServletException:Servlet [Jersey RESTful App]的Servlet.init()抛出异常java.lang.IllegalArgumentException、java – Guice Jersey:添加所有的资源和提供者,而不需要绑定到Jersey Servlet、java – Jersey:com.sun.jersey.spi.inject.Errors $ErrorMessagesException等相关内容,可以在本站寻找。

本文标签: