Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有Jersey和jQuery的RESTfull Web服务得到奇怪的响应_Java_Jquery_Rest_Jersey 1.0 - Fatal编程技术网

Java 带有Jersey和jQuery的RESTfull Web服务得到奇怪的响应

Java 带有Jersey和jQuery的RESTfull Web服务得到奇怪的响应,java,jquery,rest,jersey-1.0,Java,Jquery,Rest,Jersey 1.0,我尝试构建一个RESTfull Web服务 在前端,我使用jQuery获取数据 在后端,我正在使用来自www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson的示例进行尝试/ 从浏览器中调用127.0.0.1:8080/restEx/rest/json/get,我得到了预期的答案: {"title":"Enter Sandman","singer":"Metallica"} 但是,当我尝试使用$.get()获取这些数据

我尝试构建一个RESTfull Web服务

在前端,我使用jQuery获取数据

在后端,我正在使用来自www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson的示例进行尝试/

从浏览器中调用127.0.0.1:8080/restEx/rest/json/get,我得到了预期的答案:

{"title":"Enter Sandman","singer":"Metallica"}
但是,当我尝试使用$.get()获取这些数据时,没有得到任何答案。 查看Firebug告诉我,我没有得到数据

我也试过了

return Response.ok("{status: 'success'}").header("Access-Control-Allow-Origin", "*").build();
正如我在另一个问题中发现的那样 在Firebug中,我现在看到了数据,但jQuery仍然没有执行success函数。我仍然只看到fail函数

那么我做错了什么?我怎样才能让这些东西起作用

我正在使用jQuery 2.0.2和Jersey 1.8(我在Jersey.java.net/documentation/latest/getting started.html中使用Jersey 2进行了尝试,并以相同的结果运行了项目),该项目部署在Tomcat 7上

index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="assets/js/jquery-2.0.2.js"></script>


</head>
<body>
<div id="first" class="container"></div>

<script type="text/javascript">

    var url = "http://127.0.0.1:8080/restEx/rest/json/get";

    $.get(url, {}, function(){alert("success");},"json")
        .fail(function(){alert("fail");})
    ;
</script>
</body>
</html>
Track.java

package com.mkyong;

public class Track {

    String title;
    String singer;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSinger() {
        return singer;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    @Override
    public String toString() {
        return "Track [title=" + title + ", singer=" + singer + "]";
    }

}

错误的URL,更改
http://127.0.0.1:8080/restEx/rest/json/test
http://127.0.0.1:8080/restEx/rest/json/get

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="assets/js/jquery-2.0.2.js"></script>


</head>
<body>
<div id="first" class="container"></div>

<script type="text/javascript">

    var url = "http://127.0.0.1:8080/restEx/rest/json/get";

    $.get(url, {}, function(){alert("success");},"json")
        .fail(function(){alert("fail");})
    ;
</script>
</body>
</html>

变量url=”http://127.0.0.1:8080/restEx/rest/json/get";
$.get(url,{},function(){alert(“success”);},“json”)
.fail(函数(){alert(“fail”);})
;

多亏了Marcos Zolnoswski的链接,我才得以解决我的问题。 通过这里提供的信息,我能够找到一个解决方案,该解决方案描述了如何将缺少的头添加到所有请求中

作为my Jersey Servlet的init参数:

<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>your.package.ResponseCorsFilter</param-value>
</init-param> 

即使使用正确的URL,行为也会发生:(我尝试使用这个Servlet时也使用了相同的行为:公共类JSONServlet扩展了HttpServlet{public void doGet(HttpServletRequest,HttpServletResponse)response.setContentType(“application/json”);PrintWriter out=response.getWriter();out.println(arrayObj);out.close();}}现在您遇到了交叉请求问题。如果您尝试以下技巧,可能会奏效:。谢谢您的提示。根据这些信息,我能够解决我的问题。我还发现了这个问题。
package com.mkyong;

public class Track {

    String title;
    String singer;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSinger() {
        return singer;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    @Override
    public String toString() {
        return "Track [title=" + title + ", singer=" + singer + "]";
    }

}
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="assets/js/jquery-2.0.2.js"></script>


</head>
<body>
<div id="first" class="container"></div>

<script type="text/javascript">

    var url = "http://127.0.0.1:8080/restEx/rest/json/get";

    $.get(url, {}, function(){alert("success");},"json")
        .fail(function(){alert("fail");})
    ;
</script>
</body>
</html>
<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
    <param-value>your.package.ResponseCorsFilter</param-value>
</init-param> 
package yoiur.package.security;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

public class ResponseCorsFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) {

        ResponseBuilder resp = Response.fromResponse(contResp.getResponse());
        resp.header("Access-Control-Allow-Origin", "*")
                .header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");

        String reqHead = req.getHeaderValue("Access-Control-Request-Headers");

        if(null != reqHead && !reqHead.equals("")){
            resp.header("Access-Control-Allow-Headers", reqHead);
        }

        contResp.setResponse(resp.build());
            return contResp;
    }

}