简体   繁体   English

Java ee Servlet 正在处理 AbstractMethodError

[英]Java ee Servlet is handling AbstractMethodError

After add second servlet I am getting Exception:添加第二个 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.

I figure out that the problem is in dependencies in my pom.xml but I don't have any idea where.我发现问题出在我的 pom.xml 中,但我不知道在哪里。 Anyway, I gonna forward you some codes.无论如何,我会给你一些代码。 First, my servlets一、我的servlets

    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();
    }
}

And second my pom.xml第二个我的 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>

In end, my web.xml最后,我的 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>

This is my all pom.xml Could you say me where is problem?这是我所有的 pom.xml 你能说我哪里有问题吗? Thanks in advance.提前致谢。

First you need to remove unnecessary dependencies for that you can use maven.首先,您需要删除不必要的依赖项,因为您可以使用 maven。 Execute below commands by opening terminal in your project root directory.通过在项目根目录中打开终端来执行以下命令。

  1. mvn clean mvn 清洁
  2. mvn dependency:analyze mvn 依赖:分析

It will show you the unused and required dependencies.它将向您显示未使用的和必需的依赖项。

Also you can try by changing your pom.你也可以尝试改变你的pom。 i think you only need following dependencies.我认为您只需要以下依赖项。

    <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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM