先直接来看我的错误:
原始代码为:
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种解决方案
- 将Tomcat版本到10以下,比如Tomcat9;
- 将pom.xml中改为最新的依赖,这样javax就会变为jakarta。
这里选择第二种方法,解决流程如下
- 去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>
- 然后是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路径,修改完后截图如下
<远方有灯,脚下有路,眼前有光>