java - ajax 调用中的 Access-Control-Allow-Origin 到 jersey rest web 服务

标签 java ajax json rest cors

我使用 jersey JAX-Rs 作为 Web 服务来查询 mysql。我尝试通过混合移动应用程序使用 Web 服务。

我指的是这个 http://coenraets.org/blog/2011/11/building-restful-services-with-java-using-jax-rs-and-jersey-sample-application/#comment-440541

服务器端在tomcat server7中运行以下代码查询sql

@Path("/employees")
 public class EmployeeResource {

EmployeeDAO dao = new EmployeeDAO();

@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Employee> findAll() {
    return dao.findAll();
}
}

公共(public)类 EmployeeDAO {

public List<Employee> findAll() {
    List<Employee> list = new ArrayList<Employee>();
    Connection c = null;
String sql = "SELECT e.id, e.firstName, e.lastName, e.title FROM employee as e";

    try {
        c = ConnectionHelper.getConnection();
        Statement s = c.createStatement();
        ResultSet rs = s.executeQuery(sql);
        while (rs.next()) {
            list.add(processSummaryRow(rs));
        }
    } catch (SQLException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    } finally {
        ConnectionHelper.close(c);
    }
    return list;
}

protected Employee processSummaryRow(ResultSet rs) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setFirstName(rs.getString("firstName"));
        employee.setLastName(rs.getString("lastName"));
        employee.setTitle(rs.getString("title"));
        /*employee.setPicture(rs.getString("picture"));
        employee.setReportCount(rs.getInt("reportCount"));*/
        return employee;
    }

我已经创建了数据库目录,其中表名为 employee,字段为 id、firstName、lastName、title。

现在我在同一项目的web-content文件夹中有了html文件。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Employee Directory</title>
    </head>

    <body>

    <h1>Employee Directory</h1>

    <ul id="employeeList"></ul>

    <script src="http://code.jquery.com/jquery-1.7.min.js"></script>
    <script src="js/employeelist.js"></script>

    </body>

</html>

员工列表脚本

getEmployeeList();
        function getEmployeeList() {
            $.getJSON(serviceURL + 'employees', function(data) {
                $('#employeeList li').remove();
                var employees = data.employee;
                $.each(employees, function(index, employee) {
                    $('#employeeList').append(
                        '<li><a href="employeedetails.html#' + employee.id + '">'
                        + employee.firstName + ' ' + employee.lastName + ' (' 
                        + employee.title + ')</a></li>');
                });
            });
        }

这将在索引页面中显示确切的员工详细信息。

现在我已经在另一个项目中创建了一个 html 页面,我将在其中放置相同的 $.getJSON 调用,上面指定的将在控制台中抛出错误

   XMLHttpRequest cannot load http://localhost:8181/jQueryJAXRS/rest/employees. Origin null is not allowed by Access-Control-Allow-Origin.

实际上,我尝试开发一个具有客户端和服务器基础设施的应用程序。所以我需要在客户端中有 html 文件才能在服务器端使用 Jersey 网络服务。如果我制作 $.getJSON 或 $.ajax 真的很有帮助从另一个项目中的 html 文件调用以使用 Web 服务。

when i use this url http://localhost:8181/jQueryJAXRS/rest/employees  in my browser

它显示 xml

<employees>
<employee>
<firstName>john</firstName>
<id>1</id>
<lastName>doe</lastName>
<reportCount>0</reportCount>
<title>trainee</title>
</employee>
<employee>
<firstName>james</firstName>
<id>2</id>
<lastName>dane</lastName>
<reportCount>0</reportCount>
<title>developer</title>
</employee>
<employee>
<firstName>ramsy</firstName>
<id>4</id>
<lastName>stuart</lastName>
<reportCount>0</reportCount>
<title>QA</title>
</employee>
</employees>

但是当我尝试通过脚本方式时,它会显示发生 CORS 错误。提出一些想法将真正帮助我。

提前致谢。

最佳答案

感谢 Jhanvi 提出这个 CORS 想法。在这里我解释更多,以便更清楚地了解并使其完整解决此问题

我引用这个链接来解决这个问题

CORS JAR

下载 CORS jar 和 java-property jar。将这些 jar 放在 tomcat 服务器的 lib 文件夹中。然后在 web.xml 中添加以下过滤器作为 web-app 的 chlidnode。

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

此解决方案将解决 CORS 问题。

关于java - ajax 调用中的 Access-Control-Allow-Origin 到 jersey rest web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19902514/

相关文章:

java - 左右移动像素图像

Java - 在 paintComponent 中合成的圆角面板

java - 使用不同的 web.xml 部署 tomcat webapp

javascript - 我的 JavaScript 文件中的 Ruby 对象

java - 当 JSON 键以数字开头时,Rest-Assured IllegalArgumentException

javascript - 如何使用谷歌应用程序脚本删除事件并发送电子邮件

javascript - 使用 javascript 从同一文件调用 php 函数

javascript - AJAX:如何在单击按钮时更改客户端和服务器端的值?

java - 在 Android 中使用 MyApplication 类获取 JSON 数据

arrays - 快速查找值 json 数组