【问题标题】:Tomcat couldn't serve from a servlet bootstrapped by spring java configuration [duplicate]Tomcat无法从由spring java配置引导的servlet提供服务[重复]
【发布时间】:2022-01-22 21:07:16
【问题描述】:

这个Spring example 使用Java 配置来注册一个servlet。为了测试这一点,

  1. 添加最新的maven-war-plugin 以忽略丢失的web.xml,并且
<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>
  1. 发动战争,然后
  2. 创建一个Dockerfile 以使用Tomcat,并且
FROM tomcat

COPY example-05-dispatcher-servlet-code-configuration-2-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/
  1. 构建并运行一个容器,然后
docker build .
docker run -p 8080:8080 -it <image>
  1. /hello发送请求。
curl -4 -v -XGET http://localhost:8080/hello

但是,tomcat 没有找到控制器,这就是我得到的:

The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

我做错了什么,我该如何解决?

【问题讨论】:

  • Tomcat 没有找到 servlet 上下文(应用程序),因为它的前缀是 /example-05-dispatcher-servlet-code-configuration-2-1.0-SNAPSHOT/,而不是 /。将文件复制为 ROOT.war 以将您的应用程序部署到服务器的根目录。
  • 基本上tomcat 指的是一段时间以来的Tomcat 10。请改用tomcat:9 标签。
  • @PiotrP.Karwasz 它确实有效。谢谢!

标签: spring spring-mvc tomcat servlets


【解决方案1】:

我的猜测是你错过了应用程序的上下文路径,它是 /usr/local/tomcat/webapps/ 内包含爆炸的 WAR 的文件夹的名称。所以在你的情况下,请尝试:

curl -4 -v -XGET http://localhost:8080/example-05-dispatcher-servlet-code-configuration-2-1.0-SNAPSHOT/hello

如果你真的想通过http://localhost:8080/hello访问,你必须将WAR部署到/usr/local/tomcat/webapps/ROOT/。由于 tomcat docker images 已经有一个欢迎页面应用程序部署到此上下文,您需要先删除此应用程序并将您的 WAR 重命名为 ROOT.war,例如:

FROM tomcat
RUN rm -rvf /usr/local/tomcat/webapps/ROOT
COPY example-05-dispatcher-servlet-code-configuration-2-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

【讨论】:

  • 感谢您的宝贵时间!不幸的是,curl -4 -v -XGET http://localhost:8080/example-05-dispatcher-servlet-code-configuration-2-1.0-SNAPSHOT/hello 也给了我404 NOT FOUND。这快把我逼疯了,哈哈。
猜你喜欢
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
相关资源
最近更新 更多