我終于找到了使用 Docker 的動力:我嘗試在 docker 容器上運行的 tomcat 上部署一個基本的“hello-world”servlet。
當我在由 intelliJ 啟動的 Tomcat 上運行它時,這個 servlet 作業得很好。
但是當我將它與 Docker 一起使用時,使用這個 Dockerfile
FROM tomcat:latest
ADD example.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
我構建/啟動影像/容器:
docker build -t example .
docker run -p 8090:8080 example
index.jsp 在 localhost:8090/example/ 處正確顯示,但在嘗試訪問 localhost:8090/example/hello-servlet 處的 servlet 時出現 404
同時,當我的非dockerized tomcat運行時,我可以訪問localhost:8080/example/hello-servlet,并且運行良好。
這是servlet代碼:
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() {
}
}
我錯過了什么?
uj5u.com熱心網友回復:
自 2021 年 8 月 31 日(本次提交)起,Docker 映像tomcat:latest使用 Tomcat 10(請參閱可用標簽串列)。
您可能知道,使用javax.*命名空間的軟體在 Jakarta EE 9 服務器上不起作用,例如 Tomcat 10(參見例如這個問題)。所以:
- 如果是新專案,遷移到
jakarta.*命名空間并在Tomcat 10或更高版本上測驗一切, - 如果它是一個遺留專案,請使用另一個 Docker 鏡像,例如
tomcat:9標簽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/345856.html
