无法在从 Dockerfile 运行 Web 应用程序时将上下文路径设置为 /

问题描述 投票:0回答:1

我只创建了一个最小的 Web 应用程序(出于学习目的),但当我从 Dockerfile 映像运行它时,我无法设置上下文路径(但当我不以这种方式使用它时,它工作得很好)。在我的多阶段 Dockerfile 中,我构建了应用程序,然后在 tomcat 下使用它。这是用于此目的的线路:

COPY --from=builder /app/target/*.war $CATALINA_HOME/webapps/

这是我的 servlet 的代码:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/firstTest")
public class FirstServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");//setting the content type
        PrintWriter pw=response.getWriter();//get the stream to write the data
        //writing html in the stream
        pw.println("<html>");
        pw.println("<body>");
        pw.println("Welcome to servlet");
        pw.println("</body>");
        pw.println("</html>");
        pw.close();//closing the stream
    }
}

我的项目名称是 servletjdbc,因此它会生成一个战争和一个版本为 servletjdbc-1.0-SNAPSHOT 的地图。我可以用 http://localhost:8080/servletjdbc-1.0-SNAPSHOT/http://localhost:8080/servletjdbc-1.0-SNAPSHOT/firstTest

但我想用 http://localhost:8080http://localhost:8080/firstTest

我尝试在我的 web.xml 中放入如下内容:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
</context-param>

,但我收到消息: 此处不允许使用元素参数名称 此处不允许使用元素参数值

我的 web.xml 现在是这样的:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">

</web-app>

我的错误可能是什么?

如果我可以提供任何必要的附加信息,请告诉我。

非常感谢您提前提供的帮助。

maven servlets web-applications java-11 tomcat9
1个回答
0
投票

如果您想将应用程序部署到

/
上下文,那么您应该将 war 文件重命名为
ROOT.war
。这是部署到根应用程序上下文的简单方法。

IntelliJ IDEA 使用的另一种方法是更改 Tomcat 的 server.xml 文件。这就是我的答案这里

如果您想将上下文路径设置为根目录,则

<context-param>
是无用的。错误是您将其放置在错误的位置或 DTD 引用不正确。如果您想阅读有关它的详细说明,请阅读this

© www.soinside.com 2019 - 2024. All rights reserved.