java - Java ee Servlet 正在处理 AbstractMethodError
问题描述
添加第二个 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 你能告诉我哪里有问题吗?提前致谢。
解决方案
首先,您需要删除不必要的依赖项,因为您可以使用 maven。通过在项目根目录中打开终端来执行以下命令。
- mvn 清洁
- 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>
推荐阅读
- python - 使用列表中的字符串值作为整数并显示它们
- python - 加载 google-coral example-object-tracker 时无法为圈构建轮子
- configuration - 在 .Net Core 5.0 应用程序中 Swagger 的正确配置有问题...有效,但有些问题
- java - 如何修复网络抓取值的无限打印?
- python - 如何从 JSON 文件中选择一个随机对象然后删除它?
- react-native - 在 Android 上处理 Web 浏览器关闭
- python - 在 GoDaddy 共享主机上托管的 Flask 应用程序上找不到 GLIBC
- android - Android 无法从 firebase 读取数据收集
- react-native - 使用 React Native 检测时间戳并使其在文本中可点击,就像 youtube 所做的那样
- laravel - 如何删除 Laravel cookie,使其即使在同一个请求中也消失了