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

如何将Jersey REST Web服务添加到嵌入式tomcat中?

吕德业
2023-03-14

基本上,我想在Tomcat 8嵌入式中运行一些Rest类。我不确定如何将它们添加到我正在创建的tomcat嵌入式实例中。所以这就是我所做的。这里只有泽西班:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import static javax.ws.rs.core.MediaType.*;

@Path("register")
public class RegisterRestAPI {

    private MerchantRegistrationService merchantRegistrationService;

public RegisterRestAPI(MerchantRegistrationService merchantRegistrationService) {
    this.merchantRegistrationService = merchantRegistrationService;
}

    @GET
    @Produces(TEXT_PLAIN)
    public String register() {
        return "Hello!!!!";
    }
}

下面是我创建Tomcat的类:

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer;

import javax.servlet.ServletException;
import java.io.File;


public class TomcatServer {

private MerchantRegistrationService merchantRegistrationService;

public TomcatServer(MerchantRegistrationService merchantRegistrationService) 
{
    this.merchantRegistrationService = merchantRegistrationService;
}


public void start() throws ServletException, LifecycleException {
    String webappDirLocation = "restui/src/main/webapp/";
    Tomcat tomcat = new Tomcat();

    String webPort = System.getenv("PORT");
    if(webPort == null || webPort.isEmpty()) {
        webPort = "8080";
    }

    tomcat.setPort(Integer.valueOf(webPort));
    Context context = tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());

    tomcat.addServlet(context,"jersey-container-servlet",resourceConfig());
    context.addServletMapping("/register", "registration rest");

    tomcat.start();
    tomcat.getServer().await();
}

private ServletContainer resourceConfig() {
    return new ServletContainer(new ResourceConfig().register(new 
        RegisterRestAPI(merchantRegistrationService)));
    }
}

正如你看到的,带问号的部分给我制造麻烦。还有一个lats问题,这就是我应该添加这些类以在服务器上运行的方式,对吗?

更新我添加了Michal Gajdos建议的行,但在启动时我得到:

线程“main”java中出现异常。lang.IllegalArgumentException:Servlet映射指定了一个未知的Servlet名称,该名称在组织中注册。阿帕奇。卡塔琳娜。果心标准上下文。addServletMapping(StandardContext.java:3160)位于org。阿帕奇。卡塔琳娜。果心标准上下文。com上的addServletMapping(StandardContext.java:3139)。加密。restui。TomcatServer。在com上启动(TomcatServer.java:44)。加密。汇编程序。靴子main(Boot.java:22)位于sun。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:57)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗。反思。方法在com上调用(Method.java:606)。intellij。rt.执行。应用阿普曼。main(AppMain.java:120)

我应该如何调用servlet?

共有1个答案

满自明
2023-03-14

ServletContainer扩展了HttpServlet,并可以传递到底层servlet容器,只需创建新实例:

new ServletContainer(new ResourceConfig(RegisterRestAPI.class));

您还可以在web中定义servlet。xml并将对该描述符的引用传递给Tomcat—与这里对Jetty的操作类似。

 类似资料:
  • 我已经搜索了这个问题,但我没有找到任何关于这个案例的东西。我发现了很多“如何将Spring Boot WAR部署到Tomcat”,但是没有关于用Spring Boot包装现有的Tomcat WAR的内容。 我正在尝试用Spring Boot“包装器”包装一个现有的WAR,这样就不必重新配置现有的代码库。这个解决方案不起作用,因为它依赖于在绝对位置可用的WAR,而我们正试图将“应用程序”WAR打包在

  • 问题内容: Spring Boot的嵌入式tomcat非常便于开发和部署。 但是,如果应该添加另一个(第三方)WAR文件(例如GeoServer)怎么办? 也许以下是正常过程: 安装普通的Tomcat服务器。 将Spring Boot应用程序构建为WAR文件,并将其添加到Tomcat的webapps文件夹中。 还将另一个(第三方)WAR文件添加到webapps文件夹。 但是,如果可以进行以下配置,

  • 我正在尝试加载一个“WAR”文件到Spring Boot的嵌入式tomcat服务器。为此,我找到了这样的答案:Spring Boot:如何向嵌入式Tomcat添加另一个WAR文件? 但是在我这样做之后,我发现在这个问题上已经问过的错误:用嵌入的Tomcat部署现有的war,但是没有一个满意的答案。 注意:我知道这是一个重复的问题(我把链接),但当时没有足够的声誉添加一个评论,或能力与作者私下联系,

  • 我试图加载一个"war"文件到Spring Boot的嵌入式tomcat服务器。为此,我找到了这个答案:Spring Boot:如何向嵌入式tomcat添加另一个WAR文件? 但在我这么做之后,我发现在这个问题上已经出现了同样的错误:使用嵌入式Tomcat部署现有的war,但没有令人满意的答案。 注意:我知道这可以被看作是一个重复的问题(我放了链接),但当时没有足够的声誉添加评论,或者没有能力私下

  • 环境 : Windows Eclipse Luna Service Release 2 (4.4.2) Tomcat 8 JDK 8 当我尝试使用

  • 请帮助我,如果有人设置tomcat会话复制之前。