实例化 servlet 类 org.glassfish.jersey.servlet.ServletContainer 时出错

Posted

技术标签:

【中文标题】实例化 servlet 类 org.glassfish.jersey.servlet.ServletContainer 时出错【英文标题】:Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer 【发布时间】:2016-06-01 11:54:04 【问题描述】:

您好 正在尝试编写一个简单的 REST Web 服务。并按照下面的教程: http://www.tutorialspoint.com/restful/index.htm

但我得到了 HTTP 状态 500 -

例外:

<body>
        <h1>HTTP Status 500 - Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer</h1>
        <div class="line"></div>
        <p>
            <b>type</b> Exception report
        </p>
        <p>
            <b>message</b>
            <u>Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer</u>
        </p>
        <p>
            <b>description</b>
            <u>The server encountered an internal error that prevented it from fulfilling this request.</u>
        </p>
        <p>
            <b>exception</b>
        </p>
        <pre>javax.servlet.ServletException: Error instantiating servlet class org.glassfish.jersey.servlet.ServletContainer
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)
</pre>
        <p>
            <b>root cause</b>
        </p>
        <pre>java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

以下是代码(与教程基本相同)

package com.abhi;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/UserService")
public class UserService 

   UserDao userDao = new UserDao();

   @GET
   @Path("/users")
   @Produces(MediaType.APPLICATION_XML)
   public List<User> getUsers()
      return userDao.getAllUsers();
       

我的 Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>MyRestPrjct</display-name>
    <servlet>
        <servlet-name>Jersey RESTful Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.abhi</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey RESTful Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

【问题讨论】:

这通常是由于包含 Jersey 1.x jar 或在 WEB-INF/lib 文件夹中没有这些 jar。 【参考方案1】:

我只是没有以正确的方式放置罐子。我没有将所需的 jar 放在 webapps\MyRestPrjct\WEB-INF\lib 中,而是将其放在 webapps\MyRestPrjct\WEB-INF\lib\libs 中。

在我将 jar 从 libs 移动到 lib 后,它工作正常。

【讨论】:

【参考方案2】:

将所有 jars 放在 WEB-INF/lib 文件夹中为我解决了这个问题。

【讨论】:

【参考方案3】:

我在做同样的教程时也遇到过类似的问题,我发现问题是 web.xml 中指定的servelt类是

org.glassfish.jersey.servlet.ServletContainer

但是当我签入 jars 时,库中没有具有上述路径的包,所以我将其更改为现有的包

com.sun.jersey.spi.container.servlet.ServletContainer

它解决了这个问题。

【讨论】:

【参考方案4】:

尝试从教程点运行相同的模块时,我也遇到了同样的异常。我所做的就是下载下面的 jars 并添加到项目中。效果很好。jersey-common-2.0-m03.jarjersey-server-2.0-m03.jarjersey-container-servlet-core-2.28.jar

【讨论】:

【参考方案5】:

在我的情况下,通过在部署程序集中添加 Maven 依赖项来工作。(对于 Maven 项目*)

Right click project name (in eclipse) > configure build path > Deployment Assembly (in Left bar) > Add > java build Path Entries > Maven Dependencies > Finish

【讨论】:

以上是关于实例化 servlet 类 org.glassfish.jersey.servlet.ServletContainer 时出错的主要内容,如果未能解决你的问题,请参考以下文章

关于servlet的实例化

HTTP状态500错误实例化servlet类[重复]

求教:IDEA+Tomcat实例化servlet类过程中出现java.lang.ClassCastException

javax.servlet.ServletException: 实例化Servlet类[com.wk.web.RegisterServlet]异常

运行Servlet时报实例化类错误,再次刷新变404

tomcat容器是如何创建servlet类实例