【问题标题】:HTTP Status 500 - Internal Server Error eclipseHTTP 状态 500 - 内部服务器错误 eclipse
【发布时间】:2018-03-29 18:08:36
【问题描述】:

我正在尝试在 Tomcat v9.0 上运行一个应用程序,并且已经编写了一个函数,该函数应该基于使用库 restFB 提取的数据数组列表“打印”一个 html 表。我已经在另一个不在服务器上运行的项目中测试了 restFB 代码,它工作正常,但是当我尝试使用按钮并调用 servlet 内的函数时,它给了我状态 500 错误。

java.lang.NoClassDefFoundError: com/restfb/FacebookClient
    Logica.FacebookCall.doPost(FacebookCall.java:49)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

这里是servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        // doGet(request, response);
        String button = request.getParameter("button");
        if ("Obtener Datos".equals(button)) {
            FacebookCalls fb = new FacebookCalls();
            ArrayList<String> html = fb.getInfoMiembros();
            PrintWriter out = response.getWriter();
            out.println("<table border=\"1\">");
            out.println("<tr>");
            for (int i = 0; i < html.size(); i++) {
                if (i > 0 && i % 4 == 0) {
                    out.println("</tr><tr>");
                }
                out.println("<td>" + html.get(i) + "</td>");
            }
            out.println("</tr>");
            out.println("</table>");
        }
    }

FacebookCalls fb = new FacebookCalls(); 是对另一个类的引用,其中我有返回 facebook 数据数组列表的代码。如下图:

public FacebookCalls() {}

public ArrayList<String> getInfoMiembros()
{
    String accessToken = "myToken";

    ArrayList<Persona> miembros = new ArrayList<Persona>();

    ArrayList<String> listaNombres = new ArrayList<String>();

    @SuppressWarnings("deprecation")
    FacebookClient fbClient = new DefaultFacebookClient(accessToken);

    JsonObject fetchObjectsResults =
              fbClient.fetchObjects(Arrays.asList("352867045226094"), 
                       JsonObject.class, Parameter.with("fields","members{name,gender}"));

    JSONObject jsonObj = new JSONObject(fetchObjectsResults.get("352867045226094").toString());
    JSONArray array = jsonObj.getJSONObject("members").getJSONArray("data");
    for(int i = 0; i < array.length(); i++)
    {
        Persona miembro = new Persona();
        miembro.setNombre(array.getJSONObject(i).getString("name"));
        try {
            miembro.setGenero(array.getJSONObject(i).getString("gender"));
        }
        catch(Exception e)
        {
            miembro.setGenero("No disponible");
        }
        miembros.add(miembro);
    }       
    for(int i = 0; i < miembros.size(); i++)
    {
        listaNombres.add(miembros.get(i).getNombre());
        //html.add(miembros.get(i).getGenero());
    }
    listaNombres = sortApellido(listaNombres);
    return listaNombres;
}

【问题讨论】:

  • I) 我希望没有人发布过真正的令牌。 II) 问题是找不到类 FacebookClient。这个类在哪里定义?它在一个jar文件中吗?如果是,您必须确保将 jar 包含在 war 文件中,否则它存在于 servlet 容器的 lib 文件夹中。
  • 它确实来自一个jar文件,来自restFB外部库,它被放置在项目的“Referenced Librares”部分
  • 部署时是否包含在war文件中?或者它是否存在于tomcat的lib文件夹中?如果您使用 eclipse,为了将其包含在 war 文件中,必须在 java 构建路径中将其标记为导出。
  • 没有war文件,至少我认为没有,没有它,项目部署得很好。有没有办法生成war文件并手动添加jar引用?编辑:刚刚在构建路径中标记了要导出的 jar 文件,并且弹出了相同的错误
  • 你是如何运行它的,你使用的是哪个 ide?​​span>

标签: java jsp servlets http-error restfb


【解决方案1】:

根据我们在聊天会话中所做的修改,问题是包含 com.restfb.FacebookClient 类的 jar 文件没有在 war 文件中导出/部署到应用程序服务器。

对于要导出的 jar,除了将其添加到 java 构建路径之外,它还必须存在于项目的 WEB-INF/lib 文件夹中。

在这种情况下,jar 文件是从外部位置添加的,因此它不存在于 WEB-INF/lib 文件夹中,因此在部署应用程序/或生成 war 文件时不会导出。

为解决问题,将jar文件添加到项目的WEB-INF/lib文件夹中。

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2020-02-13
    • 2015-03-24
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多