1 import javax.servlet.ServletException; 2 import javax.servlet.http.HttpServlet; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 import java.io.IOException; 6 import java.io.PrintWriter; 7 8 public class HelloServlet extends HttpServlet { 9 @Override 10 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 11 12 //响应的类型 13 response.setContentType("text/html"); 14 //获取响应的输出流 15 PrintWriter out = response.getWriter(); 16 out.println("<html>"); 17 out.println("<head>"); 18 out.println("<title>Hello World!</title>"); 19 out.println("</head>"); 20 out.println("<body>"); 21 out.println("<h1>Hello World!</h1>"); 22 out.println("</body>"); 23 out.println("</html>"); 24 } 25 26 @Override 27 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 28 doGet(req,resp); 29 } 30 }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0" metadata-complete="true">
<!-- 注册Servlet--> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <!-- 一个Servlet对应一个mapping(映射)--> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <!-- 路径--> <url-pattern>/helloServlet</url-pattern> </servlet-mapping> </web-app>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 下面是作用域。--> <!-- <scope>provided</scope>--> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> <!-- <scope>provided</scope>--> </dependency>
然后就这样,我运行在IDEA中运行Tomcat,浏览器自动跳转到index.jsp界面(我的是http://localhost:8080/javawebMaven01/),然后再手动敲到Servlet路径下(http://localhost:8080/javawebMaven01/helloServlet)。然后就出现了开头的问题。
原因:Tomcat10版本太新。
这是因为使用了最新的tomcat10,而tomcat10有个最大的变动就是Tomcat 10 m1将JavaEE也换成了Jakarta? EE
Jakarta? EE较以前的JavaEE有一个非常非常重要的更新:包名不再是"javax.servlet.“而是改成了"jakarta.servlet.”
tomcat10把 javax.servlet 都改为了jakarta.servle(这个方法我用了,只会报错,可能是只是改了包名,但其实仓库里没有这个包)
但是那两个博主说的不全,我最后想到的是改为最新的dependency,这样javax就会自己变为jakarta。所以还是去maven Repository中搜我们需要的最新的dependency,先是servlet-api:
这里选中第四个,而不是第一个,因为第四个最新(2021),然后进去找到10.0.4版本的。其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.4</version> </dependency>
然后是jsp-api:
依旧是第四个最新的那个(2021),点进去找到10.0.4版本的,代码如下:
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jsp-api</artifactId> <version>10.0.4</version> </dependency>
把这两个代码放到项目的pom中,覆盖掉原来的那两个dependency,等待maven更新就好。
然后最会还有一步就是你写的那个Java类中导入到javax包要手动改为jakarta:
import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;
最会再运行Tomcat,跳转到网页后手动敲到你的servlet路径那,我修改完后截图如下:
初学Servlet时使用IDEA中 利用Tomcat 10.0.4 构建类servlet报错
原文:https://www.cnblogs.com/workingsugar/p/14604127.html