tomcat10部署springboot项目404

今天在把springboot项目打成war包部署到tomcat 10时所有的路径都404了,访问不到,同样的war部署到tomcat8就可以了。后来研究了一下发现是tomcat10 servlet相关的api做了较大的改变。

首先我们先来看tomcat官网上的一段说明。

Users of Tomcat 10 onwards should be aware that, as a result of the move from Java EE to Jakarta EE as part of the transfer of Java EE to the Eclipse Foundation, the primary package for all implemented APIs has changed from javax.* to jakarta.*. This will almost certainly require code changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later. A migration tool is under development to aid this process.

 这段说明说得已经很清楚了,由于从java ee迁移到了jakarta ee,很多api的包名都从javax.*变成了jakarta.*,所以如果你在tomcat10中还是使用诸如import javax.servlet.http.HttpServlet,那就不起作用了,要改成
import jakarta.servlet.http.HttpServlet。

 

虽然上面已经说得很明确了,我们还是做个试验来看看吧。

新建一个普通的java web项目(maven项目),为了方便,本文采用注解方式来定义servlet,需要servlet3+的支持,所以注意web.xml的配置要使用servlet3.0以上版本。

web.xml如下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

pom.xml中引入servlet依赖。

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

然后写一个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;

@WebServlet(urlPatterns = "/test1")
public class MyServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("test1");
    }
}

然后将应用部署到tomcat8,启动,访问,可以看出我们可以正常访问。

然后我们什么代码也不改,将应用部署到tomcat10,启动,访问结果如下

可以看到部署到tomcat10后404了。

我们把上面引用的javax.servlet-api删除,改为引用下面的jar包

    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>5.0.0</version>
    </dependency>

然后重新写一下servlet,注意我们的代码几乎是一样的,只是javax全都变成了jakarta

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

@WebServlet(urlPatterns = "/test2")
public class Servlet5 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("test2");
    }
}

然后再部署到tomcat10,可以成功访问了。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值