【问题标题】:Java ee Servlet is handling AbstractMethodErrorJava ee Servlet 正在处理 AbstractMethodError
【发布时间】:2019-11-11 22:40:31
【问题描述】:

添加第二个 servlet 后出现异常:

java.lang.abstractmethoderror: receiver class com.sun.jersey.core.spi.factory.responseimpl does not define or inherit an implementation of the resolved method abstract getstatusinfo()ljavax/ws/rs/core/response$statustype; of abstract class javax.ws.rs.core.response.

我发现问题出在我的 pom.xml 中的依赖项中,但我不知道在哪里。 无论如何,我会给你一些代码。 首先,我的 servlet

    package vs.api.serlvets;

import com.sun.jersey.api.NotFoundException;
import vs.api.database.UserDBO;
import vs.api.repository.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

@WebServlet(name = "LogInServlet", urlPatterns = { "/LogInUser"})
public class LogInServlet extends HttpServlet
{
    main.java.vs.api.database.DatabaseManager databaseManager;
    UserDBO userDBO;
    HttpSession session;
    public void init() throws ServletException
    {
        databaseManager = new main.java.vs.api.database.DatabaseManager();
        try
        {
            userDBO = new UserDBO(databaseManager.dataSource.getConnection());
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        session = request.getSession();
        session.removeAttribute("errorLogIn");
        PrintWriter out = response.getWriter();
        String email = "";
        String password = "";
        User user = new User();
        try
        {
            email = request.getParameter("inputEmail");
            password = request.getParameter("inputPassword");
            user = userDBO.get(email, password);
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (NotFoundException e)
        {
            session.setAttribute("errorLogIn", e.getMessage());
            response.sendRedirect(request.getHeader("Referer"));
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        out.print("User: " + user.getName());
    }

    @Override
    public void destroy()
    {
        userDBO.exit();
    }
}

    package vs.api.serlvets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.jersey.api.NotFoundException;
import main.java.vs.api.database.DatabaseManager;
import vs.api.database.IDBO;
import vs.api.database.UserDBO;
import vs.api.repository.User;

@WebServlet(description = "RegistrationServlet", urlPatterns = { "/RegisterUser"})
public class RegisterUserServlet extends HttpServlet
{
    DatabaseManager databaseManager;
    IDBO userDBO;
    public RegisterUserServlet()
    {
        super();
    }

    public void init() throws ServletException 
    {
        databaseManager = new DatabaseManager();
        try 
        {
            userDBO = new UserDBO(databaseManager.dataSource.getConnection());
        } 
        catch (SQLException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        User user = new User();
        user.setName(request.getParameter("inputFirstName"));
        user.setSurname(request.getParameter("inputLastName"));
        user.setEmail(request.getParameter("inputEmail"));
        user.setPassword(request.getParameter("inputPassword"));
        try 
        {
            userDBO.add(user);
        } 
        catch (SQLException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IllegalArgumentException e)
        {
            HttpSession session = request.getSession();
            session.setAttribute("errorUserExist", e.getMessage());
            response.sendRedirect(request.getHeader("Referer"));
        }
        catch(AbstractMethodError e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void destroy()
    {
        userDBO.exit();
    }
}

其次是我的 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.drimtim</groupId>
  <artifactId>virtualspace</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>virtualspace Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>servlet-api</artifactId>
      <version>6.0.53</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.19</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.18</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>virtualspace</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>10</source>
          <target>10</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

最后,我的 web.xml

    <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>Registration User Servlet</servlet-name>
    <servlet-class>vs.api.serlvets.RegisterUserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Registration User Servlet</servlet-name>
    <url-pattern>/RegisterUser</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>LogIn User Servlet</servlet-name>
    <servlet-class>vs.api.serlvets.RegisterUserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LogIn User Servlet</servlet-name>
    <url-pattern>/LogInUser</url-pattern>
  </servlet-mapping>

  <error-page>
    <error-code>404</error-code>
    <location>/AppExceptionHandler</location>
  </error-page>

  <error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/AppExceptionHandler</location>
  </error-page>
</web-app>

这是我所有的 pom.xml 你能告诉我哪里有问题吗? 提前致谢。

【问题讨论】:

    标签: java servlets jersey


    【解决方案1】:

    首先,您需要删除不必要的依赖项才能使用 maven。 通过在项目根目录中打开终端来执行以下命令。

    1. mvn clean
    2. mvn 依赖:分析

    它将向您显示未使用的和必需的依赖项。

    您也可以尝试通过更改您的 pom.我认为您只需要以下依赖项。

        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
          <scope>provided</scope>
        </dependency>
    
       <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.18</version>
        </dependency>
    

    【讨论】: