基本上,我想在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?
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会话复制之前。