首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >码头上的tomcat上的.war,servlet上的404上

码头上的tomcat上的.war,servlet上的404上
EN

Stack Overflow用户
提问于 2021-11-02 05:17:02
回答 1查看 772关注 0票数 1

我终于找到了使用Docker的动机:我尝试在运行在码头容器上的tomcat上部署一个基本的"hello-world“servlet。

当我在由intelliJ启动的Tomcat上运行它时,这个servlet工作得很好。

但是当我和Docker一起使用它时,使用这个Dockerfile

代码语言:javascript
运行
复制
FROM tomcat:latest
ADD example.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

然后构建/启动映像/容器:

代码语言:javascript
运行
复制
docker build -t example .

docker run -p 8090:8080 example

在localhost:8090/ index.jsp /上正确地显示了该servlet,但是当我试图访问localhost的servlet时,我得到了一个404 :8090/index.jsp/hello-servlet。

同时,当我的非dockerized运行时,我可以访问localhost:8080/例/hello-servlet,并且运行良好。

以下是servlet代码:

代码语言:javascript
运行
复制
package io.bananahammock.bananahammock_backend;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

    public void destroy() {
    }
}

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 07:19:33

自2021年8月31日(此承诺)以来,Docker映像tomcat:latest使用Tomcat 10 (见可用标签列表)。

正如您可能知道的那样,使用javax.*命名空间的软件不能在Jakarta 9服务器上工作,比如Tomcat 10 (参见这个问题)。因此:

  • 如果它是一个新项目,则迁移到jakarta.*命名空间并测试Tomcat 10或更高版本上的所有内容,
  • 如果它是一个遗留项目,请使用另一个Docker映像,例如tomcat:9标记。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69805687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档