我正在尝试创建一个web应用程序,并希望在提交HTML表单时打开一个java。servlet不断地提供错误(大部分是404错误),我已经尝试过我看到的每一个解决方案,但它们都不起作用。
package com.example.kahootwebapp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println("<html><body>");
writer.println("<h1>This is a test</h1>");
writer.println("</html></body>");
}
}<form name="HelloServlet" method="post" action="HelloServlet">
<label id="label" for="input">Enter kahoot account email: </label><input type="text" id="input" name="username"/>
</form>我正在Apache的10.0.16版本上运行服务器。目前,我只是尝试让servlet在没有错误的情况下打开和运行,然后计划将代码添加到其中。谢谢。
发布于 2022-02-19 06:07:05
雅加达EE过渡
Servlet代码使用的是javax.*包名。这只适用于Tomcat 9和更早版本。将这样的Servlet部署到Tomcat 10+将失败。
Tomcat 10+使用jakarta.*包。
此包名称更改与Java EE技术从Oracle转移到Eclipse Foundation有关。在那里,这项技术被重新命名为雅加达EE。网络上的快速搜索将提供许多关于过渡的文章和视频。
你需要在使用旧式命名和现代命名之间做出选择。对于较大的复杂项目,您可能希望继续老派,同时将过渡推迟到稍后的时间。如果开始一个新的项目,我建议考虑现代命名。但是,如果您需要的重要库已经在使用新命名的版本中发布,请进行研究。
如果您选择现代命名,调整您的POM匹配。您正在编写一个从Servlet中的类扩展的Servlet类。因此,您的IDE和编译器需要该Servlet的副本才能编译。一定要用scope of provided标记POM,这样就不会在最终的Servlet工件(可能是WAR文件)中捆绑一个副本。您的Servlet容器(如Tomcat或Jetty )提供了自己的Servlet副本。请参见https://stackoverflow.com/q/1370414/642706,但请调整这些答案以使用适当的雅加达命名。我在调整后添加了答案在那里。
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>Tomcat版本
要知道Tomcat 9和10.0.*是等价的产品,并行开发。期待相同的特性和性能。包的命名是主要的区别。这两个版本的Tomcat分别实现Servlet规范版本4.3和5。Servlet 5规范与4.3完全相同,但从Oracle和Java到和雅加达的合法名称更改除外。
Tomcat10.1.x目前正在开发中,以支持雅加达Servlet 6规范。Tomcat10.1.x现在可以作为alpha预发布版提供。Jakarta 6规范将于2022年晚些时候定稿。
发布于 2022-11-02 21:53:10
我搜索了很多次,但最后注意到Bourque的解释是正确的,因为您使用的是java雅加达,所以需要使用tomcat 10+。就这样!:)
https://stackoverflow.com/questions/71180424
复制相似问题