初学Servlet时使用IDEA中 利用Tomcat 10.0.7 构建类servlet报错:类HelloServlet不是Servlet。解决方法

先直接来看我的错误:
在这里插入图片描述
原始代码为:
1、利用servlet跳转的java代码如下:

package com.feifei.servlet;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * Author: feifei
 * Date: 2021/6/30 11:39
 * Desc: 初识servlet
 */
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//        ServletInputStream inputStream = req.getInputStream();//输入流
//        ServletOutputStream outputStream = resp.getOutputStream();//输出流
        System.out.println("进入doGet方法");
        PrintWriter writer = resp.getWriter();
        writer.print("Hello,Servlet~");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req,resp);
    }
}

2、然后web.xml里的servlet配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
         version="4.0"
         metadata-complete="true">
    
    <!--注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.feifei.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--Servlet请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
</web-app>

3、pom.xml中引入的dependency

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
    </dependency>
</dependencies>
<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>10.0.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <version>10.0.7</version>
    </dependency>

最后,在IDEA中运行Tomcat,浏览器自动跳转到index.jsp界面(我的是:http://localhost:8080/s01/),再手动敲到Servlet路径下(http://localhost:8080/s01/hello),出现了开头的问题!

解决问题
原因:Tomcat10版本太新

查找资料发现
“这是因为使用了最新的tomcat10,而tomcat10有个最大的变动就是Tomcat 10 m1将JavaEE也换成了Jakarta® EE。Jakarta® EE较以前的JavaEE有一个非常非常重要的更新:包名不再是"javax.servlet.“而是改成了"jakarta.servlet.”

2种解决方案

  1. 将Tomcat版本到10以下,比如Tomcat9;
  2. 将pom.xml中改为最新的依赖,这样javax就会变为jakarta。

这里选择第二种方法,解决流程如下

  1. 去maven Repository中搜索最新的dependency,先是servlet-api;
    在这里插入图片描述
    注意:这里选中第四个,而不是第一个,因为第四个版本最新(2021),然后进去找到10.0.7版本。其dependency配置如下:
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>10.0.7</version>
</dependency>
  1. 然后是jsp-api
    在这里插入图片描述
    依旧是第四个最新的那个(2021),点进去找到10.0.7版本的,代码如下:
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>10.0.7</version>
</dependency>

3、把这两个代码放到项目的pom中,覆盖掉原来那两个dependency,等待maven更新;
最后还有一步就是java类中导入的javax包要收到改为jakarta;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

4、重新运行Tomcat,跳转到网页后手动敲到servlet路径,修改完后截图如下
在这里插入图片描述

<远方有灯,脚下有路,眼前有光>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值