Javascript 无法通过AJAX调用调用REST Jersey资源

Javascript 无法通过AJAX调用调用REST Jersey资源,javascript,jquery,ajax,jsp,jersey,Javascript,Jquery,Ajax,Jsp,Jersey,我正在尝试使用Jersey创建RESTful资源。我想要的是,点击一个链接,BookResource应该被访问并显示数据库中的书籍列表。现在我想要的是JavaScript中的函数抛出一个警报,表明它确实进行了ajax调用。然而,它进入request.fail循环,不做任何事情 BookResource.java import com.helper.BooksHelper; import com.servlets.Book; @Path("/books") public class Book

我正在尝试使用Jersey创建RESTful资源。我想要的是,点击一个链接,BookResource应该被访问并显示数据库中的书籍列表。现在我想要的是JavaScript中的函数抛出一个警报,表明它确实进行了ajax调用。然而,它进入request.fail循环,不做任何事情

BookResource.java


import com.helper.BooksHelper;
import com.servlets.Book;

@Path("/books")
public class BookResource {

    @GET
    @Path("/allBooks")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllBooks() {

        BooksHelper bookHelper = new BooksHelper();
        ArrayList<Book> listOfBooks = bookHelper.getListOfBooks();

        ResponseBuilder responseBuilder = Response.status(Status.OK);
        responseBuilder.entity(listOfBooks);

        Response response = responseBuilder.build();
        return response;    
    }
web.xml

<servlet>
    <servlet-name>Jersey Web 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>org.-------(hidden).library</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
  </servlet-mapping>
</web-app>

Jersey Web应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
组织。------(隐藏)。图书馆
1.
Jersey Web应用程序
/webapi/*
我希望index.jsp本身发出警报,确认ajax调用成功。我启动应用程序的url是 然后在成功登录后,url更改为,我在这里有一个链接,图书馆中的图书列表单击此处

,但单击它时除了警告“Inside js”和“Ajax call Make”外,什么都没有发生。我在控制台开发人员工具中发现一个错误,找不到“”。我做错了什么。我在网上列举了许多例子,他们就是这样做的。url不正确吗?任何帮助都将不胜感激。多谢各位


您是否尝试在浏览器中打开服务url?在我看来,你似乎遗漏了地址的某些部分,但我无法从你发布的信息中看出遗漏的部分是什么。唯一的提示是,“library”可能不是托管服务的web应用程序的名称。或者,您可以尝试在请求参数中指定“application/json”而不是“json”。还可以设置内容类型contentType:“application/json”@francescoforesti我尝试直接在浏览器中打开它。将获得一个普通页面,其中包含来自Ajax调用失败循环的错误警报。我也将json更改为application/json,但没有更改。我附上我的目录结构截图。如果您想查看任何代码,请务必告诉我。@AllahbakshAsadullah我设置了contentType:'application/json',但没有任何影响。请提出一些建议。这件事我已经坚持了两天了。谢谢。我可以调试资源吗。就发送和接收的标题而言是什么意思?
function libBooks(){

    alert("Inside js");
    //The above alert is displayed
    var requestData = {
            "dataType":  "json",
            "type":  "GET",
            "url":  "http://localhost:8080/library/webapi/books/allBooks"
    };

    var request = $.ajax(requestData);
    alert("Ajax call made");
    //The above alert is displayed

    request.success(function(data) {

        alert("Inside done function");
        //The above alert is not displayed

        var dataReceived =data.listOfBooks;
        var numOfItems = dataReceived.length;
        alert(numOfItems);

    });

    request.fail(function(jqXHR, status, errorMessage) {
        if((errorMessage = $.trim(errorMessage)) === "") {
            alert("An unspecified error occurred.  Check the server error log for details.");
        }
        else {
            alert("An error occurred:  " + errorMessage);
            //The above alert is displayed
        }
    });
}
<servlet>
    <servlet-name>Jersey Web 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>org.-------(hidden).library</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
  </servlet-mapping>
</web-app>