相关疑难解决方法(0)

Servlet 5.0 JAR 在 javax.servlet.* 上引发编译错误,但 Servlet 4.0 JAR 不会

我正在尝试从命令行编译和部署一个简单的 Web 应用程序。

来自 Apache Tomcat 的 servlet-api.jar 不编译我的 java 文件,但来自 maven 中央存储库的 javax.servlet-api-4.0.1 编译成功。即便如此,当我部署应用程序并尝试在浏览器中使用它时,我还是收到了错误消息。

我在用:

  • javac 11.0.8
  • Apache Tomcat 10.0 (servlet-api.jar 5.0)

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 servlets compiler-errors

5
推荐指数
1
解决办法
2344
查看次数

Tomcat 将 servlet 转换为 javax.servlet.Servlet 而不是 jakarta.servlet.http.HttpServlet

我一直在徒劳地尝试实现 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)

tomcat servlets classcastexception maven

5
推荐指数
1
解决办法
6529
查看次数

Tomcat 10.0.4 不会加载带有 404 错误的 servlet(@WebServlet 类)

我的第一个 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)

java tomcat servlets intellij-idea tomcat10

4
推荐指数
2
解决办法
1625
查看次数

Tomcat 10 抛出 java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet

我正在尝试实例化我的 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)

tomcat servlets

3
推荐指数
1
解决办法
3899
查看次数