HTTP 状态 500 - 内部服务器错误
HTTP Status 500 - Internal Server Error eclipse
我正在尝试 运行 Tomcat v9.0 上的一个应用程序,并且已经编写了一个据称 'prints' 基于 html table 的函数在使用库 restFB 提取的数据数组列表上。我已经在服务器上没有 运行 的另一个项目中测试了 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();
是对另一个 class 的引用,其中我有 returns 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;
}
根据我们在聊天会话中所做的修改,问题是包含 com.restfb.FacebookClient
class 的 jar 文件未导出到 war 文件/部署到应用程序服务器。
对于要导出的 jar,除了将其添加到 java 构建路径之外,它还必须存在于项目的 WEB-INF/lib
文件夹中。
在这种情况下,jar 文件是从外部位置添加的,因此它不存在于 WEB-INF/lib
文件夹中,因此在部署应用程序/或生成 war 文件时不会导出.
解决问题将jar文件添加到项目的WEB-INF/lib
文件夹中。
我正在尝试 运行 Tomcat v9.0 上的一个应用程序,并且已经编写了一个据称 'prints' 基于 html table 的函数在使用库 restFB 提取的数据数组列表上。我已经在服务器上没有 运行 的另一个项目中测试了 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();
是对另一个 class 的引用,其中我有 returns 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;
}
根据我们在聊天会话中所做的修改,问题是包含 com.restfb.FacebookClient
class 的 jar 文件未导出到 war 文件/部署到应用程序服务器。
对于要导出的 jar,除了将其添加到 java 构建路径之外,它还必须存在于项目的 WEB-INF/lib
文件夹中。
在这种情况下,jar 文件是从外部位置添加的,因此它不存在于 WEB-INF/lib
文件夹中,因此在部署应用程序/或生成 war 文件时不会导出.
解决问题将jar文件添加到项目的WEB-INF/lib
文件夹中。