问题描述
我正在介绍有关 servlet 的大学章节。这本书要求我复制一段代码并在cmd中运行它。它不会在 cmd 中运行,并且这一章模糊地解释了我如何安装 Java EE。这是代码和错误:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class NameServlet extends HttpServlet {
public static void main(String[] args) {
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws servletexception,IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body style=’background-color: lightyellow’>");
String name = "Wow,this servlet works great!!";
out.println("Name: " + name);
out.println("</body>");
out.println("</html>");
out.close();
}
public void doPost(HttpServletRequest request,IOException {
doGet(request,response);
}
}
错误:
解决方法
问题在于您使用的是 Apache Tomcat 10,它使用最新版本的 Jakarta EE(版本 9,Java EE 8 的后继版本)。 Jakarta EE 9 的重大变化是将其包的命名空间从 javax.*
切换为 jakarta.*
。
您要么需要:
- 使用 Apache Tomcat 9(或更早版本,或其他仍使用 Java EE 8 或更早版本和
javax.*
命名空间的 Java EE servlet 容器),或 - 切换到使用新的 Jakarta EE 命名空间(在您的情况下,包
jakarta.servlet
和jakarta.servlet.http
)。
如 Tomcat 10 download page 所述:
Tomcat 10 以后的用户应该知道,由于
从 Java EE 迁移到 Jakarta EE 作为 Java EE 迁移到的一部分
Eclipse Foundation,所有已实现 API 的主要包
已从 javax.*
更改为 jakarta.*
。这几乎肯定会
需要更改代码才能使应用程序从 Tomcat 9 迁移
以及更早的 Tomcat 10 及更高版本。