我正在尝试从命令行编译和部署一个简单的 Web 应用程序。
来自 Apache Tomcat 的 servlet-api.jar 不编译我的 java 文件,但来自 maven 中央存储库的 javax.servlet-api-4.0.1 编译成功。即便如此,当我部署应用程序并尝试在浏览器中使用它时,我还是收到了错误消息。
我在用:
Java文件:
package com.example.controllers;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class BeerSelect extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice <br>");
String c = request.getParameter("color");
out.println("<br>Got beer color " + c);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 servlet-api.jar 编译它时,我得到:
public class BeerSelect extends HttpServlet {
^
symbol: …Run Code Online (Sandbox Code Playgroud) 我一直在徒劳地尝试实现 tomcat 9 的 jakarta servlet,而不是以前的 javax.servlet 实现(因为我的理解是 jakarta 包是前进的方向)。问题是,当我将浏览器指向我的 servlet 的 url 时,我收到以下错误...
java.lang.ClassCastException: class cti.nm.web.Index cannot be cast to class javax.servlet.Servlet (cti.nm.web.Index is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @48c76607; javax.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @621be5d1)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:432)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:832)
Run Code Online (Sandbox Code Playgroud)
问题已经很明显了。Tomcat 正在尝试将我的 jakarta.servlet.http.HttpServlet 转换为 javax.servlet.Servlet,这显然不起作用。我无法想象的是如何告诉它 servlet 实际实现的类。
类本身被声明为...
package cti.nm.web;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class Index extends …Run Code Online (Sandbox Code Playgroud) 我的第一个 Web 应用程序有问题。我使用 IntelliJ 作为 IDE,使用 Tomcat 作为 Web 服务器。我尝试访问的每个 servlet 都会抛出 404 错误。即使我复制了一些 youtube 教程,这似乎也很有魅力。
表单中的按钮将我发送到:http://localhost:8080/IUBHQuiz/login
你能告诉我有什么问题吗?我快疯了。
登录.java
package com.example.IUBHQuiz;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.sql.*;
@WebServlet("/login")
public class login extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String email = request.getParameter("fmail");
String pass = request.getParameter("fpw");
if(email.equals("j") && pass.equals("j"))
{
RequestDispatcher rs = request.getRequestDispatcher("/main.jsp");
rs.forward(request, response);
}
else
{
out.println("Username or Password incorrect");
RequestDispatcher …Run Code Online (Sandbox Code Playgroud) 我正在尝试实例化我的 servlet,但收到此 500 状态错误。我读过其他帖子,但建议的解决方案似乎都不适用于我的错误。
我的 SampServlet 类
package com.example;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "SampServlet", value = "/SampServlet")
public class SampServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//define that we want to send HTML to our browser
response.setContentType("text/html");
// create our PrintWriter that allows us to write out text as well …Run Code Online (Sandbox Code Playgroud)